嵌入式技术william hill官网
直播中

贾埃罗

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

GD32F450 SDIO无法在SD卡上挂载文件系统是怎么回事?

2.jpg
上面是初始化时候的Log,本人对SD卡这块不熟悉,没能理解这些交互指令的意义。程序在STM32F429上驱动是正常的,同样的程序,移植到GD32F450上,可以识别SD卡,读取sd的容量,可是挂载文件系统在sd上却不行,文件系统挂载在外部flash上是正常的,请教下william hill官网 里的大佬们,有没有遇到过类似问题的,还请赐教。
最后跟踪 ,是卡在下面的函数里了,cmd.err返回值为0xffff。
2.jpg

回帖(6)

贾永世

2023-3-10 11:35:16
检查下是不是写卡的线程优先级太低了,GD原厂的sdio驱动只能在单上下文的环境里work properly。
一些对时序有要求的操作没有加临界保护,如果接口放在低优先级线程的上下文操作,一但线程被调度器打断,SDIO IP容易卡死
举报

贾埃罗

2023-3-10 11:35:42
我尝试把sdio得硬件初始化等级提高了,也是不行。在sdio得发送驱动函数里,
2.jpg
这个状态值在cmd51发送完之后,sta得值为0x20a400,和#define HW_SDIO_IT_RXACT (0x01U << 13)执行与后为真,导致超时,此时判断始终返回错误。注释掉cm->err = -RT_ERROR后,挂载成功,可以读写sd卡文件。目前尝试二十几次,均正常。现在始终不明白是读寄存器错误还是其他原因。 同样的程序在st下运行,sta返回值是0x400.
举报

贾埃罗

2023-3-10 11:35:47
2.jpg
3.jpg
4.jpg
而且从返回的状态值来看,也没看出啥问题来。现在有些懵了。。。
我也尝试把其他线程全部注释,在main函数中只运行了sdio得硬件初始化和文件挂载函数,也是不行。
麻烦抽空帮忙看下,是不是我处理的还是不对。
举报

贾伟刚

2023-3-10 11:35:57
在发送函数这只等待发送完成就可以,可以试试把接收等待去掉。

while (count && (hw_sdio->sta & HW_SDIO_IT_TXACT))
{
    count--;
}
举报

贾埃罗

2023-3-10 11:36:07
谢谢了,按你说的这样修改,测试了有一段时间了,目前未出现问题,可以正常使用。
举报

贾埃罗

2023-3-10 11:36:23
经过大家的帮忙,最终定位到drv_sdio.c的发送函数,去掉了接收等待,目前测试正常,在此分享出来,同时也感谢大家的帮忙!

while (count && (hw_sdio->sta & HW_SDIO_IT_TXACT))
{
    count--;
}
举报

更多回帖

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