ZHCUAN8A April 2016 – November 2022 BQ27220
以下示例展示了修改 RAM 中的數(shù)據(jù)存儲(chǔ)器參數(shù)所需的命令序列。在該示例中,默認(rèn) Design Capacity 從 3000mAh 更新為 1200mAh。所有器件寫(xiě)入 (wr) 和讀取 (rd) 均分別指 I2C 8 位地址 0xAA 和 0XAB。地址 0x3E 用于對(duì) RAM 進(jìn)行更改,因?yàn)闊o(wú)法對(duì)給定參數(shù)的直接地址進(jìn)行這些更改。這可以確保 RAM 不會(huì)因不正確的寫(xiě)入而損壞。
| 步進(jìn) | 說(shuō)明 | 偽代碼 |
|---|---|---|
| 1 | 如果器件之前處于 SEALED 模式,則通過(guò)向 Control()(0x00 和 0x01)發(fā)送相應(yīng)的密鑰使其處于 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 模式啟動(dòng),但不處于 FULL ACCESS 模式。進(jìn)入 FULL ACCESS 模式以訪(fǎng)問(wèn)數(shù)據(jù)存儲(chǔ)器。 | //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 | 發(fā)送 ENTER_CGF_UPDATE 命令 (0x0090)。 | wr 0x00 0x90 0x00; |
| 4 | 通過(guò)輪詢(xún) OperationStatus() 寄存器直到位 2 被設(shè)置來(lái)確認(rèn) CFGUPDATE 模式??赡茏疃嘈枰?1 秒。 | rd 0x3B OperationStatus(); |
| 5 | 將 0x9F 寫(xiě)入 0x3E 以訪(fǎng)問(wèn) Design Capacity 的 MSB。 | wr 0x3E 0X9F; |
| 6 | 將 0x92 寫(xiě)入 0x3F 以訪(fǎng)問(wèn) Design Capacity 的 LSB。 | wr 0x3F 0X92; |
| 7 | 使用 MACDataSum() 命令 (0x60) 讀取 1 字節(jié)校驗(yàn)和。 | rd 0x60 Old_Chksum; |
| 8 | 使用 MACDataLen() 命令 (0x61) 讀取 1 字節(jié)塊長(zhǎng)度。 | rd 0x61 Data_len; |
| 9 | 從 0x40 開(kāi)始讀取兩個(gè) Design Capacity 字節(jié)。 | rd 0x40 Old_DC_MSB; rd 0x41 Old_DC_LSB; |
| 10 | 從 0x40 開(kāi)始讀取寫(xiě)入兩個(gè) Design Capacity 字節(jié)。在該示例中,新值為 1200mAh。(以十六進(jìn)制表示為 0x04B0) | wr 0x40 0x04; wr 0X41 0XB0; |
| 11 | 計(jì)算新校驗(yàn)和。校驗(yàn)和為 (255 – x),其中 x 是逐字節(jié)的 BlockData() 8 位總和(0x40 至 0x5F)。計(jì)算新校驗(yàn)和的一種快速方法是使用新舊數(shù)據(jù)總和字節(jié)的數(shù)據(jù)替換方法。請(qǐng)參閱所示方法的代碼。 | Temp = mod(255 – Old_Chksum – OLD_DC_MSB – OLD_DC_LSB, 256); New_Chksum = 255 – mod(temp + 0x04 + 0Xb0, 256); |
| 12 | 寫(xiě)入新校驗(yàn)和。 在該示例中,New_Chksum 為 0XB0。 | wr 0x60 New_Chksum; //Example: wr 0x60 0XB0; |
| 13 | 寫(xiě)入塊長(zhǎng)度。當(dāng)整個(gè)塊的正確校驗(yàn)和以及長(zhǎng)度被寫(xiě)入時(shí),數(shù)據(jù)實(shí)際上被傳輸?shù)?RAM 中。 在該示例中,Data_len 為 0x24。 | wr 0x61 Data_len; //Example: wr 0x61 0X24; |
| 14 | 通過(guò)發(fā)送 EXIT_CFG_UPDATE_REINIT (0x0091) 或 EXIT_CFG_UPDATE (0x0092) 命令退出 CFGUPDATE 模式。 | wr 0x00 0x91 0x00; or wr 0x00 0x92 0x00; |
| 15 | 通過(guò)輪詢(xún) OperationStatus() 寄存器直到位 2 被清除來(lái)確認(rèn) CFGUPDATE 模式??赡茏疃嘈枰?1 秒。 | rd 0x3B OperationStatus(); |
| 16 | 如果器件之前處于 SEALED 狀態(tài),則通過(guò)發(fā)送 Control (0x0030) 子命令來(lái)返回至 SEALED 模式。 | wr 0x00 0x30 0x00; |