ZHCSRX7 june 2023 BQ79616
PRODUCTION DATA
堆栈读取:
在使用该命令之前,必须配置器件地址、COMM_CTRL[STACK_DEV] 位和 [TOP_STACK] 位。堆栈读取命令会根据堆栈中器件的数量(即 COMM_CTRL[STACK_DEV] = 1 的器件)生成一定数量的响应帧,其长度取决于请求读取的寄存器字节数。堆栈读取命令帧必须包含起始寄存器地址(地址字段)和要返回的字节数(要读取的寄存器数)。读取命令的初始化字节中的 DATA_SIZE 字段始终为 0b000。
命令帧传输到菊花链中的所有器件,但只有 COMM_CTRL[STACK_DEV] = 1 的器件才会响应。在响应期间,COMM_CTRL[TOP_STACK] = 1 的器件会首先返回响应帧。堆栈中的每个器件(地址 N)都会等待,直到上面的器件(地址 N+1)响应后再附加其响应帧。在接收响应时验证 CRC。如果来自地址 N+1 的响应帧中出现 CRC 错误,则器件 N 不会附加其消息并生成无效 CRC 故障。
使用图 8-29,其中包含从 S1 至 S3 读取 16 个电芯电压的示例。对该命令的响应是 3 个独立的响应帧(每个器件一个响应帧),每个帧的总长度为 38 个字节(32 个数据字节 + 6 个协议字节)。尽管堆栈读取命令不包含器件地址字段,但每个响应帧会包含相应的器件地址字段,将数据与特定器件相关联。主机将首先接收来自 S3 的响应帧 (ToS),然后接收来自 S2 的响应帧,最后接收来自 S1 的响应帧。
堆栈写入:
在使用该命令之前,必须配置 COMM_CTRL[STACK_DEV]。利用堆栈写入命令,主机能够通过一条命令更新堆栈器件(即 COMM_CTRL[STACK_DEV] = 1 的器件)的多达 8 个连续寄存器。命令帧必须包含起始寄存器地址(地址字段)和写入寄存器的数据字节。初始化帧中的 DATA_SIZE 字段是要更新的寄存器的数量。
命令帧传输到菊花链中的所有器件,但只有 COMM_CTRL[STACK_DEV] = 1 的器件才会执行命令。
主机发送的堆栈读取命令 | 主机发送的堆栈写入命令 | ||||
---|---|---|---|---|---|
示例 | 从 S1 至 S3 读取 16 个电芯电压 | 将 OTP 解锁代码写入 S1、S2 和 S3 的 OTP_PROG_UNLOCK1A 至 1D 寄存器 | |||
帧字段 | 数据 | 说明 | 数据 | 说明 | |
初始化字节 | 0xA0 | 始终为 0xA0 FRAME_TYPE = 1 REQ_TYPE = 0b010 = 堆栈读取 DATA_SIZE = 0b000 | 0xB3 | 0xB0 用于 1 字节数据读取,0xB1 用于 2 字节数据读取,0xB2 用于 3 字节数据读取,依此类推。 本示例中将 FRAME_TYPE = 1 REQ_TYPE = 0b011 = 堆栈写入 | |
DATA_SIZE = 0b011 = 4 字节 | |||||
器件地址 | 不适用 | 无需在命令帧中添加器件地址字节 | 不适用 | 无需在命令帧中添加器件地址字节 | |
寄存器地址 | 0x0568 | 要读取的寄存器块的起始地址(本例中为 VCELL16_HI 的地址) | 0x0300 | 要写入的寄存器块的起始地址(本例中为 OTP_PROG_UNLOCK1A 的地址) | |
数据 | 0x1F | 指示每个器件返回 32 个字节的数据(即从地址 0x0568 到 0x0587)(假设每个 VCELLn_HI = 0x80、VCELLn_LO = 0x00,其中 n = 1 至 16)。 | 0x02B7 78BC | 写入 OTP_PROG_UNLOCK1A 至 OTP_PROG_UNLOCK1D 的解锁值 | |
CRC | 0x5C2D | 0x0BD7 |