ZHCU948B September 2020 – May 2022 BQ76952
BQ76952 器件支持直接命令和子命令。使用 7 位命令地址访问直接命令,该地址从主机通过器件串行通信接口发送,并触发操作,或提供待写入器件的数据值,或指示器件向主机报告数据。子命令是使用 7 位命令地址空间间接访问的附加命令,并提供了块数据传输功能。启动一条子命令时,首先将 16 位子命令地址写入 7 位命令地址 0x3E(低位字节)和 0x3F(高位字节)。该器件最初假设可能需要读回数据,并将现有数据自动填充到 32 字节的传输缓冲区(使用 7 位命令地址 0x40–0x5F)中,并将该数据的校验和写入地址 0x60。如果主机打算向器件写入数据,主机会将新数据覆盖到传输缓冲区,将数据的校验和写入地址 0x60,并将数据长度写入地址 0x61。一旦写入地址 0x61 ,该器件会检查写入 0x60 的校验和与写入 0x40-0x5F 的数据,如果正确,则继续将数据从传输缓冲区传输到器件的存储器中。校验和是子命令字节(0x3E 和 0x3F)8 位和加上传输缓冲区中使用的字节数,然后将结果按位反转。只有在写入数据长度之后才能进行验证,以便该器件知道传输缓冲区中包含多少字节。校验和和数据长度必须作为一个字一起写入才能有效。数据长度包含 0x3E 和 0x3F 中的两个字节,0x60 和 0x61 中的两个字节,以及传输缓冲区的长度。因此,如果使用整个 32 字节的传输缓冲区,则数据长度将为 0x24。
一些子命令仅用于启动操作,而不涉及发送或接收数据。在这些情况下,主机可以简单地将子命令写入 0x3E 和 0x3F,不需要写入长度和校验和或任何其他数据。
命令和子命令 中描述了该器件支持的命令。单字节命令是直接命令,而两字节命令是子命令。数据格式 中描述了数据格式。
从子命令中读取数据的最有效方法(最大程度地减小总线流量)如下所示:
一种更简单、但总线流量效率较低的方法是:
注意:0x61 提供缓冲区数据的长度加 4(即缓冲区数据的长度加 0x3E 和 0x3F 的长度加 0x60 和 0x61 的长度)。
校验和是通过 0x3E、0x3F 以及缓冲区数据计算得出的,它不包括 0x60 和 0x61 中的校验和或长度。
如果同时读取校验和和长度,那么在某些情况下会触发自动递增,在这种情况下,缓冲区将填充另一个块的数据。因此,一般来说,除非已读取缓冲区或希望实现自动递增,否则不应同时读取校验和和长度。
表示为 RSVD_0 的命令或子命令位只能写为“0”,而表示为 RSVD_1 的位只能写为“1”。