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
92%Fix Rate
88%Confidence
1Evidence
2023-11-20First Seen
Version Compatibility
| Version | Status | Introduced | Deprecated | Notes |
|---|---|---|---|---|
| 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.pdfWorkarounds
-
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.
-
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.
中文步骤
在主从设备上设置相同的CRC多项式:SPI_InitTypeDef.CRCPolynomial = 7;并确保SPI_CRCPR寄存器匹配。对于DMA,在配置CRC长度后设置SPI_CR2.TXDMAEN/RXDMAEN。
将DMA传输大小与CRC长度对齐:如果CRC是16位,确保总传输长度是2字节的倍数。使用包含CRC字节的缓冲区大小的HAL_SPI_TransmitReceive_DMA()。
Dead Ends
Common approaches that don't work:
-
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.
-
Swap master and slave roles
90% fail
Role swap does not fix polynomial or length mismatch; error may move but persists.