ZHCU948B September 2020 – May 2022 BQ76952
BQ76952 器件中的 SPI 接口作为仅响应器接口运行,支持高达 2MHz 的速率,并具有可选的 CRC 检查。如果尚未对 OTP 进行编程,BQ76952 将默认在 400kHz I2C 模式下首次通电,而其他版本的器件可能会在其他模式下首次通电,具体取决于器件版本。可以在生产线上对在 BQ76952 中选择 SPI 模式的 OTP 设置(由 Settings:Configuration:Comm Type 设置)进行编程以选择 SPI 模式,然后当器件通电时,该器件将自动进入 SPI 模式。尽管器件在退出 CONFIG_UPDATE 模式时不会立即更改通信模式,但是主机还可以在 CONFIG_UPDATE 模式下更改串行通信设置,以避免在评估或生产过程中失去通信。主机可以使用 CRC (Settings:Configuration:Comm Type = 16) 写入 0x7C35 SWAP_TO_SPI() 子命令,立即将通信接口更改为 SPI,而无需在 CONFIG_UPDATE 模式下更改设置。或者,可以发送子命令 0x29BC SWAP_COMM_MODE(),将器件切换到通过 Settings:Configuration:Comm Type 中的设置所选择的通信模式。
SPI 接口逻辑在时钟极性 (CPOL) = 0 和时钟相位 (CPHA) = 0 的情况下运行,如下图所示。
该器件还包含一个使用多项式 x8 + x2 + x + 1 的可选 8 位 CRC。如果未启用 CRC,接口必须处理 16 位事务;如果启用 CRC,接口必须处理 24 位事务。根据 Settings:Configuration:Comm Type 的设置,可启用或禁用 CRC 模式。根据控制设置,逻辑将:
(a) 仅在有 CRC 时工作,无有效 CRC 时不处理数据,或
(b) 将只在无 CRC 时处理事务(因此主机每次只在时钟沿处理 16 位数据,如果发送更多或更少的数据,器件将检测到错误)。
如果主机使用 CRC 执行写入操作,而 CRC 不正确,传入数据将不会传输到接收缓冲区,发送缓冲区(用于下一个事务)也会复位为 0xFFFF。此事务被视为无效。在下一个事务中,CRC(如已在时钟沿输出)将为 0xAA,因此 0xFFFFAA 将向控制器指示检测到 CRC 错误。
当主机启动事务时,BQ76952 器件中的内部振荡器可能未运行(例如,如果器件处于 SLEEP 模式,可能会发生这种情况)。如果发生这种情况,针对在时钟沿输出的前 16 位数据,接口将在 SPI_MISO 上输出 0xFFFF。如果启用了 CRC,该接口还将为第三个 (CRC) 字节输出 0xFF。因此,0xFFFFFF 将向控制器指示内部振荡器尚未就绪。器件所用地址 0x7F 的定义方式应确保没有将 0xFF 写入此地址的有效事务。因此,在事务的前两个字节中,两字节模式 0xFFFF 绝不应作为有效序列出现(也就是说,该模式仅用作出错的标志,类似于 I2C NACK)。
如果内部 HFO 振荡器未在器件中运行,则将在 SPI_CS 的下降沿自动唤醒该振荡器(在 NORMAL、SLEEP 或 DEEPSLEEP 模式下是这样,但在 SHUTDOWN 模式下非如此)。在 NORMAL 模式或 SLEEP 模式下,HFO 可能需要大约 135µs 才能稳定并可供 SPI 接口逻辑使用。在 DEEPSLEEP 模式下,HFO 将需要大约 4.5ms 才能稳定并可供使用。这种延迟意味着在 HFO 最初关闭的第一个 SPI 事务期间,请求的数据通常无法返回给主机。因此,在 HFO 可能最初关闭的情况下,建议主机首先写入“虚拟”SPI 事务以唤醒 HFO,然后在 NORMAL 或 SLEEP 模式下等待至少 135µs,或在 DEEPSLEEP 模式下等待 4.5ms,之后再发送预期的 SPI 事务。如果 SPI 事务在 NORMAL 或 SLEEP 模式下返回 0xFFFF(在 16 位模式下)或 0xFFFFFF(在 24 位模式下),则主机应在初始通电后或在 DEEPSLEEP 模式下延迟至少 135µs 或 4.5ms 后,再次重试该事务。这样就有时间唤醒 HFO(如果其最初是关闭的),以及器件有时间准备请求的数据并使其准备就绪以供读出。
建议在使用 SPI 模式时,将 Settings:Configuration:Comm Idle Time 设置为 1 秒或更长时间,这会导致 HFO 在被 SPI_CS 上的下降沿唤醒后保持可编程数秒内通电。主机可以将此设置为更长的时间(最多 255 秒),并在此期限内保持定期通信,从而使 HFO 保持通电状态,以便器件能够快速响应 SPI 事务。然而,保持 HFO 连续运行将导致器件消耗额外的电源电流(约 30µA),超出了通信量最小时所消耗的电流。为了避免这种额外的电源电流,主机可以先发送一个“虚拟”SPI 事务(如读取命令 CONTROL_STATUS())以唤醒 HFO,并继续此操作,直到 SPI_MISO 上返回有效响应。此时,主机可以开始发送预期的 SPI 事务。之后,主机可以将 0xAA 写入 0x7F 地址,这将导致 HFO 关闭。请注意,0x7F FET Status() 是只读命令,这种向该命令地址发送 0xAA 的特殊情况与 0x7F FET Status() 命令无关。
该器件能够检测冻结或断开的 SPI 总线状况,然后重置总线逻辑。当 SPI_CS 为低电平,并且 SPI_SCLK 为静态且在两秒钟超时内没有变化时,就会识别出这种情况。