在 STM32F407 上使用带有 CRC 和 DMA 的 SPI,什么信号表示 CRC 传输结束?

问题描述 投票:0回答:1

我有 2 个 STM32F407 处理器通过 SPI 进行通信。从机监视许多输入,当发生感兴趣的事情时,它会中断启动 SPI 传输的主机。这个过程是基于寄存器的(无 HAL),并且 100% 由中断和 DMA 驱动,一切都按其应有的方式工作。问题出在添加 SPI CRC 时。参考手册 RM0090 Rev 19 第 891 和 892 页提供了 CRC 配置详细信息。它表明(我认为)NSS 线至少需要在 CRC 传输开始时保持低电平。请参阅第 892 页的步骤 5 和 6。

如果在 DMA 传输数据后将 NSS 线保持为低电平,则可以接收并测试 CRC,没有任何错误。一切都很好。如果我在 DMA 传输结束时将 NSS 线拉高,我会收到 0x00 的 CRC,并按预期收到 CRC 错误。

我的问题是,如果我将 NSS 线保持为低电平以进行 CRC 传输,则当 CRC 传输完成时我没有任何信号通知我,以便可以再次拉高 NSS 线。我花了几天时间试图解决这个问题,但没有找到任何方法来检测使用 DMA 时 CRC 传输的结束。

我一定是错过了什么。其他人必须让此配置正常工作。如果有人能给我一些线索,告诉我什么信号触发使用 DMA 的 CRC SPI 传输的结束,以及可能如何配置它,我将不胜感激。

提前感谢您的帮助。 吉姆

enter image description here

NSS 在 4 个字节数据末尾变高。

enter image description here

NSS 在 4 个字节数据末尾保持低电平。

stm32 spi crc dma
1个回答
0
投票

我找到了解决办法。自旋等待 SPI 状态寄存器忙位变低。不是很优雅和阻塞,但它有效。

© www.soinside.com 2019 - 2024. All rights reserved.