寫保護類型與編程
封裝形式告訴你模組欄位存放在哪裏。另一個獨立的維度決定能否修改它們:模組如何保護自身記憶體區不被寫入。廠商採用五種方式,每種都需要不同的編程方法。先識別出保護類型,能省下數小時的失敗寫入嘗試。
五種保護類型
| # | 類型 | 如何識別 | 如何編程 |
|---|---|---|---|
| 1 | 無保護 | 立即接受寫入 | 直接寫入——但需使用較慢的時鐘 |
| 2 | 硬件寫保護引腳 | 無論怎樣嘗試都是只讀;密碼也無濟於事 | 寫入過程中控制 WP 線 |
| 3 | 密碼保護(固件控制器) | 未輸入密碼前返回 WRITE FAIL | 先在 0x7B 處輸入密碼 |
| 4 | 臨時儲存 + 保存命令 | 寫入「成功」,但斷電重啟後恢復原狀 | 發送廠商的保存序列 |
| 5 | 組合保護 | 需要廠商專有的 I/O 序列才能解鎖 | 廠商編程算法(腳本) |
1. 無保護
EEPROM 沒有寫入限制。實際的難點在於時序:可靠的編程通常需要將雙線時鐘降到約 1 kHz——大約是正常讀取速度的十分之一。以標準速度寫入會間歇性失敗,留下部分寫入的頁面。一個相關的跡象是:在一些簡單模組上,只有 A0h 能正常讀取,而 A2h 會返回錯誤。
2. 硬件寫保護引腳
EEPROM 的 WP 引腳通過電阻接到電源,因此晶片上電後處於鎖定狀態。解鎖的方法是在寫入過程中通過低阻抗路徑將 WP 線拉向地——這只有能夠控制該引腳的編程器板才能做到。僅靠軟件無法繞過這種類型:無論怎樣斷電重啟或嘗試密碼,模組都始終保持只讀。
3. 密碼保護(固件控制器)
根據 SFF-8472,A2h 區塊從偏移量 0x7B 開始保留了一個 7 位元組的密碼區;大多數模組使用 4 位元組密碼。模組內的控制器會將寫入該區域的內容與其儲存的值進行比對,只有匹配才會解鎖 EEPROM 寫入。沒有正確密碼時,每次寫入都會返回 WRITE FAIL。
- 輸入正確的密碼,然後寫入。
- 若密碼未知:對已知廠商密碼進行字典搜尋(常見值見 EEPROM 重新編碼),或聯繫廠商。
- 這些控制器對時鐘速度和數據塊之間的間隔很敏感——這也是需要緩慢編程的另一個原因。
4. 帶保存命令的臨時儲存
寫入的數據落入易失性記憶體。一切看起來都正常——直到模組斷電重啟,舊代碼又恢復了。廠商的固件需要一條明確的保存命令(專有位元組序列)才能將臨時鏡像提交到永久記憶體區。沒有任何標準定義這一過程;每個廠商的序列都不同,需要作為腳本記錄下來。
5. 組合保護
最新的模組會疊加多種機制:硬件 WP 加上密碼加上保存命令加上操作前提條件—— 例如模組必須先進入低功耗模式才接受寫入。這在採用較新 SFF-8472 版本、在 A2h 偏移量 0x80 以上暴露256 個以上頁面的模組,以及 CMIS 模組上很常見。編程需要廠商提供的算法,通常只提供給大宗採購客戶。
如何識別保護類型
- 先嘗試直接讀取:A2h 能否正常讀取?(類型 1 常在此處失敗。)
- 嘗試對一個無保護欄位進行單位元組寫入。立即成功 → 類型 1。返回
WRITE FAIL→ 類型 3 (或 5)。寫入看似成功但斷電重啟後恢復 → 類型 4。 - 嘗試已知密碼。仍為只讀 → 類型 2(硬件)或類型 5(組合)。
- 檢查封裝形式和規範版本——CMIS 和較新版本的 SFF-8472 模組通常屬於類型 5。
CodingBox 中的支援
- 密碼設定——表地址、密碼地址(0x7B)和密碼值在 受保護記憶體與密碼中設定;已知密碼會從資料庫中自動套用。
- 腳本——CodingBox 的編程腳本包含廠商保存序列以及類型 4 和 5 的解鎖算法。
- 針對標準速度下寫入失敗的模組,提供逐位元組寫入和慢速時鐘。
- 硬件 WP 由編程器板處理,而非軟件。
- 寫入前,每次讀取的內容都會保存到代碼資料庫,因此失敗的嘗試始終可以恢復。
台架上的常見症狀——
WRITE FAIL、寫入後恢復原狀、密碼被拒——以及各自的處理方法: EEPROM 讀寫錯誤。
這些類型為何存在——獨立 EEPROM 與 MCU 模擬記憶體映射的區別、保存命令、固件鏡像與簽名的具體實現:控制器與固件。