STM32
直播中

张秀兰

7年用户 1270经验值
私信 关注
[问答]

STM32H750DMA+SPi内存数据不一致的原因?

发现用STM32H750 dma+spi读写数据时发现当spi速度大于8M时出现内存不一致的问题,我再读之前已经用SCB_CleanInvalidateDCache_by_Addr这个函数无效化内存了,速度小于8M时没有这个问题,我这个程序是运行在外挂的flash里的

回帖(1)

刘桂英

2024-5-24 16:55:34
STM32H750 DMA + SPI 内存数据不一致的原因可能有以下几点:

1. **缓存同步问题**:当使用 DMA 进行 SPI 通信时,数据可能会被缓存。在高速 SPI 通信时,缓存同步可能不够及时,导致数据不一致。尽管您已经使用了 `SCB_CleanInvalidateDCache_by_Addr` 函数,但在高速传输时,缓存同步可能仍然存在问题。

2. **SPI 时钟配置**:当 SPI 速度大于 8M 时,可能需要重新检查 SPI 时钟配置,确保时钟设置正确。错误的时钟配置可能导致数据传输错误。

3. **SPI 模式设置**:检查 SPI 模式设置,确保数据传输的方向和极性设置正确。错误的 SPI 模式设置可能导致数据不一致。

4. **DMA 配置**:检查 DMA 配置,确保数据传输的方向、大小和地址设置正确。错误的 DMA 配置可能导致数据不一致。

5. **外部 Flash 性能**:由于您的程序运行在外挂的 Flash 里,需要检查 Flash 的性能是否满足高速 SPI 通信的要求。如果 Flash 性能不足,可能导致数据不一致。

6. **硬件连接问题**:检查 SPI 和 DMA 相关的硬件连接,确保连接正确且没有损坏。硬件连接问题可能导致数据传输错误。

为了解决这个问题,您可以尝试以下步骤:

1. **降低 SPI 速度**:尝试降低 SPI 速度,看看问题是否仍然存在。如果问题消失,那么可能是缓存同步问题。

2. **优化缓存同步**:在高速 SPI 通信时,尝试使用更频繁的缓存同步操作,例如在每次数据传输后立即执行 `SCB_CleanInvalidateDCache_by_Addr` 函数。

3. **重新检查 SPI 和 DMA 配置**:确保 SPI 和 DMA 的配置正确,包括时钟设置、模式设置和硬件连接。

4. **测试不同的 Flash 性能**:如果可能,尝试使用性能更高的 Flash,看看问题是否仍然存在。

5. **使用软件 SPI**:如果硬件 SPI 仍然存在问题,可以尝试使用软件 SPI 作为替代方案。

通过以上步骤,您应该能够找到导致内存数据不一致的原因,并采取相应的措施解决问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分