SD卡命令共分为12类,分别为class0到class11,支持命令集如下
:
Class0
:(卡的识别、初始化等基本命令集)
CMD0:复位SD卡.
CMD1:读OCR寄存器.
CMD9:读CSD寄存器.
CMD10:读CID寄存器.
CMD12:停止读多块时的数据传输
CMD13:读Card_Status寄存器
Class2 (读卡命令集):
CMD16:设置块的长度
CMD17:读单块.
CMD18:读多块,直至主机发送CMD12为止.
Class4(写卡命令集)
:
CMD24:写单块.
CMD25:写多块.
CMD27:写CSD寄存器.
Class5 (擦除卡命令集):
CMD32:设置擦除块的起始地址.
CMD33:设置擦除块的终止地址.
CMD38:擦除所选择的块.
Class6(写保护命令集):
CMD28:设置写保护块的地址.
CMD29:擦除写保护块的地址.
CMD30:
Ask the card for the status of the write
protection bits
class7:卡的锁定,解锁功能命令集
class8:申请特定命令集
。
class10-11:保留
其中 class1,
class3,class9:SPI模式不支持
程序运行照片:
接线方法:
用一根4PIN排线一端插入P1.0-1.3,另一端插入sd卡的接口jp74.2 用两根1
pin线连接SD卡的电源到开发板的电源5V和GND3用一条8PIN的数据排线把CPU部份的P0口(JP51)连接到八路指示灯部份的JP32烧写配套的光盘编程实例的SD卡程序,
8路跑灯开始做加1显示,如果此时拔下SD卡,则8路跑灯停止。
c语言参考程序:
#include "HAL.H"
char buf[16];
//=======================================================
//延时子程序
void delay()
{
unsigned int i;
for(i=0;i<0x8000;i++);
}
//=======================================================
//主程序
char code SST516[3] _at_ 0x003b;
main()
{
delay(); //上电延时
delay();
delay();
delay();
while(1)
{
if(SdInit()) //初始化SD卡
{
SdReadBlock(buf,1024,16);
//从SD卡地址为1024的地方读16字节数据到BUFFER, 最多一次只能读512字节
P0 = buf[0]; //只用第一字节, 送到P0口
buf[0]++; //自加1
delay(); //延时
SdWriteBlock(buf,1024,sizeof(buf)); //写回SD卡
}
delay(); //延时
}
}