ZHCUAN8A April 2016 – November 2022 BQ27220
以下示例展示了修改 RAM 中的數據存儲器參數所需的命令序列。在該示例中,默認 Design Capacity 從 3000mAh 更新為 1200mAh。所有器件寫入 (wr) 和讀取 (rd) 均分別指 I2C 8 位地址 0xAA 和 0XAB。地址 0x3E 用于對 RAM 進行更改,因為無法對給定參數的直接地址進行這些更改。這可以確保 RAM 不會因不正確的寫入而損壞。
| 步進 | 說明 | 偽代碼 |
|---|---|---|
| 1 | 如果器件之前處于 SEALED 模式,則通過向 Control()(0x00 和 0x01)發送相應的密鑰使其處于 UNSEAL 模式。 | //Two-byte incremental method wr 0x00 0x14 0x04; wr 0x00 0x72 0x36; //Alternative single byte method wr 0x00 0x14; wr 0x01 0x04; wr 0x00 0x72; wr 0x01 0x36; |
| 2 | BQ27220 以 UNSEAL 模式啟動,但不處于 FULL ACCESS 模式。進入 FULL ACCESS 模式以訪問數據存儲器。 | //Two-byte incremental method wr 0x00 0xFF 0xFF; wr 0x00 0xFF 0xFF; //Alternative single byte method wr 0x00 0xFF; wr 0x01 0XFF; wr 0x00 0xFF; wr 0x01 0xFF; |
| 3 | 發送 ENTER_CGF_UPDATE 命令 (0x0090)。 | wr 0x00 0x90 0x00; |
| 4 | 通過輪詢 OperationStatus() 寄存器直到位 2 被設置來確認 CFGUPDATE 模式。可能最多需要 1 秒。 | rd 0x3B OperationStatus(); |
| 5 | 將 0x9F 寫入 0x3E 以訪問 Design Capacity 的 MSB。 | wr 0x3E 0X9F; |
| 6 | 將 0x92 寫入 0x3F 以訪問 Design Capacity 的 LSB。 | wr 0x3F 0X92; |
| 7 | 使用 MACDataSum() 命令 (0x60) 讀取 1 字節校驗和。 | rd 0x60 Old_Chksum; |
| 8 | 使用 MACDataLen() 命令 (0x61) 讀取 1 字節塊長度。 | rd 0x61 Data_len; |
| 9 | 從 0x40 開始讀取兩個 Design Capacity 字節。 | rd 0x40 Old_DC_MSB; rd 0x41 Old_DC_LSB; |
| 10 | 從 0x40 開始讀取寫入兩個 Design Capacity 字節。在該示例中,新值為 1200mAh。(以十六進制表示為 0x04B0) | wr 0x40 0x04; wr 0X41 0XB0; |
| 11 | 計算新校驗和。校驗和為 (255 – x),其中 x 是逐字節的 BlockData() 8 位總和(0x40 至 0x5F)。計算新校驗和的一種快速方法是使用新舊數據總和字節的數據替換方法。請參閱所示方法的代碼。 | Temp = mod(255 – Old_Chksum – OLD_DC_MSB – OLD_DC_LSB, 256); New_Chksum = 255 – mod(temp + 0x04 + 0Xb0, 256); |
| 12 | 寫入新校驗和。 在該示例中,New_Chksum 為 0XB0。 | wr 0x60 New_Chksum; //Example: wr 0x60 0XB0; |
| 13 | 寫入塊長度。當整個塊的正確校驗和以及長度被寫入時,數據實際上被傳輸到 RAM 中。 在該示例中,Data_len 為 0x24。 | wr 0x61 Data_len; //Example: wr 0x61 0X24; |
| 14 | 通過發送 EXIT_CFG_UPDATE_REINIT (0x0091) 或 EXIT_CFG_UPDATE (0x0092) 命令退出 CFGUPDATE 模式。 | wr 0x00 0x91 0x00; or wr 0x00 0x92 0x00; |
| 15 | 通過輪詢 OperationStatus() 寄存器直到位 2 被清除來確認 CFGUPDATE 模式。可能最多需要 1 秒。 | rd 0x3B OperationStatus(); |
| 16 | 如果器件之前處于 SEALED 狀態,則通過發送 Control (0x0030) 子命令來返回至 SEALED 模式。 | wr 0x00 0x30 0x00; |