embedded protocol_error ai_generated true

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

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

Also available as: JSON · Markdown · 中文
92%Fix Rate
88%Confidence
1Evidence
2023-11-20First Seen

Version Compatibility

VersionStatusIntroducedDeprecatedNotes
STM32Cube_FW_H7 v1.10.0 active
ARM GCC v12.2.1 active
SPI HAL driver v2.4.0 active

Root Cause

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

generic

中文

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

Official Documentation

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

Workarounds

  1. 95% success Set identical CRC polynomial on both master and slave: SPI_InitTypeDef.CRCPolynomial = 7; and ensure SPI_CRCPR register matches. For DMA, set SPI_CR2.TXDMAEN/RXDMAEN after configuring CRC length.
    Set identical CRC polynomial on both master and slave: SPI_InitTypeDef.CRCPolynomial = 7; and ensure SPI_CRCPR register matches. For DMA, set SPI_CR2.TXDMAEN/RXDMAEN after configuring CRC length.
  2. 90% success Align DMA transfer size to CRC length: if CRC is 16-bit, ensure total transfer length is multiple of 2 bytes. Use HAL_SPI_TransmitReceive_DMA() with buffer sizes that include CRC bytes.
    Align DMA transfer size to CRC length: if CRC is 16-bit, ensure total transfer length is multiple of 2 bytes. Use HAL_SPI_TransmitReceive_DMA() with buffer sizes that include CRC bytes.

中文步骤

  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()。

Dead Ends

Common approaches that don't work:

  1. Disable SPI CRC hardware and implement software CRC 80% fail

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

  2. Swap master and slave roles 90% fail

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