硬汉嵌入式论坛

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

[有问必答] microSD卡等级低读不出来的问题?

[复制链接]

35

主题

73

回帖

343

积分

高级会员

超越昨天

积分
343
QQ
发表于 2016-4-6 15:36:37 | 显示全部楼层 |阅读模式
1)现的程序现在用闪迪的CLASS10的microSD进行写操作时没有问题(初始化频率是400K,数据转换频率是24M)。
2)用三星CLASS4的microSD进行写操作不成功(初始频率是400K,数据转换频率是4M)。
按理说不同等级的SD卡,只是读写速度不一样,但我把频率降下来还是不行,所以就不明白了。
我用一块清华同方CLASS10的microSD进行写操作不成功(初始化频率是400K,数据转换频率是12M)。所以更不明白了。
请大家帮忙一下。谢谢!
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117586
QQ
发表于 2016-4-7 01:31:37 | 显示全部楼层
不是配置的问题,是ST提供的SD卡驱动不好,兼容性差,楼主可以尝试将SD卡的4线DMA方式改成单线,并且每次的读出操作不超过SD卡的扇区大小,即512字节,这样就稳定很多了。
回复

使用道具 举报

35

主题

73

回帖

343

积分

高级会员

超越昨天

积分
343
QQ
 楼主| 发表于 2016-4-7 08:44:36 | 显示全部楼层

回 eric2013 的帖子

eric2013:不是配置的问题,是ST提供的SD卡驱动不好,兼容性差,楼主可以尝试将SD卡的4线DMA方式改成单线,并且每次的读出操作不超过SD卡的扇区大小,即512字节,这样就稳定很多了。 (2016-04-07 01:31) 
现在已经是单线。配置程序如下:
  SDIO_InitStructure.SDIO_ClockDiv = SDIO_TRANSFER_CLK_DIV;
  SDIO_InitStructure.SDIO_ClockEdge = SDIO_ClockEdge_Rising;
  SDIO_InitStructure.SDIO_ClockBypass = SDIO_ClockBypass_Disable;
  SDIO_InitStructure.SDIO_ClockPowerSave = SDIO_ClockPowerSave_Disable;
  SDIO_InitStructure.SDIO_BusWide = SDIO_BusWide_1b;
  SDIO_InitStructure.SDIO_HardwareFlowControl = SDIO_HardwareFlowControl_Disable;
而且我没有进行读操作,只是写,写入的内容只有4个字节
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117586
QQ
发表于 2016-4-7 09:28:57 | 显示全部楼层
单线模式,把这个注释掉就可以了:
1.png
回复

使用道具 举报

35

主题

73

回帖

343

积分

高级会员

超越昨天

积分
343
QQ
 楼主| 发表于 2016-4-7 11:26:35 | 显示全部楼层

回 eric2013 的帖子

eric2013:单线模式,把这个注释掉就可以了:


(2016-04-07 09:28)
谢谢!果然所有的卡都好用了,这样的话是不是速度会降下来?有没有更好的驱动程序?
还是microSD是以一个扇区为单位写入,还是一个字节都可以写入?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117586
QQ
发表于 2016-4-8 01:32:40 | 显示全部楼层

回 fanyanxi 的帖子

fanyanxi:谢谢!果然所有的卡都好用了,这样的话是不是速度会降下来?有没有更好的驱动程序?
还是microSD是以一个扇区为单位写入,还是一个字节都可以写入?
 (2016-04-07 11:26) 
暂时没有好的驱动可用了。
在SD的最底层,SD都是以扇区为单位,即512字节进行读写的。

而我们使用了FatFS之后,读写可以是任意字节大小,系统会处理,当然,要麻烦读写参数的数据类型范围。
回复

使用道具 举报

1

主题

12

回帖

15

积分

新手上路

积分
15
发表于 2017-4-9 14:35:13 | 显示全部楼层

回 eric2013 的帖子

eric2013:暂时没有好的驱动可用了。
在SD的最底层,SD都是以扇区为单位,即512字节进行读写的。

而我们使用了FatFS之后,读写可以是任意字节大小,系统会处理,当然,要麻烦读写参数的数据类型范围。 (2016-04-08 01:32) 
汉子哥,无论是flashFS和Fatfs,底层驱动都是一样的,对吧,所以,只能这样了。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117586
QQ
发表于 2017-4-9 14:37:29 | 显示全部楼层

回 edaworld 的帖子

edaworld:汉子哥,无论是flashFS和Fatfs,底层驱动都是一样的,对吧,所以,只能这样了。 (2017-04-09 14:35) 
不一样的,FlashFS的底层是KEIL做的,FatFS的底层是ST提供的,ST提供的比较挫。
回复

使用道具 举报

1

主题

12

回帖

15

积分

新手上路

积分
15
发表于 2017-4-9 14:58:08 | 显示全部楼层
最近用103的板子+SD卡,做一个数据采集的东西,每5s中写一次数据,每次20K写入,采集一会后就卡死了,正在找问题。
下面附上我的代码:
void Task_WriteToSD(void)
{
    if (buffer1IsFull == TRUE)
    {   
        printf("\\nbuffer1 is full\\t\\n");

//        printf("\\n写入前的时间是\\t%d\\n", time1=bsp_GetRunTime());
        time1=bsp_GetRunTime();
        res = f_open(&fdst, "demo.TXT", FA_OPEN_ALWAYS | FA_WRITE);
        printf("\\nfile size is %d\\n",f_size(&fdst));
        /* Move to end of the file to append data */
        res = f_lseek(&fdst, f_size(&fdst));
        res = f_write(&fdst, s_tToSDBuffer1, sizeof(s_tToSDBuffer1), &bw); //将缓冲区的数据写到文件中
        memset(s_tToSDBuffer1,0,sizeof(s_tToSDBuffer1));
        f_close(&fdst);
//        printf("\\n写入后时间是\\t%d\\n", time2=bsp_GetRunTime());
        time2=bsp_GetRunTime();
        printf("\\n共计用时:%d\\n",time2-time1);
        buffer1IsFull = FALSE;
    }

    if (buffer2IsFull == TRUE)
    {
        printf("\\nbuffer2 is full\\t\\n");

        time1=bsp_GetRunTime();
//        printf("\\n写入前的时间是\\t%d\\n", time1=bsp_GetRunTime());
        res = f_open(&fdst, "demo.TXT", FA_OPEN_ALWAYS | FA_WRITE);
        printf("\\nfile size is %d\\n",f_size(&fdst));
        /* Move to end of the file to append data */
        res = f_lseek(&fdst, f_size(&fdst));      
        res = f_write(&fdst, s_tToSDBuffer2, sizeof(s_tToSDBuffer2), &bw); //将缓冲区的数据写到文件中   
        memset(s_tToSDBuffer2,0,sizeof(s_tToSDBuffer2));
        f_close(&fdst);
        time2=bsp_GetRunTime();
//        printf("\\n写入后时间是\\t%d\\n", time2=bsp_GetRunTime());
        printf("\\n共计用时:%d\\n",time2-time1);
        buffer2IsFull = FALSE;
    }

}
回复

使用道具 举报

1

主题

12

回帖

15

积分

新手上路

积分
15
发表于 2017-4-9 14:58:49 | 显示全部楼层

回 eric2013 的帖子

eric2013:不一样的,FlashFS的底层是KEIL做的,FatFS的底层是ST提供的,ST提供的比较挫。 (2017-04-09 14:37) 
接着我刚才的问题,目前用的是fatfs,有必要换成flashFS吗?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117586
QQ
发表于 2017-4-10 08:46:21 | 显示全部楼层

回 edaworld 的帖子

edaworld:接着我刚才的问题,目前用的是fatfs,有必要换成flashFS吗?
 (2017-04-09 14:58) 
这个帖子里面,我总结了一些FatFS的问题,看看能否帮到你
https://forum.anfulai.cn/forum.p ... 880&fpage=2
回复

使用道具 举报

1

主题

12

回帖

15

积分

新手上路

积分
15
发表于 2017-4-10 19:19:23 | 显示全部楼层

回 eric2013 的帖子

eric2013:这个帖子里面,我总结了一些FatFS的问题,看看能否帮到你
https://forum.anfulai.cn/forum.p ... 880&fpage=2 (2017-04-10 08:46) 
果不其然,我昨天测试了单字节,就没问题了,刚刚看了您的帖子,证实了我的实验结果。多谢汉子哥
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117586
QQ
发表于 2017-4-11 02:04:18 | 显示全部楼层

回 edaworld 的帖子

edaworld:果不其然,我昨天测试了单字节,就没问题了,刚刚看了您的帖子,证实了我的实验结果。多谢汉子哥 (2017-04-10 19:19) 
[s:142]
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-16 13:49 , Processed in 0.050367 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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