OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8685|回复: 6

读SD卡扇区出问题

[复制链接]

3

主题

6

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2014-7-22
在线时间
1 小时
发表于 2014-7-22 16:32:24 | 显示全部楼层 |阅读模式
5金钱
原子兄你好,我用你的MMC_SD.C的驱动,版本为2.0,修改时间为//2012/1/10  , 读取1个8GB的SD卡,  我在测试时候做一个间隔一定时间(大约是3秒)轮番读取一个指定扇区数据,发现在开发板上电以后第一次读区的数据一定是错的, 随后都是正确的, 随后我有降低SPI的通讯平率, 当降低到256分频的时候就没有这个问题了,不知道是那里的原因。
while(SD_Initialize()!=0){}
while(1)
{
if(t==9)//??3s??????????
{
if(SD_ReadDisk(buf,63,1)==0)//????MBR????
{
for(sd_size=0;sd_size<512;sd_size++)
{
USART1_SEND_U8(buf[sd_size]); //·???????????
}
   
}
t=0;
}   
t++;
    DISP_Scan(NB_O , NB_K );
delay_ms(300);
    DISP_Scan(NB_NC , NB_NC);
delay_ms(100);
LED1=!LED1;//LED1????
}

001.jpg
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-7-22 23:58:59 | 显示全部楼层
你直接下载我们例程试试。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

3

主题

6

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2014-7-22
在线时间
1 小时
 楼主| 发表于 2014-7-23 10:15:03 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
用你的原代码,用ministm32的开发板,用你们公司的串口调试软件,问题是一样的,
回复

使用道具 举报

3

主题

6

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2014-7-22
在线时间
1 小时
 楼主| 发表于 2014-7-23 10:36:19 | 显示全部楼层



用你的原来例程,问题还是一样的, 每次开发板上电后第一读的扇区数据不正确,但后来再读的数据就是对的, 重新断电再上电还是第一次读的数据是错的
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-7-23 23:24:42 | 显示全部楼层
回复【4楼】tonycai:
---------------------------------
奇怪了,我测试没这个现象哦.
每次数据都是正常的.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

3

主题

6

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2014-7-22
在线时间
1 小时
 楼主| 发表于 2014-7-24 13:09:27 | 显示全部楼层
1:由于我最近做一个项目要用到SD卡存取数据,我这两天就这个问题做了很多测试,我发现和SD卡有关系,我手上本来只有2片8G的SanDisk品牌的SDHC卡(此卡的质量不会有问题),测试都有类似的问题,后来我找同事借了一片4G的Panasonic品牌的SDHC卡,这个4G的卡用贵公司提供的源代码测试确实很正常,没任何问题。
2:后来我自己做了一段测试代码,代码功能很简单,就是按一下一个按钮就读取SD卡上的一个指定扇区,然后用串口发出来,初始化SD卡和读取SD扇区的代码都是用贵公司的,
    在SD_SPI_SpeedHigh()函数里如果是4分频的话2个8G的SD卡读数据都会有问题,表现还是为第1次和第2次读取扇区都不成功,第3次读数据都成功,但数据基本都错误(很少概率是正确的),如果再继续读取的话却都是正确的,直到重新上电就会出现以上问题,但是在把SD_SPI_SpeedHigh()函数里改成256分频的时候以上问题就都不存在了。
3:本人以前也没用过SD卡,对SD卡的操作还不是很熟悉,这里能用到原子兄的源代码还是省了很多事情,所以再次感谢原子兄!针对以上问题我想了一个土办法,自己写了一个简单的代码,就是在SD初始化成功以后把SPI的速度设置成256分频,然后象征性读取一个扇区,然后再把SPI的速度设置成4分频,办法虽土,但确实解决了以上出现的错误。
4:我想原子兄的SD卡驱动代码还是有些兼容性的问题,还望多研究研究!我增加的代码如下。
void USER_SD_Init(u8*buf)
{
SD_SPI_SpeedLow();
SD_ReadDisk(buf,0,1);
SD_SPI_SpeedHigh();
}
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-7-24 23:32:59 | 显示全部楼层
回复【6楼】tonycai:
---------------------------------
谢谢分享
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 17:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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