embedded protocol_error ai_generated true

SPI:DMA CRC错误,从设备接收到的CRC不匹配,期望0x1A2B实际为0x3C4D

SPI: DMA CRC error, received CRC mismatch on slave, expected 0x1A2B got 0x3C4D

ID: embedded/spi-dma-crc-error-stm32

其他格式: JSON · Markdown 中文 · English
92%修复率
88%置信度
1证据数
2023-11-20首次发现

版本兼容性

版本状态引入弃用备注
STM32Cube_FW_H7 v1.10.0 active — — —
ARM GCC v12.2.1 active — — —
SPI HAL driver v2.4.0 active — — —

根因分析

主从设备间CRC计算不匹配,原因是多项式设置不同或STM32 SPI硬件CRC模式下DMA传输长度未对齐。

English

CRC calculation mismatch between master and slave due to different polynomial settings or DMA transfer length misalignment in STM32 SPI hardware CRC mode.

generic

官方文档

https://www.st.com/resource/en/reference_manual/rm0399-stm32h745755-and-stm32h747757-advanced-armbased-32bit-mcus-stmicroelectronics.pdf

解决方案

  1. 在主从设备上设置相同的CRC多项式:SPI_InitTypeDef.CRCPolynomial = 7;并确保SPI_CRCPR寄存器匹配。对于DMA,在配置CRC长度后设置SPI_CR2.TXDMAEN/RXDMAEN。
  2. 将DMA传输大小与CRC长度对齐:如果CRC是16位,确保总传输长度是2字节的倍数。使用包含CRC字节的缓冲区大小的HAL_SPI_TransmitReceive_DMA()。

无效尝试

常见但无效的做法:

  1. Disable SPI CRC hardware and implement software CRC 80% 失败

    Software CRC adds latency and may conflict with DMA timing; hardware CRC mismatch root cause remains unaddressed.

  2. Swap master and slave roles 90% 失败

    Role swap does not fix polynomial or length mismatch; error may move but persists.