您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> 读SD卡块传输的问题?
本帖共有891个阅读者
发表帖子 发表投票 回复主题
读SD卡块传输的问题?
笑溜溜(论坛游民)
笑溜溜
头衔:社区公民
帮派:无帮无派
帖数:84
金钱:819
积分:107
注册时间:2012/12/13
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
读SD卡块传输的问题?
用的是BF518的核心板,在读SD卡时其他的卡倒是没事,其中有一个卡,以前读着都没事了,后来读那个SD卡老出现一个问题,就如附件的图片显示老是停在431行,这个卡是CLASS 4 8G的,这个卡还是能读出点数据的但是读着这个卡这程序就死在那地方了,用的这个程序读其他的卡倒是没问题,不知道如何解决。我看了这个程序大概的意思是:读SD卡用块传输的DMA模式,一次读八个扇区,但是根据右边的寄存器显示读这个卡好像是没有读够八个扇区就一直停在哪里。
想请问坛子里有没有人曾经遇到过这个问题?用的是FAT32文件系统,底层驱动用的是咱们开发板所带的

上传的图片
  20138132315694.jpg [ 211.84 KB 1219×599 ] (缩略时请点击查看原图)

 





「该帖子被 笑溜溜 在 2013-08-13 23:06:56 编辑过」

这家伙很懒,什么也没有留下!
等级:论坛游民 参考IP地址:*.*.*.*
2013/8/13 23:01:25
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
通常读取硬件停到标识位,是时序没匹配好造成的,你可以尝试单步,看是否能通过,然后打几个断点,如果不能通过 ,就在代码中加一些延时。

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2013/8/14 20:45:15
笑溜溜(论坛游民)
笑溜溜
头衔:社区公民
帮派:无帮无派
帖数:84
金钱:819
积分:107
注册时间:2012/12/13
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
谢谢andy,以前最开始的时候我觉的这个速度是不是太快了?我设定的card_speed = 50000000;是不是在接收完数据后CLK的速度太快,就没接到他的回应,当时看的都是些英文看烦了,就没在想过这种问题,后来想了想是不是我的SD协议块传输的命令发的少了,但一直就没找到。我现在还没添加那些你说的延时,就只是把这个card_speed = 5000000(5Mhz速度)了,那个有问题的SD卡就读的没问题了。
现在速度还是慢,还得改呀。
唉,还是大神厉害呀!!!一眼就看见问题的症结所在了,膜拜andy大虾了


「该帖子被 笑溜溜 在 2013-08-14 22:37:04 编辑过」

这家伙很懒,什么也没有留下!
等级:论坛游民 参考IP地址:*.*.*.*
2013/8/14 22:34:49
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
通常SD卡在初始化时,速度要跑的很慢,初始化完成后,再将速度调上去。如果你的卡低速可以跑,速度快不行,也可能是某些地方需要加点延时,具体是哪里,只能通过代码一点一点尝试着找


这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2013/8/15 14:00:32
笑溜溜(论坛游民)
笑溜溜
头衔:社区公民
帮派:无帮无派
帖数:84
金钱:819
积分:107
注册时间:2012/12/13
4信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
我现在倒是把那个没法读SD卡的问题解决了,看了看SD协议(我觉的这协议写的有些不明晰,最新版的),是加了延时后就读成功了,先上图吧


上传的图片
  20138161710377.jpg [ 36.71 KB 510×199 ] (缩略时请点击查看原图)

 




上传的图片
  201381617135477.jpg [ 161.64 KB 1346×319 ] (缩略时请点击查看原图)

 



上传的图片
  20138161714877.jpg [ 50.31 KB 864×250 ] (缩略时请点击查看原图)

 


第一副图是我改的代码,第二幅第三副是我从SD协议中对读SD卡时间和时序的要求截图。我才开始看那个读SD时间约束时一直犯迷糊(我觉的这个SD协会直接把那个时序约束标在时序图上不行吗!!!),不知道这个延时代码加在哪个地方先是加在了代码的第441行,后加在了第445行。445行后就跑通了,那些不能读的SD卡(都是CLASS4系列)都能读了。我现在也还是不真正明白那个延时加在哪是对,但依现在的情况看,我加在这地方跑通了,我认为我自己对了。网上很多都是SPI模式读SD,大部分都注明要多加8个时钟的延时,我想可能是这个地方吧,我没仔细看他们那些的代码添加。
我现在我设定的SD速率都是25Mhz。后来我又把有试了下那个以前不能正常运行读卡的程序(没加延时!),你们猜结果怎样?那些卡又能读了,不加延时现在又能读了,这到底要我怎样呀?现在实在想不通这事。
我把读卡的速率调成50Mhz,加了延时我也就在那个445行改,换了好多值但是这个50mhz还是不能读成功,和以前才开始读SD卡的现象一样,我看了看那个SD协议是不是还得给它发个CMD6的命令,使我的SD卡运行在high speed mode状态。昨天一白天看协议看烦了,就看电影了,白天不干活,晚上加班干(我活该,又是熬夜调的)以后再也不那么干了。晚上试一试加个CMD6的命令看看怎样?


「该帖子被 笑溜溜 在 2013-08-16 17:36:00 编辑过」

这家伙很懒,什么也没有留下!
等级:论坛游民 参考IP地址:*.*.*.*
2013/8/16 17:07:15
笑溜溜(论坛游民)
笑溜溜
头衔:社区公民
帮派:无帮无派
帖数:84
金钱:819
积分:107
注册时间:2012/12/13
5信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
现在50Mhz没问题了,就是加了个CMD6命令,把卡调到高速模式

这家伙很懒,什么也没有留下!
等级:论坛游民 参考IP地址:*.*.*.*
2013/8/18 10:50:30
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.154150 Call, 1 Queries, Processed in 0.015625 second(s),