ZHCSOQ3 September 2021 TMAG5170
PRODUCTION DATA
TMAG5170 对 SPI 通信执行强制 CRC。数据完整性在两个方向上都由一个涵盖传入和传出 32 位消息内容的 4 位 CRC 保持。每个 32 位 SPI 帧的四个 LSB 位专用于 CRC。CRC 代码由多项式 x4 + x + 1 生成。使用 b1111 初始化 CRC 位。
在 SDI 写入帧期间,TMAG5170 会在执行写入指令之前读取 CRC 数据。如果帧中存在任何 CRC 错误,则会忽略来自控制器的写入指令。在 SDI 常规读取帧期间,TMAG5170 开始在同一帧中通过 SDO 线路发送请求的数据,并通过 ERROR_STAT 位向控制器通知发生的任何错误。如果器件在 SDI 线路中检测到 CRC 错误,则器件将反转同一帧中 SDO CRC 的最后一位,以立即向控制器发出信号,表明 SPI 通信受到影响。控制器还可以通过检查下一个常规读取帧中的 STATUS11 位来确定 SDI 帧中是否存在 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