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; |