ST意法半导体
直播中

杨静

8年用户 1526经验值
私信 关注
[问答]

SPI外设如何知道何时对Rx进行CRC比较?是基于DMA Rx传输请求的长度吗?

我正在努力让 SPI CRCERR 标志和 IRQ 以我期望的方式工作。

我正在使用 STM32WB55。

全双工 SPI 通信正常。主机将 CRC 添加到 Tx 数据的末尾。在从机端,CRC 被读入。我可以看到 RXCRC 更新,我可以看到它在读取最后一个 CRC 字节时变为 0x00,这告诉我 CRC 计算正在工作。但是,当我故意使 CRC 不匹配时(在主从上使用不同的多项式来触发不匹配),我无法打开 CRCERR 标志。

我怀疑问题与 DMA 传输大小有关。我已经阅读了关于使用什么传输长度的建议(Tx 端 = 没有 CRC 的数据长度;Rx 端 = 有 CRC 的数据长度),并且我尝试了各种组合。我怀疑从 SPI 不知道传输已完成,所以它不做最后的比较并设置错误位。

所以,一些实际的问题:
  • 我是否应该期望 CRCERR 标志在 L4 和 WB55 等处理器上与 SPI + DMA 一起工作?
  • SPI 外设如何知道何时对 Rx 进行 CRC 比较?是基于DMA Rx传输请求的长度吗?还是我的心理模型不正确?
  • 如果我想接收 20 个字节的数据 + 1 个字节的 CRC,我知道我将 Tx 设置为 20 个字节(这有效,因为我看到 20 个字节 + 1 个字节的 CRC 自动附加在末尾)。我应该在 Rx 端做什么?我要它 21 个字节。我还尝试通过 DMA 请求 20 个字节,然后“手动”清除 CRC 的 SPI->DR 寄存器。这些组合似乎都不会导致设置 CRCERR 标志。

回帖(1)

徐敏

2022-12-27 11:27:26
阅读参考手册几次后回答我自己的问题......



  • 是的,CRCERR 标志确实有效
  • CRC 数据的长度似乎来自 Tx 传输长度。当 Tx 传输完成时,它会进行 CRC 比较并检查标志。至少,当我在从机上同时进行 DMA Rx 和 DMA Tx 传输时(即使是从机 Rx),它开始正确地在从机上设置 CRCERR 标志以进行接收。我相信 Tx 传输长度指示何时进行 CRC 比较以及何时设置错误标志。
  • 实现20字节数据+1字节CRC的#2,好像是DMA Rx 21字节,DMA Tx 20字节。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分