टू-वायर इंटरफ़ेस: एड्रेस, पेज, बैंक और टाइमिंग
हर प्लगेबल मॉड्यूल को उन्हीं दो तारों पर मैनेज किया जाता है — एक सीरियल क्लॉक और एक सीरियल डेटा लाइन — I²C प्रोटोकॉल का इस्तेमाल करते हुए, जिसे स्पेसिफ़िकेशन टू-वायर इंटरफ़ेस (TWI) कहते हैं। SFP, QSFP, XFP और CMIS मॉड्यूल के बीच जो अलग होता है वह यह है कि एड्रेस स्पेस को इसके ऊपर कैसे व्यवस्थित किया गया है: अलग डिवाइस, पेज्ड मेमोरी, या पेज के बैंक। यह मटीरियल वह प्रोटोकॉल-लेवल नज़रिया है जिस पर प्रोग्रामर, होस्ट और CodingBox सभी निर्भर करते हैं।
फ़िज़िकल लेयर
- दो ओपन-ड्रेन लाइन, SCL और SDA, होस्ट साइड पर पुल-अप की गई; 3.3 V लॉजिक।
- मॉड्यूल हमेशा स्लेव होता है; होस्ट (या प्रोग्रामर) मास्टर होता है और क्लॉक जनरेट करता है।
- मॉड्यूल क्लॉक स्ट्रेच कर सकते हैं (SCL को लो रखते हुए) जब तक कोई माइक्रोकंट्रोलर डेटा फ़ेच करता है — स्पेसिफ़िकेशन 500 µs तक की अनुमति देते हैं।
- प्रेज़ेंस और सिलेक्शन अलग पिन हैं, बस ट्रांज़ैक्शन नहीं: MOD_ABS (SFP), ModPrsL और ModSelL (QSFP-क्लास और CMIS)। ModSelL कई मॉड्यूल को एक बस शेयर करने देता है; SFP में कोई सिलेक्ट पिन नहीं है, इसलिए होस्ट हर केज को अपनी बस या एक मल्टीप्लेक्सर देते हैं।
स्पेसिफ़िकेशन के हिसाब से एड्रेस स्पेस
| फ़ैमिली | डिवाइस एड्रेस (8-बिट राइट / 7-बिट) | ऑर्गनाइज़ेशन | पेज सिलेक्ट |
|---|---|---|---|
| SFP, SFP+, SFP28 (SFF-8472) | A0h / 50h पहचान जानकारी, A2h / 51h डायग्नोस्टिक्स | A0h: 256 फ़्लैट बाइट; A2h: 128 फ़्लैट + ऑप्शनल पेज्ड अपर हाफ़ | A2h बाइट 127, अगर A0h बाइट 64 बिट 4 सेट हो |
| XFP (INF-8077i) | A0h | 128 फ़्लैट + पेज्ड अपर “टेबल” | बाइट 127 |
| QSFP+, QSFP28 (SFF-8636) | A0h | 128 फ़्लैट + पेज्ड अपर 128 | बाइट 127 |
| QSFP-DD, OSFP, SFP-DD… (CMIS) | A0h | 128 फ़्लैट + अपर 128 के बैंक × पेज | बाइट 126 बैंक, बाइट 127 पेज |
इसलिए एक SFP को बेसिक्स के लिए दो डिवाइस एड्रेस चाहिए और कोई पेजिंग नहीं; XFP के बाद सब कुछ एक एड्रेस और पेजिंग इस्तेमाल करता है। कुछ लेगेसी SFP A0h बाइट 92 बिट 2 (“address change required”) सेट करते हैं और A2h के जवाब देने से पहले एक वेंडर सीक्वेंस चाहिए होता है।
ट्रांज़ैक्शन
| ऑपरेशन | सीक्वेंस | नोट्स |
|---|---|---|
| रैंडम रीड | START · डिवाइस addr+W · बाइट ऑफ़सेट · START · डिवाइस addr+R · डेटा… · STOP | रोज़मर्रा की रीड; ऑफ़सेट ऑटो-इंक्रीमेंट होता है |
| सीक्वेंशियल रीड | पहले बाइट के बाद क्लॉकिंग जारी रखें | मौजूदा डिवाइस/पेज व्यू के भीतर 255 → 0 पर रैप होता है |
| करंट-एड्रेस रीड | START · डिवाइस addr+R · डेटा | पिछले ऑफ़सेट से जारी रहती है — अगर कोई और मास्टर बीच में आ जाए तो नाज़ुक |
| बाइट राइट | START · addr+W · ऑफ़सेट · डेटा · STOP | फिर t_WR का इंतज़ार करें |
| पेज राइट | START · addr+W · ऑफ़सेट · डेटा × n · STOP | मेमोरी डिवाइस से सीमित (आमतौर पर 4–16 बाइट) और इसकी इंटरनल पेज बाउंड्री पार नहीं करनी चाहिए |
| एक्नॉलेज पोलिंग | जब तक मॉड्यूल ACK न करे, START + addr+W भेजते रहें | यह जानने का सबसे तेज़ तरीक़ा कि राइट साइकल पूरी हो गई |
किसी अपर पेज को पढ़ना हमेशा दो ट्रांज़ैक्शन होते हैं: पेज-सिलेक्ट बाइट (127, और CMIS बैंक के लिए 126) लिखें, फिर 128–255 पढ़ें। सिलेक्शन तब तक बना रहता है जब तक बदला न जाए, यही वजह है कि पुराना पेज सिलेक्ट “wrong content” रीड का एक क्लासिक कारण है।
स्पीड
| स्पेसिफ़िकेशन | क्लॉक |
|---|---|
| SFF-8472 (SFP) | 100 kHz बेसलाइन; कुछ मॉड्यूल 400 kHz बर्दाश्त करते हैं |
| INF-8077i (XFP) | 100 kHz |
| SFF-8636 rev 2.x (QSFP) | 400 kHz तक |
| CMIS / QSFP-DD / OSFP हार्डवेयर स्पेक्स | 400 kHz तक |
धीमा होना हमेशा वैध है। राइट के लिए ज़्यादातर प्रोग्रामर नॉमिनल क्लॉक से काफ़ी नीचे चले जाते हैं — लो किलोहर्ट्ज़ तक — क्योंकि EEPROM राइट साइकल और माइक्रोकंट्रोलर-मध्यस्थ मॉड्यूल रीड के मुक़ाबले टाइमिंग के लिए कहीं ज़्यादा संवेदनशील होते हैं।
टाइमिंग जो मायने रखती है
| पैरामीटर | सामान्य लिमिट | अर्थ |
|---|---|---|
| t_init (SFP) | 300 ms | पावर-अप / TX_DISABLE negation से लेकर मॉड्यूल के पूरी तरह ऑपरेशनल होने और बस के जवाब देने तक |
| t_init (QSFP) | 2 s | इनिशियलाइज़ेशन पूरा होने और Data_Not_Ready क्लियर होने तक |
| MgmtInit (CMIS) | हार्डवेयर स्पेक्स के हिसाब से ≤ 2 s | मॉड्यूल के MgmtInit छोड़ने और पहचान जानकारी वैध होने तक |
| t_WR | 40 ms | बाइट या सीक्वेंशियल राइट के लिए मैक्सिमम राइट साइकल; ACK पोल करें या इंतज़ार करें |
| t_clock_hold | 500 µs | मॉड्यूल द्वारा मैक्सिमम क्लॉक स्ट्रेच |
| ton_IntL | 200 ms | फ़्लैग इवेंट से IntL असर्टेड होने तक |
| डेटा रेडी | बाइट 110 बिट 0 (SFP), बाइट 2 बिट 0 (QSFP) | सेट रहते हुए मॉनिटर पर भरोसा न करें |
दिक़्क़तें और उनके फ़िक्स
| लक्षण | प्रोटोकॉल कारण | फ़िक्स |
|---|---|---|
| सब FFh | कोई ACK नहीं — ग़लत डिवाइस एड्रेस, पेज लागू नहीं, मॉड्यूल ग़ायब | A0h बनाम A2h, पेज बिट, सीटिंग जाँचें |
| ग़लत कॉन्टेंट | पुराना पेज/बैंक सिलेक्ट | हर अपर-पेज एक्सेस से पहले 127 (और 126) लिखें |
| करप्टेड बाइट | क्लॉक बहुत तेज़, लंबी लीड, DDM पोल करने वाले होस्ट से कंटेंशन | धीमा करें, छोटी केबल, लाइव स्विच में नहीं बेंच पर पढ़ें |
| राइट “succeeds”, पुराना ही वापस पढ़ा जाता है | बहुत तेज़ लिखा, t_WR इग्नोर किया, पेज-राइट बाउंड्री पार की | वेट के साथ बाइट राइट या छोटे चंक; ACK पोलिंग |
| बस हैंग, SCL या SDA लो पर अटकी | ट्रांज़ैक्शन बीच में रुकी | नौ SCL पल्स क्लॉक आउट करें, फिर STOP; मॉड्यूल पावर-साइकल करें |
| स्विच में काम करता है, प्रोग्रामर पर डेड | मॉड्यूल को LPMode रिलीज़ या एक सिलेक्ट पिन चाहिए | ModSelL/LPMode का ध्यान रखें; t_init के लिए समय दें |
इनके लिए बेंच-साइड डायग्नोस्टिक्स EEPROM रीड और राइट त्रुटियाँ में जमा हैं; बस के ऊपर चलने वाली प्रोटेक्शन स्कीम (पासवर्ड, हार्डवेयर WP, सेव कमांड) राइट-प्रोटेक्शन के प्रकार में हैं।
लाइव सिस्टम में पढ़ना
एक होस्ट हर कुछ सेकंड में DDM पोल करता है और फ़्लैग पर रिएक्ट करता है; उसी बस पर एक दूसरा मास्टर (एक प्रोग्रामर क्लिप, कोई इन-बैंड टूल) कोलिज़न, ग़लत-एड्रेस वाली राइट, और सबसे बुरी स्थिति में, ग़लत ऑफ़सेट पर पड़ने वाली पेज राइट से “ब्रिक” हुआ मॉड्यूल पैदा करता है। ज़रूरी हो तो जगह पर ही पढ़ें; लिखने का काम बेंच पर करें।
CodingBox में
CodingBox हर फ़ॉर्म फ़ैक्टर के हिसाब से एड्रेस मॉडल अपने आप हैंडल करता है — SFP के लिए A0h/A2h, QSFP और XFP के लिए पेजिंग, CMIS के लिए बैंक + पेज — आपको प्रोग्रामर प्रोफ़ाइल के हिसाब से बस स्पीड और राइट टाइमिंग सेट करने देता है, और हर राइट को वापस पढ़कर वेरिफ़ाई करता है (मॉड्यूल में लिखना)।