ZHCSU48 December 2023 BQ76972
PRODUCTION DATA
SPI 事務的第一個字節包含一個 R/W 位(R = 0,W = 1),后跟一個 7 位地址,MSB 在前。如果控制器(主機)正在寫入,則第二個字節是寫入的數據。如果控制器正在讀取,將忽略 SPI_MOSI 上發送的第二個字節(CRC 計算除外)。
如果啟用了 CRC,控制器必須將 8 位 CRC 代碼作為第三個字節發送,該代碼是通過前兩個字節計算得出的。如果 CRC 正確,會將在時鐘沿輸入的值放入接收緩沖區。如果 CRC 不正確,會將發送緩沖區設置為 0xFFFF,并將發送的 CRC 設置為 0xAA(在下一個事務的時鐘沿輸出)。
在此事務期間,邏輯在時鐘沿輸出發送緩沖區的內容。如果自上次事務以來未更新發送緩沖區,邏輯將在時鐘沿輸出 0xFFFF;如果在時鐘沿進行 CRC,CRC 將在時鐘沿輸出 0x00(如啟用)。因此,0xFFFF00 命令向控制器指示出站緩沖區在事務發生之前未被內部邏輯更新。當器件沒有足夠的時間更新連續事務之間的緩沖區時,就會發生這種情況。
當內部邏輯從接口邏輯中獲取寫入數據并對其進行處理時,該內部邏輯還會將 R/W 位、地址和數據復制到發送緩沖區中。在下一個事務中,此數據將在時鐘沿被發送回控制器。
當控制器開始讀取時,內部邏輯將 R/W 位和地址連同請求的數據一起放入輸出緩沖區中。如果啟用了 CRC,接口會對發送緩沖區中的兩個字節計算 CRC,并在時鐘沿將結果返回至控制器(與 0xFFFF 相關的異常如上所述)。下面是假設 CPOL = 0 時使用 CRC 和不使用 CRC 的事務序列圖。
器件處理命令和子命令所需的時間將根據每個命令的具體情況而有所不同。直接命令通常會在 50μs 內完成,而子命令可能需要更長的時間,完成不同的子命令需要的持續時間不同。例如,當發送特定的子命令時,器件需要大約 200μs 才能將 32 字節的數據加載到內部子命令緩沖區。如果主機在開始讀取緩沖區(從地址 0x40 讀回地址 0x5F)之前提供足夠的時間完成此加載,器件將使用有效數據而不是 0xFFFF00 進行響應。當數據已經加載到子命令緩沖區時,可以在 SPI 事務之間以大約 50μs 的間隔讀回該數據。有關特定命令和子命令所需近似持續時間的更多詳細信息,請參閱 BQ76972 技術參考手冊。
主機軟件應包含重試可能不成功的事務的方案。例如,如果器件在 SPI_MISO 上返回 0xFFFFFF,說明內部時鐘未通電,需要重試事務。類似地,如果器件在一個事務上返回 0xFFFFAA,這表明以前的事務遇到 CRC 錯誤,因此必須重試前一個事務。如上所述,如果器件返回 0xFFFF00,說明當前事務發送時之前的事務尚未完成,這可能意味著應該重試之前的事務,或者至少需要更多的時間才能完成。