智能车制作

标题: K60使用SDHC写SD卡的经验分享与疑问 [打印本页]

作者: superrepus    时间: 2012-4-29 00:06
标题: K60使用SDHC写SD卡的经验分享与疑问
      近来在论坛上有关于K60的SDHC的帖子,有人留言询问,我就直接写出来大家看一看吧。
      不算题外话的题外话:我最初用的是codewarrior10.1,但是过慢的编译调试速度和BUG的存在然我毅然转投IAR了,但是后来发布的codewarrior10.2确实是做了非常大的改动,网上有人说可以算成一款新软件也不为过~用起来确实太方便了,eclipse果然强大,但是它的速度我实在无法忍受(难道我的电脑太慢了?),所以坚持使用了IAR。   
      言归正传,IAR6.3+J-Link+K60+SDHC(4bits)写SD卡。最开始使用的是苏州大学那本书的配套代码,他的代码用的是CPU传送方式,即在写入传输命令后,使用for循环把定量的数据写入传输FIFO。SDHC单块写入没有问题,但多块操作时不成功,我开始逐行分析他的代码,最后发现在多块写入时程序既没有设置自动CMD12功能,也没有人为方式发送CMD12,因此在多块写入时SD卡不会收到停止传输指令。于是我设置了自动CMD12位,程序不好用,改成最后人为方式发送CMD12,还是不好用,用断点调试发现程序死在所有数据发送结束后的等待命令执行成功的中断里。百般尝试后依旧没能调试出来,这时正好赶上CodeWarrior10.2更新,遂想到了CW的PE~于是改投CW试验。
      CodeWarrior10.2,使用处理器专家(PE)建立工程,调用SDHC的bean,按照帮助文件的历程建立SDHC的代码,它的代码在传送数据时使用的是ADMA2,不知道的话看看参考手册SDHC部分就知道了。ADMA2传送数据,并自动CMD12,程序运行正常,单块多块均好用,于是再次剖析代码,对比苏大的代码,发现除了ADMA的设置和自动CMD12以外,PE是一直输出SDHC的SCLK,而苏大设置的是只在需要时钟时SCLK才有时钟输出,修改苏大的代码为一直输出SCLK,还是不好用~最后的我只能把PE的代码移植到了IAR中(不小的工程啊)……
      这里先说一下写入时间的问题,写入时间=数据传送时间+SD卡忙的等待时间;单块(一个扇区)的写时间取决于SCLK频率和SD卡,如果是25MHz的时钟,4位模式写入一个扇区的数据传送时间是512*2/25=40.96uS,但是数据传送后会有一个SD卡的busy时间,据说这个时间是取决于SD卡的制造商的,据说东芝的卡busy时间最短(不知真假啊),但是我实验的结果是:有一个山寨的1G卡(上面写的是SAMSUNG)只有6mS,而另一个8G正品sandisk的class4的SDHC卡却要10mS。也就是说单块写入一个扇区正常8ms算正常。这也是为什么要用多块写入命令了,因为多块写入只有在最后一块发送完毕后才会产生SD卡的busy等待,从而加快了速度~      
      但是使用了PE的代码依然还有问题,我需要一次连续写入140块(140*512bytes),但是第一块发送完后,SD卡必然会产生一个busy时间,但是很短,然后再发送其余的139块,最后一个10几ms的busy时间(这是那张8G卡的结果,那张山寨卡会随机插入N多ms级的busy等待)。但最诡异的是明明所有数据都发送到了SD卡(用逻辑分析仪全程监视的SD总线),但是查看SD的数据时却发现只有很小的概率所有数据都存进SD卡了,大部分时候都是只有前30块写入了,后面没写入~这是至今我也没调通的地方~
      PS:我按照苏大书上的QQ联系了他们,反映了SDHC多块写函数有问题,没想到几天后他真给我留言说会检查代码并尽快给我答复,但是至今再无音讯了~
      希望对给我留言的那位有帮助,也希望对其他人有帮助,如果有什么我理解不对的地方,希望大家指正。
      最后再次PS:逻辑分析仪超级有用~



作者: hang    时间: 2012-4-29 00:30
好东西
作者: zhanghao1403    时间: 2012-4-29 09:47
:lol:lol:lol:lol
作者: z1yxyq2008    时间: 2012-4-29 18:23
  我想在10ms以内连续 写入48个扇区,不知打怎么办了{:soso_e129:}
作者: 此时风起    时间: 2012-4-29 19:20
时间是怎么得来的?
作者: superrepus    时间: 2012-4-29 19:37
此时风起 发表于 2012-4-29 19:20
时间是怎么得来的?

上面写了,用逻辑分析仪啊~

作者: wangzhi223    时间: 2012-5-1 11:57
之前被苏大的程序给。。。唉。。。伤心啊。
作者: DOUBLE-L-    时间: 2012-5-7 16:14
强人!!!
作者: 无敌吹风机    时间: 2012-5-11 11:31
/* Reset ESDHC */
    SDHC_SYSCTL = SDHC_SYSCTL_RSTA_MASK | SDHC_SYSCTL_SDCLKFS(0x80);   
    while (SDHC_SYSCTL & SDHC_SYSCTL_RSTA_MASK){};
    程序死在这里了 ,最有可能是什么原因呢 ,
作者: 2009gxs    时间: 2012-5-23 15:58
现在多块读搞定了
多块写还是想楼主的一样 在找原因~~
作者: 我是雨过留痕    时间: 2012-5-25 20:30
无敌吹风机 发表于 2012-5-11 11:31
/* Reset ESDHC */
    SDHC_SYSCTL = SDHC_SYSCTL_RSTA_MASK | SDHC_SYSCTL_SDCLKFS(0x80);   
    whi ...

我遇到了跟你类似的问题,无法对SDHC模块的寄存器进行操作。后来发现我对SIM_SCGC3的SDHC位的写1操作竟然是无效的,“SIM_SCGC3 |= SIM_SCGC3_SDHC_MASK”这一步执行之后SDHC还是0。你现在解决了没有


作者: 冷夜炎帝    时间: 2012-5-27 14:32
我是雨过留痕 发表于 2012-5-25 20:30
我遇到了跟你类似的问题,无法对SDHC模块的寄存器进行操作。后来发现我对SIM_SCGC3的SDHC位的写1操作竟然 ...

同样的问题啊。。。而且我发现ENET、RNGA、FLEXCAN1、SDHC、USBOTG、FLEXCAN0、USBDCD这几个位都是始终为0的。。。不知道是不是还有什么地方忘了处理。。。

作者: 我是雨过留痕    时间: 2012-5-29 23:51
冷夜炎帝 发表于 2012-5-27 14:32
同样的问题啊。。。而且我发现ENET、RNGA、FLEXCAN1、SDHC、USBOTG、FLEXCAN0、USBDCD这几个位都是始终为 ...

别纠结了,单片机有问题,单片机有BUG。这应该是飞思卡尔公司的问题了,片子出厂时可能没有好好测试。个别片子是不能用的,出厂号为1151的大部分片子是可用的,但个别也有问题,我就遇上了。以前的片子出问题的可能更大。

总之,重买片子就行了。我重买了三个,只有一个是可用的(只能说我比较倒霉,1151的大部分是没问题的),其他两个还是有问题,不过我跟卖家说了这个问题,明天给他换货。祝兄好运

作者: lan_tian88    时间: 2012-6-20 18:48
楼主的SDHC代码还搞定啊,我也遇到了类似的问题啊
作者: yandld    时间: 2012-6-22 21:57
我也是单块读OK,多块读不行,卡在这句了  while (0 == (SDHC->PRSSTAT & SDHC_PRSSTAT_BREN_MASK)){}; //等待数据准备好  请问楼主解决了没,? 感谢! 我的QQ是 1453363089
作者: beandy    时间: 2012-9-8 22:51
无敌吹风机 发表于 2012-5-11 11:31
/* Reset ESDHC */
    SDHC_SYSCTL = SDHC_SYSCTL_RSTA_MASK | SDHC_SYSCTL_SDCLKFS(0x80);   
    whi ...

我也遇到同样的问题,请问你是怎么解决的呢?

作者: yhy1992    时间: 2012-9-8 23:51
参考一下。。。。
作者: 993809188    时间: 2012-9-9 08:12

作者: 乐行者    时间: 2012-9-23 20:49
请问楼主解决了吗?我也有相同的问题,就是读写单个块是好用的,读多个快的时候,程序总是停在等待命令完成的那个循环里面,我的工程在IAR里面
作者: jlyjj    时间: 2012-12-10 14:41
LZ是好人,我的邮箱:jlyjj@sina.com
作者: xunaiyang    时间: 2013-3-10 18:17
楼主  可以发一份多块写入的代码吗?
作者: 缘与缘    时间: 2013-3-16 16:19
我现在也被那个苏大的代码给弄得,用苏大地代码单个的扇区可以写进去,但是我就是不能写入动态的图像,求楼主指点!
作者: keepwalking    时间: 2013-3-19 13:11
我用野火的底层也是不行的
作者: dlyt03    时间: 2013-3-19 14:12
学习了!!
作者: 猎鹰2013    时间: 2013-5-14 19:33
开始想搞sd卡
作者: yandld    时间: 2013-9-21 09:22
K60 裸机下多块写我解决了。苏大,FSL源码都有BUG。 32KB文件60MS写入完成(ZNFAT文件系统)




欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2