[ZLG-ARM] 请教:LPC2138的SSP配置成SPI方式初始化SD卡问题

[复制链接]
3692|4
 楼主| victoryang 发表于 2007-9-5 16:44 | 显示全部楼层 |阅读模式
在LPC2114上用SPI1已经初始化SD卡成功,并可以读写,但在LPC2138上用SSP就不行了(已配置成SPI方式)。<br />问题出在,用CMD58指令读取SD卡状态:支持的电压信息时,返回值为0x00000000,而应该是0x00FF8000;<br />在发送CMD58指令之前的CMD0指令操作返回值正确,为0;<br />请各位大虾赐教!!!也请周公解答一下。<br />谢谢!
 楼主| victoryang 发表于 2007-9-6 08:53 | 显示全部楼层

有时CMD58指令的返回值为0x12,高人请解!

  
zlgARM 发表于 2007-9-7 15:21 | 显示全部楼层

victoryang

您好:&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;根据您的描述,问题可能出在以下两个地方:<br />&nbsp;&nbsp;&nbsp;&nbsp;(1)、SSP配置为SPI时的设置<br />  使用SSP操作SD卡需注意一些协议细节:<br />&nbsp;&nbsp;&nbsp;&nbsp;1、帧长度为8位;<br />&nbsp;&nbsp;&nbsp;&nbsp;2、在SCK时钟上升沿捕获数据;<br />&nbsp;&nbsp;&nbsp;&nbsp;3、数据传输时,MSB(位7)在先。<br />&nbsp;&nbsp;&nbsp;&nbsp;(2)、SD卡操作<br />&nbsp;&nbsp; CMD0指令是没有返回值的,而您却说:“CMD0的返回值正确,为0”。<br /><br />  还有,您说:“CMD58指令的返回值为0x12”。使用SPI总线操作SD卡时,CMD58指令的返回值为40位(8位状态位,32位数据位),不知道您指的是哪个值?
 楼主| victoryang 发表于 2007-9-10 14:56 | 显示全部楼层

对不起,我没说清楚!

与SD卡通讯的程序,我是参考周立功关于SD卡的例程,我所说的返回值是函数的返回值,0表示操作成功,0x12表示SD卡回复状态错误。<br />现在已经确定,之前的操作不成功是SSP时钟时序不对,设置SPHA&nbsp;=&nbsp;0,SPOL&nbsp;=&nbsp;0可用。<br />又遇到的新问题是,初始化完SSP以后,读扇区时错误?好像还是读时序有问题。<br />我现在在LPC2138下用SSP调SD卡,在LPC2114&nbsp;SPI下已经调试成功!在LPC2114下SPI设置中,SPHA&nbsp;=&nbsp;0;&nbsp;SPOL&nbsp;=&nbsp;1。<br />谢谢!<br />
USER32768 发表于 2008-11-8 21:07 | 显示全部楼层

典型的时钟太高.把时钟调低就没事了.

LPC2148&nbsp;SSP操作SD卡时钟不要太高,问题在他的IO驱动能力不够,也可以开关时间太长.(我试了3个LPC2148读写在PLD上可以高速操作的SD都这样,后面把时钟降低就没事了)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

48

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部