प्रोग्रामर पर EEPROM पढ़ने और लिखने की त्रुटियाँ
किसी मॉड्यूल का डायग्नोसिस या कोडिंग होने से पहले उसे पढ़ना ज़रूरी है — और फिर, अक्सर, लिखना भी। दोनों चरण अपने ख़ास तरीक़ों से फ़ेल होते हैं। यह पेज हर फ़ेल्योर को उसके कारण और उस सेटिंग या प्रोसीजर से जोड़ता है जो उसे ठीक करती है — मॉड्यूल के बिल्कुल न दिखने से लेकर ऐसे राइट तक जो “सफल” होता है और चुपचाप ग़ायब हो जाता है।
मॉड्यूल डिटेक्ट नहीं होता
| जाँच | क्यों |
|---|---|
| सीटिंग और क्रैडल | मॉड्यूल को कनेक्टर में पूरी तरह बैठना चाहिए; उसके फ़ॉर्म फ़ैक्टर के लिए एडाप्टर इस्तेमाल करें — QSFP क्रैडल में एक SFP नहीं दिखेगा |
| पावर-अप टाइम | इंसर्ट करने के बाद टू-वायर बस के जवाब देने से पहले मॉड्यूल को ~2 s (SFP) तक या उससे ज़्यादा (CMIS) चाहिए |
| मॉड्यूल प्रेज़ेंट सिग्नल | MOD_ABS / ModPrsL असर्ट होना चाहिए; मुड़ा हुआ पिन या इस सिग्नल के बिना मॉड्यूल ग़ैर-मौजूद जैसा दिखता है |
| लो-पावर स्टेट (CMIS) | LowPwr में पहचान जानकारी पढ़ी जा सकती है, पर कुछ होस्ट/प्रोग्रामर पूरी एक्सेस के लिए Ready चाहते हैं |
| बस स्पीड | 100 kHz या उससे कम से शुरू करें; कुछ मॉड्यूल 400 kHz पर NACK करते हैं |
| डेड मॉड्यूल | किसी भी स्पीड पर न DDM, न पहचान जानकारी — इसे ख़ारिज करने से पहले दूसरे बोर्ड पर पुष्टि करें |
रीड FFh, 00h या गारबेज देती है
| लक्षण | कारण | फ़िक्स |
|---|---|---|
| सब FFh | I²C NACK — उस एड्रेस पर कोई डिवाइस नहीं, या पेज मौजूद नहीं | एड्रेस जाँचें (SFP पर A0h पहचान बनाम A2h डायग्नोस्टिक्स; QSFP/CMIS पर पेजिंग के साथ सिंगल A0h) |
| सब 00h | मॉड्यूल को पावर नहीं मिली / रीसेट में है; या सचमुच ख़ाली EEPROM | क्रैडल की पावर जाँचें, मॉड्यूल मौजूद है या नहीं; ख़ाली मॉड्यूल भी होते हैं (अनकोडेड स्टॉक) |
| सही लंबाई, ग़लत कंटेंट | जिस पेज का इरादा था उससे अलग पेज पढ़ा जा रहा है | पेज-सिलेक्ट बाइट (127) लिखें और दोबारा पढ़ें; CMIS पर बैंक सिलेक्ट (126) भी |
| गड़बड़ / शिफ़्टेड बाइट | बस बहुत तेज़, लंबी केबल, होस्ट के साथ कंटेंशन | ≤ 100 kHz पर लाएँ; छोटी लीड इस्तेमाल करें; लाइव स्विच में नहीं, बेंच पर पढ़ें |
| A2h रीड फ़ेल, A0h ठीक | बिना डायग्नोस्टिक्स वाला मॉड्यूल, या प्रोटेक्टेड डायग्नोस्टिक्स ब्लॉक | A0h बाइट 92 बिट 6 जाँचें (DDM इम्प्लीमेंटेड); कुछ राइट-प्रोटेक्टेड टाइप सिर्फ़ A0h का जवाब देते हैं |
| रीड के बीच वैल्यू बदल जाती हैं | लाइव मॉनिटर — सामान्य; या data not ready | DDM बाइट का बदलना तय है; किसी स्नैपशॉट पर भरोसा करने से पहले डेटा-रेडी बिट जाँचें |
राइट सीधे फ़ेल हो जाता है
WRITE FAIL, डेटा पर NACK, या बाइट वापस पढ़ने पर अनबदला:
| कारण | कैसे पहचानें | क्या करें |
|---|---|---|
| पासवर्ड ज़रूरी (फ़र्मवेयर कंट्रोलर) | जब तक पासवर्ड एड्रेस (SFP A2h 0x7B–0x7E, QSFP 123–126, CMIS 122–125) पर सही वैल्यू न रखी जाए, राइट अस्वीकार | मॉड्यूल का पासवर्ड राइट-प्रोटेक्टेड मेमोरी और पासवर्ड में डालें; जाने-पहचाने विक्रेता पासवर्ड डेटाबेस से लागू होते हैं |
| हार्डवेयर राइट प्रोटेक्ट | पासवर्ड चाहे जो हो, रीड-ओनली; पावर साइकल के बाद भी बना रहता है | WP पिन को प्रोग्रामर बोर्ड से ड्राइव करना ज़रूरी है — अकेला सॉफ़्टवेयर नहीं कर सकता; देखें राइट-प्रोटेक्शन के प्रकार |
| टाइमिंग | रुक-रुक कर फ़ेल होना, आधे-अधूरे पेज लिखे जाना | क्लॉक धीमी करें (भरोसेमंद EEPROM राइट के लिए अक्सर ~1 kHz चाहिए), बाइट/पेज के बीच राइट-साइकल टाइम (5–10 ms) का ध्यान रखें, इंटर-ब्लॉक डिले जोड़ें |
| रीड-ओनली क्षेत्र | कुछ ख़ास बाइट कभी नहीं बदलते (चेकसम, कुछ पार्ट पर थ्रेशोल्ड, वेंडर एरिया) | EEPROM में डिज़ाइन से ही एक प्रोटेक्टेड क्षेत्र होता है; सिर्फ़ वही फ़ील्ड लिखें जिनकी मॉड्यूल इजाज़त देता है |
| ग़लत स्टेट | राइट स्वीकार करने से पहले CMIS मॉड्यूल को LowPwr, या डीएक्टिवेटेड डेटा-पाथ चाहिए हो सकता है | पहले मॉड्यूल को ज़रूरी स्टेट में लाएँ |
| पेज सिलेक्ट नहीं किया गया | आपने सही ऑफ़सेट ग़लत पेज पर लिखा | राइट से पहले बाइट 127 (और 126) सेट करें और पेज-सिलेक्ट बाइट वापस पढ़कर पुष्टि करें |
राइट “सफल” होता है लेकिन टिकता नहीं
- पावर साइकल के बाद पलट जाता है — मॉड्यूल राइट को टेम्परेरी मेमोरी में रखता है और उसे विक्रेता के save command की ज़रूरत होती है; इसके बिना पुरानी इमेज वापस आ जाती है। इसे एक प्रोग्रामिंग स्क्रिप्ट संभालती है (राइट-प्रोटेक्शन टाइप 4)।
- तुरंत पलट जाता है — माइक्रोकंट्रोलर EEPROM को अपने ख़ुद के स्टोर से मिरर करता है और आपके बाइट को ओवरराइट कर देता है; इसके लिए निर्माता के एल्गोरिद्म (टाइप 5) की ज़रूरत होती है।
- कुछ बाइट टिकते हैं, बाक़ी नहीं — आंशिक रूप से प्रोटेक्टेड मैप; फ़ील्ड-दर-फ़ील्ड लिखें और हर एक की पुष्टि करें।
सफल राइट के बाद भी होस्ट मॉड्यूल को अस्वीकार करता है
| कारण | फ़िक्स |
|---|---|
| चेकसम पुराने — CC_BASE (बाइट 63), CC_EXT (95), CC_DMI (A2h 95), QSFP 191/223 | दोबारा कैलकुलेट करें; CodingBox राइट पर यह अपने आप करता है (मेमोरी मैप) |
| पहचान जानकारी अब असंगत है — जैसे विक्रेता बदल गया पर कंप्लायंस कोड या तरंगदैर्ध्य अलग हार्डवेयर का संकेत देते हैं | पहचान जानकारी को असली ऑप्टिक्स से मेल खाता रखें (स्पीड और रेट, फ़िज़िकल मिसमैच) |
| ग़लत मॉड्यूल टाइप के लेआउट पर लिखा गया | SFP की तरह लिखा गया एक XFP, या QSFP पेज का भ्रम — बैकअप से रीस्टोर करें |
राइट के बाद मॉड्यूल डेड
कैलिब्रेशन कॉन्स्टेंट, थ्रेशोल्ड या वेंडर-विशिष्ट क्षेत्र (जहाँ कुछ कंट्रोलर अपना कॉन्फ़िगरेशन रखते हैं) पर गारबेज लिख देने से मॉड्यूल ब्रिक हो सकता है। रिकवरी का रास्ता: राइट से पहले CodingBox द्वारा लिया गया बैकअप code database से रीस्टोर करें, फिर सिर्फ़ इरादा की गई फ़ील्ड लिखें।
सुनहरे नियम
- पहले पढ़ें और सेव करें — हर राइट से पहले एक पूरा रीड होना चाहिए जो डेटाबेस में जाकर पहुँचे।
- पहली राइट कोशिश से पहले प्रोटेक्शन टाइप पहचानें (राइट-प्रोटेक्शन के प्रकार)।
- धीमे चलें — क्लॉक और इंटर-बाइट टाइमिंग ज़्यादातर “रैंडम” फ़ेल्योर हल कर देती हैं।
- सिर्फ़ वही लिखें जो इरादा हो — फ़ील्ड, पूरे पेज नहीं, जब तक कि कोई इमेज रीस्टोर न कर रहे हों।
- पावर साइकल के बाद दोबारा पढ़कर पुष्टि करें।
CodingBox में
CodingBox हर फ़ॉर्म फ़ैक्टर के लिए सही एड्रेस और पेजिंग के साथ मॉड्यूल पढ़ता है, EEPROM editor में रॉ और डिकोडेड बाइट दिखाता है, राइट पर चेकसम दोबारा कैलकुलेट करता है, अपने आप बैकअप सेव करता है, और प्रोटेक्टेड व save-command वाले मॉड्यूल के लिए पासवर्ड एंट्री और प्रोग्रामिंग स्क्रिप्ट सपोर्ट करता है (मॉड्यूल लिखना)। अगर किसी बोर्ड-लेवल ख़राबी का शक हो, तो प्रोडक्ट का समस्या निवारण पेज देखें।
इन फ़ेल्योर के पीछे की बस मैकेनिक्स — एड्रेस, पेज सिलेक्ट, राइट साइकल टाइम, क्लॉक स्ट्रेचिंग: टू-वायर इंटरफ़ेस।
मॉड्यूल इस तरह जवाब क्यों देता है — MCU-एमुलेटेड मेमोरी, बूट विंडो, क्लॉक स्ट्रेचिंग, प्रोटेक्टेड क्षेत्र: कंट्रोलर और फ़र्मवेयर।