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
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.
官方文档
https://www.st.com/resource/en/reference_manual/rm0399-stm32h745755-and-stm32h747757-advanced-armbased-32bit-mcus-stmicroelectronics.pdf解决方案
-
在主从设备上设置相同的CRC多项式:SPI_InitTypeDef.CRCPolynomial = 7;并确保SPI_CRCPR寄存器匹配。对于DMA,在配置CRC长度后设置SPI_CR2.TXDMAEN/RXDMAEN。
-
将DMA传输大小与CRC长度对齐:如果CRC是16位,确保总传输长度是2字节的倍数。使用包含CRC字节的缓冲区大小的HAL_SPI_TransmitReceive_DMA()。
无效尝试
常见但无效的做法:
-
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.
-
Swap master and slave roles
90% 失败
Role swap does not fix polynomial or length mismatch; error may move but persists.