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.