智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 16433|回复: 25
打印 上一主题 下一主题

K60使用SDHC写SD卡的经验分享与疑问

  [复制链接]

1

主题

9

帖子

0

精华

高级会员

Rank: 4

积分
581
威望
396
贡献
123
兑换币
40
注册时间
2009-11-17
在线时间
31 小时
跳转到指定楼层
1#
发表于 2012-4-29 00:06:02 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
      近来在论坛上有关于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:逻辑分析仪超级有用~


68

主题

439

帖子

2

精华

版主

Rank: 9Rank: 9Rank: 9

积分
4618
QQ
威望
2342
贡献
1290
兑换币
1175
注册时间
2009-12-24
在线时间
493 小时
26#
发表于 2013-9-21 09:22:45 | 只看该作者
K60 裸机下多块写我解决了。苏大,FSL源码都有BUG。 32KB文件60MS写入完成(ZNFAT文件系统)
回复 支持 反对

使用道具 举报

18

主题

59

帖子

0

精华

高级会员

Rank: 4

积分
976
威望
476
贡献
234
兑换币
262
注册时间
2012-11-7
在线时间
133 小时
25#
发表于 2013-5-14 19:33:43 | 只看该作者
开始想搞sd卡
回复 支持 反对

使用道具 举报

0

主题

1672

帖子

0

精华

杰出人士

Rank: 12Rank: 12Rank: 12

积分
13030
QQ
威望
7128
贡献
3436
兑换币
424
注册时间
2013-1-5
在线时间
1233 小时
24#
发表于 2013-3-19 14:12:37 | 只看该作者
学习了!!
回复 支持 反对

使用道具 举报

0

主题

10

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
410
威望
238
贡献
114
兑换币
79
注册时间
2012-7-29
在线时间
29 小时
毕业学校
厦门大学
23#
发表于 2013-3-19 13:11:05 | 只看该作者
我用野火的底层也是不行的
回复 支持 反对

使用道具 举报

8

主题

61

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1181
威望
586
贡献
267
兑换币
237
注册时间
2012-9-6
在线时间
164 小时
毕业学校
重庆交通大学
22#
发表于 2013-3-16 16:19:45 | 只看该作者
我现在也被那个苏大的代码给弄得,用苏大地代码单个的扇区可以写进去,但是我就是不能写入动态的图像,求楼主指点!
回复 支持 反对

使用道具 举报

2

主题

75

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4700
威望
2198
贡献
1462
兑换币
1149
注册时间
2012-4-6
在线时间
520 小时
21#
发表于 2013-3-10 18:17:30 | 只看该作者
楼主  可以发一份多块写入的代码吗?
回复 支持 反对

使用道具 举报

7

主题

45

帖子

0

精华

高级会员

Rank: 4

积分
512
威望
256
贡献
142
兑换币
163
注册时间
2012-12-10
在线时间
57 小时
毕业学校
海淀大学
20#
发表于 2012-12-10 14:41:38 | 只看该作者
LZ是好人,我的邮箱:jlyjj@sina.com
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

注册会员

Rank: 2

积分
147
威望
114
贡献
29
兑换币
0
注册时间
2012-9-8
在线时间
2 小时
毕业学校
太原理工大学
19#
发表于 2012-9-23 20:49:59 | 只看该作者
请问楼主解决了吗?我也有相同的问题,就是读写单个块是好用的,读多个快的时候,程序总是停在等待命令完成的那个循环里面,我的工程在IAR里面
回复 支持 反对

使用道具 举报

20

主题

155

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3468

优秀会员奖章活跃会员奖章论坛元老奖章

威望
1458
贡献
1388
兑换币
496
注册时间
2011-5-20
在线时间
311 小时
18#
发表于 2012-9-9 08:12:40 | 只看该作者
回复 支持 反对

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-7-8 13:15 , Processed in 0.114026 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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