ZHCSLD6A June 2020 – December 2021 TMAG5170-Q1
PRODUCTION DATA
TMAG5170-Q1 對 SPI 通信執行強制 CRC。數據完整性在兩個方向上都由一個涵蓋傳入和傳出 32 位消息內容的 4 位 CRC 保持。每個 32 位 SPI 幀的四個 LSB 位專用于 CRC。CRC 代碼由多項式 x4 + x + 1 生成。使用 b1111 初始化 CRC 位。
在 SDI 寫入幀期間,TMAG5170-Q1 會在執行寫入指令之前讀取 CRC 數據。如果幀中存在任何 CRC 錯誤,則會忽略來自控制器的寫入指令。在 SDI 常規讀取幀期間,TMAG5170-Q1 開始在同一幀中通過 SDO 線路發送請求的數據,并通過 ERROR_STAT 位向控制器通知發生的任何錯誤。如果器件在 SDI 線路中檢測到 CRC 錯誤,則器件將反轉同一幀中 SDO CRC 的最后一位,以立即向控制器發出信號,表明 SPI 通信受到影響。控制器還可以通過檢查下一個常規讀取幀中的 STATUS11 位來確定 SDI 幀中是否存在 CRC 錯誤。
圖 7-13 4 位 CRC 計算使用以下 XOR 函數公式來計算 4 位 CRC。圖 7-13 介紹了這些公式中的符號。
下面顯示了用于計算 4 位 CRC 的示例代碼。
function logic [3:0] calculate_crc4;
input logic [27:0] frame;
logic [31:0] padded_frame;
logic [3:0] frame_crc;
logic inv;
integer i;
padded_frame = {frame, 4'b0000};
begin
frame_crc = 4'hf; // initial value
for (i=31; i >= 0; i=i-1) begin
inv = padded_frame[i] ^ frame_crc[3];
frame_crc[3] = frame_crc[2];
frame_crc[2] = frame_crc[1];
frame_crc[1] = frame_crc[0] ^ inv;
frame_crc[0] = inv;
end
return frame_crc;
end
endfunction