前言:
恩智浦在30多年前發明了I2C匯流排,透過簡單但功能強大的串列結構取代了複雜的平行介面,徹底改變了晶片與晶片之間的通訊。
它採用簡單的雙線格式,每次傳送一位數據,執行晶片間的尋址、選擇、控制和數據傳輸,速度可達100MHz(標準模式)、400KHz(快速模式)。
1MHz(快速模式+)、3.4MHz(高速模式)或5MHz(超快速模式)等應用。


在 I2C 總線的應用衍生中,應用於 DDR 記憶體模組的溫度感知內建 SPD 功能 IC SE97B 的確是一種非常特別的應用。
因為其特性為複合IC,除了需要隨時監測DDR記憶體模組的溫度狀況外,還內建了256字節的EEPROM供客戶存放該DDR記憶體模組的廠商資訊。
所以 SE97B 這顆 IC 在 I2C 接口共提供了三種地址:

溫度感測器
b. EEPROM
c. EEProm 軟體保護指令
最近有個客戶發現 SE97B EEPROM 無法寫入的問題,希望我們協助分析。後來在解決客戶疑問後,覺得這個問題挺有趣的,所以在這裡分享給大家分析一下。
客戶表示這顆有問題的 SE97B 大約在生產線上反覆讀寫 EEProm 約 600 次後,就發現 EEProm 的某些地址無法再次寫入。
但是規格書中載明 EEPROM 可循環寫入清除共 10 萬次。

拿到該 IC 後,使用工具進行了一些 EEPROM 的寫入和讀取測試。
| 時間 | 模組 | 讀/寫 | 主/從 | 功能 | 比特率 | 地址 | 長度 | 資料 |
| 06:20.1 | I2C | I2C比特率設定為:400 | ||||||
| 06:20.1 | SPI | SPI比特率設定為:4000 | ||||||
| 06:24.2 | I2C | I2C上拉電阻已禁用 | ||||||
| 07:39.7 | I2C | RegW | M | --- | 400 | 0x50 | 1 | 1 |
| 07:39.7 | I2C | RegR | M | --- | 400 | 0x50 | 1 | 0 |
| 07:47.6 | I2C | W | M | --- | 400 | 0x50 | 2 | 01 FF |
| 07:49.3 | I2C | RegW | M | --- | 400 | 0x50 | 1 | 1 |
| 07:49.3 | I2C | RegR | M | --- | 400 | 0x50 | 1 | 0 |
| 08:06.9 | I2C | RegW | M | --- | 400 | 0x50 | 1 | 55 |
| 08:06.9 | I2C | RegR | M | --- | 400 | 0x50 | 1 | 6E |
| 08:09.0 | I2C | W | M | --- | 400 | 0x50 | 2 | 55 FF |
| 08:11.4 | I2C | RegW | M | --- | 400 | 0x50 | 1 | 55 |
| 08:11.4 | I2C | RegR | M | --- | 400 | 0x50 | 1 | 6E |
| 08:28.2 | I2C | RegW | M | --- | 400 | 0x50 | 1 | FF |
| 08:28.2 | I2C | RegR | M | --- | 400 | 0x50 | 1 | FF |
| 08:34.8 | I2C | W | M | --- | 400 | 0x50 | 2 | FF 00 |
| 08:36.4 | I2C | RegW | M | --- | 400 | 0x50 | 1 | FF |
| 08:36.4 | I2C | RegR | M | --- | 400 | 0x50 | 1 | 0 |
| 09:01.4 | I2C | RegW | M | --- | 400 | 0x50 | 1 | 鐵 |
| 09:01.4 | I2C | RegR | M | --- | 400 | 0x50 | 1 | FF |
| 09:04.6 | I2C | W | M | --- | 400 | 0x50 | 2 | FE 00 |
| 09:06.3 | I2C | RegW | M | --- | 400 | 0x50 | 1 | 鐵 |
| 09:06.3 | I2C | RegR | M | --- | 400 | 0x50 | 1 | 0 |
| 09:12.6 | I2C | W | M | --- | 400 | 0x50 | 2 | FE 55 |
| 09:13.8 | I2C | RegW | M | --- | 400 | 0x50 | 1 | 鐵 |
| 09:13.8 | I2C | RegR | M | --- | 400 | 0x50 | 1 | 55 |
| 09:47.2 | I2C | RegW | M | --- | 400 | 0x50 | 1 | 80 |
| 09:47.2 | I2C | RegR | M | --- | 400 | 0x50 | 1 | FF |
| 09:50.6 | I2C | W | M | --- | 400 | 0x50 | 2 | 80 55 |
| 09:52.6 | I2C | RegW | M | --- | 400 | 0x50 | 1 | 80 |
| 09:52.6 | I2C | RegR | M | --- | 400 | 0x50 | 1 | 55 |
| 10:10.4 | I2C | RegW | M | --- | 400 | 0x50 | 1 | 7樓 |
| 10:10.4 | I2C | RegR | M | --- | 400 | 0x50 | 1 | FF |
| 10:15.4 | I2C | W | M | --- | 400 | 0x50 | 2 | 7F 55 |
| 10:17.0 | I2C | RegW | M | --- | 400 | 0x50 | 1 | 7F |
| 10:17.0 | I2C | RegR | M | --- | 400 | 0x50 | 1 | FF |
解析內容:
- 對 01h 先讀取,值為 0,然後對 01h 寫入 FF,讀回為 0,證明 01h 無法寫入。
- 對 55h 先讀取,值為 6F,然後對 55h 寫入 FF,讀回為 6F,證明 55h 無法寫入。
- 對 FFh 先讀取,值為 FF,然後對 FFh 寫入 00,讀回為 0,此時發現 FFh 可正常寫入。
- 後續又對 FEh 及 80h 也是先讀後寫,這兩個位置也都可以寫入。
- 最後先讀取 7Fh,值為 FF,此時對 7Fh 寫入 55,讀回值仍為 FF,證明 7Fh 無法寫入。
由以上得知此顆 SE97B 0h~7Fh 無法寫入,而從 80h ~ FFh 仍可正常讀寫。
從規格書上的說明得知,前128字節可以由軟體保護,符合客戶這顆IC的驗證狀態。

由規格書得知保護方式有三種:PWP(永久寫入保護)、RWP(可逆寫保護)、CRWP(清除可逆寫入保護)
但由於除了 PWP 以外,RWP 和 CRWP 都需要 A0 Pin 接 7~10V 電壓配合,這較不符合客戶硬體環境可能發生的狀態。
所以就朝著 PWP 方向再進行澄清。

從規格書中確認在軟體保護狀態下,PWP下30h SE97B不會回應。

經過驗證,這顆 SE97B 果然沒有回應 ACK。
最後向客戶解釋,由於 PWP 是不可逆的,
客戶只能在軟體上避免符合以下格式 30h -> XXh -> XXh 這樣連續 3 種 Byte 的寫法,以避免 IC 被寫入 PWP 永久寫入保護。

另外,SPD 在 DDR 記憶體模組中本來就是用於廠商資訊記錄用途,在完成資料寫入後進行 PWP 也是正常程序,以避免以後資料被改寫。
或許執行 PWP 才是這顆 IC 在正常應用中應該執行的程式。
評論