ZHCU948B September 2020 – May 2022 BQ76952
BQ76952 器件中的 I2C 串行通信接口用作响应器件,支持高达 400kHz 的速率和可选的 CRC 检查。如果尚未对 OTP 进行编程,则 BQ76952 将默认在 400kHz I2C 模式初始上电,而其他版本的器件可能具有不同的默认设置(例如,BQ7695201 将默认在带 CRC 模式的 SPI 中初始上电)。可以在生产线上对 OTP 设置进行编程,然后当该器件上电时,根据 OTP 设置自动进入所选模式。在 CONFIG_UPDATE 模式下,主机也可以更改 I2C 速度设置,然后新的速度设置将在退出 CONFIG_UPDATE 模式时生效。或者,主机可以写入 0x29e7 SWAP_TO_I2C() 子命令,以立即将通信接口更改为 I2C 快速模式 (Settings:Configuration:Comm Type = 8),而无需进入 CONFIG_UPDATE 模式。可以发送 0x29BC SWAP_COMM_MODE() 子命令,以将器件转换至 Settings:Configuration:Comm Type 中的设置选择的通信模式。
I2C 器件地址默认设置为 0x10(写入)、0x11(读取),可以通过使用所需的写入地址对 Settings:Configuration:I2C Address 进行编程来更改该地址。
通信接口包含可选的超时功能,可以根据 Comm Type 设置启用该功能。仅当总线将以 100kHz 或 400kHz 的频率运行时,才应使用具有超时功能的 Comm Type 设置。当 Comm Type= 0x1E(启用超时的 100kHz 模式)时,如果检测到时钟为低电平超过 tTIMEOUT(25ms 至 35ms),或者累积的时钟低电平响应器延长时间超过约 25ms,或者如果累积的时钟低电平控制器延长时间超过 10ms,则器件将重置通信接口逻辑。当 Comm Type = 0x09(启用超时的 400kHz 模式)时,如果检测到时钟为低电平超过 tTIMEOUT(5ms 至 20ms),则器件将重置通信接口逻辑。如果检测到 SCL 引脚为低电平超过 2 秒,则总线还包括一个长期超时,无论 Comm Type 设置是否包含超时都是如此。
I2C 写入事务如 图 10-1 所示。通过在停止之前发送额外的数据字节来允许进行块写入。I2C 逻辑将在每个数据字节后自动递增寄存器地址。
启用时,可以通过以下方式来计算 CRC:
CRC 多项式为 x8 + x2 + x + 1,初始值为 0。
当响应器检测到错误的 CRC 时,I2C 响应器将不确认 CRC,从而使 I2C 响应器进入空闲状态。
图 10-2 显示了一个使用重复启动的读取事务。
图 10-3 显示了一个未使用重复启动的读取事务(例如在硬件中不可用时)。对于块读取,控制器确认除最后一个数据字节之外的每个数据字节,并继续为接口提供时钟。I2C 块将在每个数据字节后自动递增寄存器地址。
启用时,可以通过以下方式来计算读取事务的 CRC:
CRC 多项式为 x8 + x2 + x + 1,初始值为 0。
当控制器检测到错误的 CRC 时,I2C 控制器将不确认 CRC,从而使 I2C 响应器进入空闲状态。
当主机发送读取事务时,该器件在获取数据并准备发送数据时可能会发生时钟延长。不过,当发送的子命令需要该器件获取数据并将其加载到 0x40 – 0x5F 传输缓冲区时,该器件在此期间不会发生时钟延长。器件获取数据所需的时间取决于特定的子命令和器件内正在进行的任何其他处理,因此在运行期间会有所不同。表 10-2描述了该器件获取子命令数据所需的大致时间。发送子命令时,建议等待足够长的时间以使该器件获取数据,然后再次读取 0x3E/0x3F。如果从该读取中回显初始子命令,则获取的数据可用并且可以从传输缓冲区中读取。