circlegan 发表于 2022-8-19 13:01:08

GD32F470替代STM32F429 SPI DMA异常

rtthread系统上,将GD32F470替换STM32F429后(GD32 FLASH高速区很小,除了将一些需要快速运行的代码编译到了RAM区,其它都没有改),DMA方式读写spi flash中数据时出现了spi transfer error -1,程序基本无法启动。然后将SPI 的速率从原来的25M降低到了15M,出现spi transfer error的概率就比之前少了,程序基本能够启动,但频繁操作,数据量大的时候还是很大概率出问题。
继续SPI 速率降到10M时,spi 又导致了程序不能启动,和25M的时候问题差不多。
调试后发现DMA一开始是能正常发送一些数据,但到了一定的时候,就出问题了,spi transfer error -1也是因为再次发送数据到DMA的时候,检测到DMA的状态为BUSY,而且这个状态一直不变,导致一直出现spi transger error,程序基本卡死。
请问有遇到这种问题的吗,不知道是不是时序问题导致的,需要怎么解啊? 求指导:(

morning_enr6U 发表于 2022-8-19 17:11:16

可能是时序的问题,你用的是ST的库吧?DMA的操作,GD的和ST的还是有细微区别的。

之前我用串口DMA接收,重新使能DMA的代码,就要先清相关标志,才可以恢复DMA接收。

circlegan 发表于 2022-8-22 10:55:30

morning_enr6U 发表于 2022-8-19 17:11
可能是时序的问题,你用的是ST的库吧?DMA的操作,GD的和ST的还是有细微区别的。

之前我用串口DMA接收 ...

是的,直接用的ST的库。但这个问题也不是必现,只是在数据量大的时候就可能会出现。而且就是因为上一次的标志没有清理掉(可能是DMA没发送完,也可能是出问题了,多半是后者),导致本次进入之前检测到这个标志busy的时候,就直接退出了。这个时候也不好冒然的直接就清理相关标志了

morning_enr6U 发表于 2022-8-24 11:21:00

可以咨询一下GD的FAE,他们还是比较热心的。

circlegan 发表于 2022-9-5 11:02:41

把SPI的模式从MODE_0改成MODE_3,并继续将SPI速率降低,已经测试了几百次,暂时没有出现问题,希望解决了吧:lol

morning_enr6U 发表于 2022-9-5 12:55:21

{:14:}
页: [1]
查看完整版本: GD32F470替代STM32F429 SPI DMA异常