打印

GD32F407读TF卡

[复制链接]
1868|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qingchapp|  楼主 | 2018-9-26 12:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用STM32F407调试成功的程序刷到GD32F407,结果能读出TF卡的容量,但是不能读扇区0存储的数据,程序会进入起始位错误:
else if(SDIO_GetFlagStatus(SDIO_FLAG_STBITERR) != RESET)         //接收起始位错误
                {
                         SDIO_ClearFlag(SDIO_FLAG_STBITERR);//Çå´íÎó±êÖ¾
                        return SD_START_BIT_ERR;                 
                }
是STM32和GD32读TF卡的协议不兼容吗?还是存在时序问题?谁有GD32驱动TF卡成功的经验,帮忙解释一下,谢谢。
沙发
烦心的泡泡| | 2019-1-10 11:32 | 只看该作者
经过我的测试,确定可以SD初始化,但不能读写SD卡,能读出TF卡的容量,但是不能读扇区0存储的数据。所以可以判断是底层驱动的问题。网上找的解决方法如下:
9. SDIO

    1) SDIO DAT 3 pin 的在 1 bit bus mode 和4 bit bus mode 下的配置

    描述:

    1、 SDIO 在 1 bit bus mode 下,DAT 3 pin 是低电平,这样会导致 SD Card 进入SPI 模式。

    原因:初始化失败的原因主要是因为GD32 的芯片SDIO 的DAT3 口存在BUG。

    2、 在4 位模式下,通过上面的方法,程序能正常初始化,但不能正常读写SD卡。

    原因:因为DAT3 口在前面已经配置成推挽输出,所以在4 位模式下,不能正常读下。在调用4 位模式前,把DAT3 的端口配置成复用推挽输入即可解决问题。

    解决方法 1、 1 bit bus mode 的解决方法:建议在SDIO 使能之前,先把 SDIO DAT 3 pin 配置成推挽输出,并且要置成高电平,使 SDIO DAT 3 pin 保持高电平即可.

    2、 4 bit bus mode 的解决方法:在调用4 位模式前,把DAT3 的端口配置成复用输出即可解决问题。

    2) 程序在刚烧完后能正常读写SD 卡,断电再上电后,SD 卡初始化失败,需要手动复位一次后才正常

描述 在某些SD 卡中,GD32 断电再上电,会引起SD 卡上的时钟信号不正常,导致SD 卡发送命令失败。

    解决方法:在程序中,打开SD 卡时钟后,增加一小段延时,以保证SD 卡时钟信号稳定。这个延时添加的地方:在sdcard.c(即SDIO 的配置文件中),然后在SD_Error SD_Init(void)这个函数中找到SDIO_DeInit();就在这个后面加个延时。

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2, ENABLE);

SDIO_DeInit();

{

int i = 0xffff;

while(i --);

}

使用特权

评论回复
板凳
QQ2224043166| | 2021-12-18 12:29 | 只看该作者
兼容,从STM32f407程序移植到GD32F407,只需要更改相应的驱动即可,应用层可以直接使用,GD32的库函数对应stm32是标准库

使用特权

评论回复
地板
jaii3@163.com| | 2022-7-15 17:42 | 只看该作者
烦心的泡泡 发表于 2019-1-10 11:32
经过我的测试,确定可以SD初始化,但不能读写SD卡,能读出TF卡的容量,但是不能读扇区0存储的数据。所以可 ...

有demo吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

5

帖子

1

粉丝