Other TMs
完整的直接命令列表可在器件专用技术参考手册中找到。以下示例示出了直接命令的格式。
表 1-1 展示了使用命令 0x66 的 警报启用 命令。默认情况下,将用于警报启用的寄存器设置为 0xF800。在本示例中,设置更改为 0xF082。数据采用小端格式。BQ769x2 的器件地址是 0x10(8 位),其中 LSB 是 R/W 位。直接命令遵循 I2C_Write(I2C_ADDR, Command, DataBlock) 格式,因此对于该示例,该命令为 I2C_Write(0x10, 0x66, [0x82, 0xF0])。
命令 | 名称 | 单位 | 类型 | 说明 |
---|---|---|---|---|
0x66 | 警报启用 | 十六进制 | H2 | 警报状态掩码()。可以在操作期间写入更改,以更改启用的警报源。 |
表 1-2 示出了如何读取 Cell 1 的电压。Cell 1 电压命令为 0x14,是一个只读命令。写入 I2C 命令 0x14 ,然后读取 2 字节,从而读取 Cell 1 的电压。数据以小端格式返回。在以下示例中,读取16 位 Cell 1 电压为0x0E74,对应于 3700mV。
命令 | 名称 | 单位 | 类型 | 说明 |
---|---|---|---|---|
0x14 | Cell 1 电压 | mV | I2 | 电池 1 上的 16 位电压 |
表 1-3 示出了如何读取内部温度传感器。16 位温度传感器的读数单位为 0.1K。在以下示例中,0x0BA6 的读数表示十进制值 2982,即 298.2K,转换后约为 25°C。
命令 | 名称 | 单位 | 类型 | 说明 |
---|---|---|---|---|
0x68 | 内部温度 | 0.1K | I2 | 这是最近测量的内部芯片温度。 |
表 1-4 示出了如何从 CC2 读取 16 位电流测量值。以下示例中的电流读数为 7mA。
命令 | 名称 | 单位 | 类型 | 说明 |
---|---|---|---|---|
0x3A | CC2电流 | userA | I2 | 16 位 CC2 电流 |
BQStudio 软件中的“命令序列”模块允许您试用命令,该工具还可用于创建和保存命令序列。此示例中的 事务日志示出了目前为止所涵盖的所有命令。
BQStudio 在控制面板有一个 自动刷新选项,该选项定期读取器件的寄存器来刷新显示的测量值。当使用 命令序列模块时,建议单击绿色横条来禁用 自动刷新功能。该横条将变为红色,表示已禁用 自动刷新功能(参见图 1-6)。
子命令使用与直接命令不同的格式,并且使用 7 位命令地址空间进行间接访问。子命令还支持块传输。要发出子命令,将命令地址写入 0x3E/0x3F。如果要读回数据,数据将被填充到32 字节传输缓冲区中,该缓冲区使用地址 0x40 - 0x5F 。下文列举了多个示例。
器件获取数据所需的时间取决于特定的子命令和器件内正在进行的任何其他处理,因此在运行期间会有所不同。技术参考手册中介绍了每个子命令的大致时间。从子命令读取数据时,有两种方法可以解决此计时问题:
某些子命令将数据写入寄存器,然后必须写入带有校验和及长度的 0x60/0x61。这仅适用于 FET_Control()、REG12_Control()、CB_Active_Cells() 和 CB_SET_LVL() 子命令。下一节将提供计算校验和及长度的示例,因为这在写入 RAM 寄存器时也是必需的。
可以通过将子命令编号 0x0001(小端格式)写入命令地址 0x3E中来读取器件型号。然后,从地址 0x40 的数据缓冲区中读取数据。在该示例中,返回的器件型号为 0x7694(代表 BQ76942)。
命令 | 名称 | 数据 | 单位 | 类型 | 说明 |
---|---|---|---|---|---|
0x0001 | DEVICE_NUMBER | 器件型号 | 十六进制 | U2 | 报告用于识别产品的器件型号。数据以小端格式返回 |
生产状态 子命令从 生产状态寄存器中读取两个字节。首先,将 0x0057 命令写入 0x3E,然后从 0x40 读取两个字节。
命令 | 名称 | 数据 | 单位 | 类型 | 说明 |
---|---|---|---|---|---|
0x0057 | 生产状态 | 生产状态 | 十六进制 | H2 | 提供在生产期间使用的标志。 |
有些子命令不需要从数据缓冲区读取数据,因为它们只提供指令。FET_ENABLE 子命令就是一个示例。该命令是通过将 0x0022 写入 0x3E 来发出的。
命令 | 名称 | 说明 |
---|---|---|
0x0022 | FET_ENABLE | 在 生产状态中切换 FET_EN。FET_EN = 0 表示 FET 测试模式。FET_EN = 1 表示固件 FET 控制。 |
重置子命令对器件进行重置,并将 RAM 寄存器恢复为默认(或 OTP 编程)值。该命令是通过将 0x0012 写入 0x3E 来发出的。
命令 | 名称 | 说明 |
---|---|---|
0x0012 | 重置 | 重置器件。 |
该示例中的事务日志显示了用于执行子命令所涵盖的所有命令。
RAM 中寄存器的完整视图可以在器件专用技术参考手册中找到,也可以在 BQStudio 的数据内存屏幕中找到。要在 BQStudio 中查看 RAM 寄存器地址,进入“Window”->“Preferences”菜单,然后选择“Show Advanced Views”。将寄存器地址写入 0x3E,然后从 0x40 的数据缓冲区开始读取,以完成RAM寄存器的读取向 RAM 寄存器写入时,首先将寄存器地址写入 0x3E,然后写入数据,再将校验和长度写入 0x60/0x61中。校验和及长度计算在器件专用数据表中有更多描述,但在以下示例中略做说明。
BQ769x2 器件的默认设置启用了 COV(过压)和 SCD(短路)保护功能。下面通过读取启用保护功能寄存器来验证这一点,其中, RAM 地址 0x9261 返回的值为 0x88。
类别 | 子类别 | 名称 | 类型 | 最小值 | 最大值 | 默认值 | 单位 |
---|---|---|---|---|---|---|---|
设置 | 保护 | 启用保护功能A | U1 | 0x00 | 0xFF | 0x88 | 十六进制 |
在写入 RAM 寄存器之前,建议进入 CONFIG_UPDATE 模式,以防止所有更改完成之前设置生效。SET_CFGUPDATE 遵循子命令格式。
命令 | 名称 | 说明 |
---|---|---|
0x0090 | SET_CFGUPDATE | 进入 CONFIG_UPDATE 模式。 |
0x0092 | EXIT_CFGUPDATE | 退出 CONFIG_UPDATE 模式。这也会清除 电池状态()[POR] 和 电池状态()[WD] 位。 |
在本例中,启用默认保护功能时,一并启用CUV(欠压)保护特性。这需要将 0x8C 写入 RAM 地址 0x9261。校验和是根据地址和数据(0x61、0x92、0x8C)计算的,并且是这些字节总和的补充。长度还包括器件地址和命令地址这两个字节,总长度为 5。
接下来,向 VCell 模式寄存器写入,以便为器件 BQ76942 配置 9 节电池。下述示例将 0x037F 写入 0x9304,然后将新的校验和及长度写入 0x60/0x61。
类别 | 子类别 | 名称 | 类型 | 最小值 | 最大值 | 默认值 | 单位 |
---|---|---|---|---|---|---|---|
设置 | 配置 | VCell模式 | H2 | 0x0000 | 0xFFFF | 0x0000 | 十六进制 |
写入 RAM 寄存器后,退出 CONFIG_UPDATE 模式,此时新设置将生效。
本示例中的 事务日志示出了所有已涵盖的用于读取和写入 RAM 寄存器的命令。
BQ769x2 系列上的 I2C 接口包含一个可选的 CRC 校验。可以在 Settings:Configuration:Comm Type 寄存器中启用 CRC 特性。如果在使用 BQStudio 时更改了该寄存器,则应执行 SWAP_COMM_MODE() 子命令,然后重新启动 BQStudio,以便其能够检测新的通信模式。下述为 CRC 校验启用的 I2C 波形捕获图的两个示例。
I2C启用后,根据所有的字节(包括第一数据字节)来计算第一个数据字节的 CRC。对于第一字节之后的每个数据字节,仅计算该字节的 CRC 字节。在图 4-1,使用 FET_ENABLE 子命令为 [0x10 0x3E 0x22] 计算第一个字节的 CRC - CRC计算结果为 0x63。第二字节 [0x00] 的 CRC 为 0x00。
在图 4-2,使用 VCell 1 命令为 [0x10 0x14 0x11 0x68] 计算第一字节的 CRC - CRC计算结果为 0x33。第二字节 [0x0B] 的 CRC 为 0x31。