CodingBox 說明文件

雙線介面:地址、頁面、記憶庫與時序

每個可插拔模組都通過同樣的兩根線(一根串行時鐘線,一根串行數據線)來管理,使用規範中稱為雙線介面(TWI)的 I²C 協議。SFP、QSFP、XFP 和 CMIS 模組的區別在於地址空間在其之上是如何組織的:獨立器件、分頁記憶體,或是成組的頁面(記憶庫)。本文是編程器、主機和 CodingBox 都依賴的協議層視角。

物理層

  • 兩根開漏線路,SCLSDA,由主機側上拉;3.3 V 邏輯電平。
  • 模組始終是從設備;主機(或編程器)是主設備,負責產生時鐘。
  • 模組可能會拉伸時鐘(將 SCL 拉低),以便微控制器取數據,規範允許最長 500 µs。
  • 在位檢測和選擇是獨立的引腳,而不是總線事務:MOD_ABS(SFP)、ModPrsL 和 ModSelL(QSFP 類和 CMIS)。ModSelL 讓多個模組可以共享一條總線;SFP 沒有選擇引腳,因此主機會為每個籠子配備獨立總線或使用多路複用器。

按規範劃分的地址空間

系列器件地址(8 位元寫入/7 位元)組織方式頁面選擇
SFP、SFP+、SFP28(SFF-8472A0h/50h 身份資訊,A2h/51h 診斷A0h:256 位元組平坦地址;A2h:128 位元組平坦地址 + 可選分頁上半部分A2h 位元組 127,若 A0h 位元組 64 位元 4 置位
XFP(INF-8077iA0h128 位元組平坦地址 + 分頁上層「表格」位元組 127
QSFP+、QSFP28(SFF-8636A0h128 位元組平坦地址 + 分頁上層 128 位元組位元組 127
QSFP-DD、OSFP、SFP-DD…(CMISA0h128 位元組平坦地址 + 上層 128 位元組的記憶庫 × 頁面位元組 126 為記憶庫,位元組 127 為頁面

因此 SFP 的基本功能需要兩個器件地址,且不涉及分頁;XFP 之後的所有形態都使用一個地址並配合分頁。部分老舊 SFP 會置位 A0h 位元組 92 位元 2(「需要地址切換」),需要先執行廠商定義的序列,A2h 才會響應。

事務

操作序列說明
隨機讀取START · 器件地址+W · 位元組偏移 · START · 器件地址+R · 數據…… · STOP日常讀取方式;偏移量自動遞增
順序讀取第一個位元組之後繼續提供時鐘在當前器件/頁面視圖內從 255 → 0 回繞
當前地址讀取START · 器件地址+R · 數據從上次的偏移量繼續;如果有其他主設備介入則不可靠
位元組寫入START · 地址+W · 偏移 · 數據 · STOP之後等待 t_WR
頁面寫入START · 地址+W · 偏移 · 數據 × n · STOP受限於記憶體器件本身(通常 4–16 位元組),且不得跨越其內部頁面邊界
應答輪詢反覆發出 START + 地址+W,直到模組應答(ACK)判斷寫入週期是否完成的最快方法

讀取上層頁面始終需要兩次事務:先寫入頁面選擇位元組(127,CMIS 記憶庫還需 126),再讀取 128–255。該選擇會一直保持,直到被更改,因此過時的頁面選擇是導致讀到「內容錯誤」的典型原因。

速率

規範時鐘
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 撤銷開始,到模組完全可工作且總線開始響應為止
t_init(QSFP)2 s到初始化完成、Data_Not_Ready 清除為止
MgmtInit(CMIS)按硬件規範 ≤ 2 s到模組離開 MgmtInit 狀態、身份資訊有效為止
t_WR40 ms單位元組或順序寫入的最長寫入週期;輪詢 ACK 或直接等待
t_clock_hold500 µs模組允許的最長時鐘拉伸時間
ton_IntL200 ms從旗標事件發生到 IntL 置位為止
數據就緒位元組 110 位元 0(SFP),位元組 2 位元 0(QSFP)該位元置位期間不要相信監測值

常見問題及解決方法

現象協議原因解決方法
全部為 FFh無應答(ACK):器件地址錯誤、頁面未實現、模組不在位檢查 A0h 與 A2h、頁面選擇位元、插接是否到位
內容錯誤頁面/記憶庫選擇過時每次訪問上層頁面前都寫入 127(以及 126)
位元組損壞時鐘過快、線纜過長、與主機輪詢 DDM 產生爭用降低速率、縮短線纜、在工作台而非在運行中的交換機上讀取
寫入「成功」,但回讀為舊值寫入過快、忽略 t_WR、跨越了頁面寫入邊界採用單位元組或小塊寫入並等待;使用 ACK 輪詢
總線掛起,SCL 或 SDA 被拉低卡死事務被中斷輸出 9 個 SCL 脈衝,然後發出 STOP;對模組重新上電
在交換機中正常,在編程器上無響應模組需要釋放 LPMode 或某個選擇引腳遵守 ModSelL/LPMode 要求;預留 t_init 時間

這些問題在工作台一側的診斷方法彙總於 EEPROM 讀寫錯誤;建立在總線之上的保護機制(密碼、硬件寫保護、保存命令)見 寫保護類型

在運行中的系統裏讀取

主機每隔幾秒輪詢一次 DDM 並對旗標做出反應;同一總線上的第二個主設備(編程器夾具、帶內工具)會造成衝突、錯誤地址的寫入,最壞情況下還會因為頁面寫入落在錯誤偏移量上而使模組變磚。如果必須在原位讀取也可以;但寫入請在工作台上進行。

在 CodingBox 中

CodingBox 會按封裝形式自動處理地址模型(SFP 用 A0h/A2h,QSFP 和 XFP 用分頁, CMIS 用記憶庫加頁面),允許你按編程器配置文件設定總線速率和寫入時序,並通過回讀來驗證每次寫入(編程模組)。


如果您發現本文有不準確之處或錯誤,請選取相應片段並按 Ctrl+Enter,即可