硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2204|回复: 5
收起左侧

GD32F470替代STM32F429 SPI DMA异常

[复制链接]

8

主题

24

回帖

48

积分

新手上路

积分
48
发表于 2022-8-19 13:01:08 | 显示全部楼层 |阅读模式
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,程序基本卡死。
请问有遇到这种问题的吗,不知道是不是时序问题导致的,需要怎么解啊? 求指导
回复

使用道具 举报

4

主题

1403

回帖

1415

积分

至尊会员

积分
1415
发表于 2022-8-19 17:11:16 | 显示全部楼层
可能是时序的问题,你用的是ST的库吧?  DMA的操作,GD的和ST的还是有细微区别的。

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

使用道具 举报

8

主题

24

回帖

48

积分

新手上路

积分
48
 楼主| 发表于 2022-8-22 10:55:30 | 显示全部楼层
morning_enr6U 发表于 2022-8-19 17:11
可能是时序的问题,你用的是ST的库吧?  DMA的操作,GD的和ST的还是有细微区别的。

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

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

使用道具 举报

4

主题

1403

回帖

1415

积分

至尊会员

积分
1415
发表于 2022-8-24 11:21:00 | 显示全部楼层
可以咨询一下GD的FAE,他们还是比较热心的。
回复

使用道具 举报

8

主题

24

回帖

48

积分

新手上路

积分
48
 楼主| 发表于 2022-9-5 11:02:41 | 显示全部楼层
把SPI的模式从MODE_0改成MODE_3,并继续将SPI速率降低,已经测试了几百次,暂时没有出现问题,希望解决了吧
回复

使用道具 举报

4

主题

1403

回帖

1415

积分

至尊会员

积分
1415
发表于 2022-9-5 12:55:21 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-11-1 06:57 , Processed in 0.250296 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表