初学学习SD卡,看了一些资料,个人感觉还是比较难滴!
学习中有几个问题想请教一下。SD卡SPI模式
1.响应。这里有一帖,对响应的类型介绍的比较清楚了。 http://www.openedv.com/posts/list/6825.htm
对于R1响应 (别的不管) 数据响应 数据错误记号
0x01:空闲状态 010:数据接收 (0x05) 0x01:错误
0x02:擦除错误 101:CRC错误,拒绝接收 (0x0b) 0x02:CC错误
0x04:命令错误 110:写错误,拒绝接收 (0x0d) 0x04:ECC错误
0x08:CRC通信错误 0x08:范围错误
0x10:擦除次序错误 0x10:卡被锁了
0x20:地址错误
0x40:参数错误
问题1:响应分为这3种了,SPI模式下有得CMD指令有响应有得没有,那么有响应的指令必定有对应的响应(R1.R2。R3。。)。
没有响应的指令那么读取的放回数据有是什么。(没有就是FF么),数据响应是再“写数据后才会产生的”,数据错误标记是再“读数据后产生的”,
这两句话是否正确!
问题2:在等待数据准备好的这个过程中,我们读取的返回值是“Busy”,尔不是任何响应,且0xff表示空闲,对么?
问题3:CMD命令和ACMD命令有什么区别?
问题4:在发送CMD命令的时候,
例如:
do {
r1=SD_SPI_ReadWriteByte(0xFF);
}while((r1&0X80) && Retry--);
r1是发送CMD命令(6个字节)返回的响应 r1&0X80 为什么是0x80, R1响应的最高位为0,这个值岂不是永远为0,有和意义?
问题5: 在初始化的时候,发送CMD0 返回 “0x01” ,在发CMD8 的时候返回 “0x01”或“0x05”表示V2.0和1.0,
在这里的COM0的“0x01”是否属于R1响应类型,“0x01”在R1响应中表示空闲状态,
尔CMD8命令返回的“0x01”和“0x05” 还算是响应么,这里明显不是响应的意思,
我们说的响应一般是再什么阶段有效,或者是什么状态!
问题6:SD卡在不同的CMD指令时会改变SD卡的状态,总共有几种状态,分别是什么,请列出,这些对么?
MEDIA_BAD_REMOVAL_ACTION:sd卡已经从sd卡插槽拔出,但是挂载点还没解除
MEDIA_EJECT_ACTION:用户想要移除sd卡
MEDIA_MOUNTED_ACTION:sd卡被插入,且已经挂载
MEDIA_REMOVED_ACTION:sd卡被移除
MEDIA_SHARED_ACTION:sd卡作为 USB 大容量存储被共享,挂载被解除
MEDIA_UNMOUNTED_ACTION:sd卡存在,但还没有挂载
MEDIA_SCANNER_STARTED_ACTION:开始扫描
MEDIA_SCANNER_FINISHED_ACTION:扫描完成
问题7:CRC如何取消。用什么指令。取消后的CRC是否就无意义了,可任意填充。
问题8:CMD命令有参数有得有有得没有。
有得话一般都是地址之类的,没有的话可以任意填充,对么。
在SD初始化阶段判断初始化完成时,有个ACMD41的命令。
在V2.0的卡上
SD_SendCmd(CMD41,0x40000000,0X01);//发送CMD41
在V1.0卡上
SD_SendCmd(CMD41,0,0X01);//发送CMD41
这两个参数不一样有什么意义!
问题9:SD_SendCmd(CMD8,0x1AA,0x87)==1)//SD V2.0(判断是V2.0卡)这里的0x1AA和0x87是怎么来的?
希望会的朋友们能给与回答!越详细越好!在此谢过!
 |