控制器與固件:DDM、APC、記憶體與保護功能
每個可管理光模組內部都有一台小型電腦。微控制器(MCU)負責測量、調節、上報—— 而從編程器的角度看,最重要的是——它本身就是你所讀寫的那片記憶體。模組用的是普通 EEPROM,還是一個冒充 EEPROM 的 MCU,決定了它能如何被編碼、為甚麼有些寫入會在斷電重啟後消失,以及密碼存在的意義。本頁介紹控制器做了甚麼,以及它的設計如何在台架上體現出來。
MCU 做甚麼
| 任務 | 細節 | 表現為 |
|---|---|---|
| 測量 | 通過 10–12 位 ADC 每秒多次採樣溫度(熱敏電阻或片上傳感器)、Vcc、激光器偏置電流、監測 PD 電流(Tx)和接收光電流(Rx);應用出廠校準 | DDM 數值——參數 |
| APC——自動功率控制 | 將監測 PD 電流與出廠目標值比較,調整驅動器的偏置 DAC | Tx 功率恆定,偏置電流上升——Tx 偏置電流與老化 |
| 溫度補償 | 查找表根據溫度調整調制電流,在 PAM4 模組上還調整 DSP 設定 | 消光比保持穩定 |
| TEC 控制 | 製冷模組上用 PID 迴路保持激光器溫度;DWDM 上有波長鎖定器反饋 | 激光器溫度、TEC 電流監測值 |
| 閾值與旗標位 | 將每個監測值與警報/警告閾值比較,設定鎖存旗標位,驅動 IntL | 閾值與警報 |
| 低速引腳 | 讀取 TX_DISABLE、RS0/RS1、LPMode、ResetL;驅動 TX_FAULT、RX_LOS(或對硬件信號進行門控) | 引腳行為 |
| 雙線從機 | 在 A0h/A2h(SFP)或帶頁/記憶體組的 A0h(QSFP、CMIS)上應答 | 記憶體映射——雙線介面 |
| 狀態機 | CMIS 模組狀態和數據通路狀態;應用選擇;靜默控制 | CMIS |
| 保護與廠商功能 | 密碼、寫保護區域、保存命令、廠商解鎖、鑑權簽名 | 寫保護類型 |
| CDB / 固件更新 | 在 CMIS 模組上接收並燒寫新的固件鏡像 | 固件版本位元組 |
典型器件:低成本 SFP/SFP+ 中使用帶幾 kB flash 的 8 位 MCU(8051 類);100G+ 和 CMIS 模組中使用 32 位 Cortex-M 類晶片;部分廠商使用集成了 ADC、DAC 和雙線從機的專用光模組控制器 ASIC。
兩種記憶體實現方式
| 設計 | 映射如何儲存 | 對編程的影響 |
|---|---|---|
| 分立 EEPROM(如 AT24C02 類)用於 A0h,MCU 用於 A2h | A0h 的身份資訊是一片真正的串行 EEPROM,主機和編程器直接與之通訊;MCU 只負責診斷 | A0h 的寫入就是普通的 EEPROM 寫入——需遵守 t_WR 和頁大小;硬件 WP 引腳可能會阻止寫入(寫保護類型 1–3) |
| MCU 仿真映射 | MCU 用 RAM 中的內容應答每一次雙線請求,並將改動鏡像到內部 flash/EEPROM——也可能不鏡像 | 寫入的結果由固件決定:接受、忽略、需要密碼才能寫入、僅在保存命令後才儲存,或在下次啟動時被固件自己保存的副本覆蓋(類型 4–5) |
| 混合型 | 廠商區用 EEPROM,分頁和密碼用 MCU | 不同位元組範圍規則不同 |
仿真映射能解釋台架上大多數令人費解的現象:固件未實現的頁返回 FFh、寫入看似「成功」卻又還原、某個範圍內位元組只讀而下一個範圍又可寫、MCU 忙於採樣時出現時鐘延展(EEPROM 讀寫錯誤)。
啟動與 t_init 窗口
上電後,MCU 先從非易失性記憶體中載入校準數據和身份資訊,啟動 ADC,運行 APC 直到達到目標值,然後才使能雙線從機並清除 data-not-ready 旗標。這就是規範允許的、主機在期待應答之前需要等待的 300 ms(SFP)到 2 s(QSFP/CMIS)時間窗口,也是插入模組後立即讀取會得到亂碼的原因(主機的初始化流程)。
校準數據存放於此
如果沒有工廠在測試台上測得的常數,原始 ADC 計數毫無意義:監測 PD 電流相對實際發射功率的關係、接收光電流相對模組工作波長下輸入功率的關係、熱敏電阻曲線、偏置 DAC 量程。在內部校準的模組上,固件會應用這些常數並上報物理單位;在外部校準的模組上,這些常數被寫入 A2h 56–91,由主機自行應用(校準)。有些固件把這些常數保存在廠商區,覆寫該區域會導致 DDM 數值荒謬,或使 APC 迴路失效——這是粗心寫入把模組「變磚」的典型方式(製造與測試)。
保護機制的實現方式
| 機制 | 實現方式 | 台架表現 |
|---|---|---|
| 密碼 | 固件將寫入密碼區(SFP A2h 123–126、QSFP 123–126、CMIS 122–125)的 4 個位元組與儲存值比較;解鎖本次會話的寫入權限 | 在輸入正確的值之前一直是 WRITE FAIL——Passwords |
| 寫保護區域 | 固件忽略對其視為只讀的範圍的寫入(校驗和、閾值、校準數據、廠商區) | 讀回的位元組不變,且不報錯 |
| 分立 EEPROM 上的硬件 WP 引腳 | 該引腳在模組內部被拉高,或由 MCU 驅動 | 需要編程器板卡去驅動它 |
| 保存命令 | 寫入先落在 RAM 中;需要廠商特定的序列才能提交到 flash | 除非發送該序列,否則斷電重啟後會還原 |
| 固件鏡像 | 啟動時固件會用自己的鏡像重寫整個映射 | 每次斷電重啟改動都會消失——只有廠商工具才能修改鏡像本身 |
| 鑑權 | 固件將簽名(序號、廠商數據和密鑰的雜湊值)寫入廠商位元組;由主機驗證 | 身份資訊的修改能通過校驗和,主機卻依然拒絕——廠商鎖定 |
如何識別和編程每一種類型: 寫保護類型、 EEPROM 重新編碼。
固件更新
CMIS 模組可以通過 CDB 命令(開始下載、寫入數據塊、完成、運行、提交)在雙線總線上接收固件,通常配有兩個鏡像記憶體區,這樣更新失敗時可以回退。SFF-8472/8636 模組沒有標準機制;廠商通過廠商位元組使用私有序列。固件修復是廠商解決 CMIS 互操作性問題的常用手段(CMIS 問題),固件版本位元組(CMIS lower page 39–40、page 01h 128–129)值得與身份資訊一併記錄。
控制器的故障模式
| 症狀 | 可能原因 |
|---|---|
| 模組在總線上不可見,光學部分正常 | MCU 未啟動:固件損壞、欠壓、晶振損壞 |
| DDM 數值凍結或荒謬 | ADC 或校準數據損壞;固件掛起 |
| Tx 功率漂移,儘管 APC 本應保持恆定 | 監測 PD 或 ADC 故障,APC 被禁用 |
| 隨機 NACK,讀取緩慢 | MCU 負載過高(正在採樣),快速編程器的操作超出了時鐘延展限制 |
| 能正常工作,但每次寫入都會還原 | 設計上就是固件鏡像——並非故障 |
| 寫入後模組失效 | 固件配置區或校準數據區被覆寫 |
在 CodingBox 中
CodingBox 按固件呈現的樣子來處理模組:識別映射類型,為需要保存命令或採用鏡像設計的模組套用已知密碼和編程腳本,重新計算校驗和,在每次寫入前保留備份,一旦控制器反應異常,就可以從 code database 中恢復。 EEPROM editor 會標出規範定義為只讀或廠商專用的範圍,讓你清楚何時是在寫入固件的私有區域。