c语言 sd卡检测,实验26 SD 卡SPI模式实验

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模式不支持

c语言 sd卡检测,实验26 SD 卡SPI模式实验_第1张图片

程序运行照片:

c语言 sd卡检测,实验26 SD 卡SPI模式实验_第2张图片

接线方法:

用一根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(); //延时

}

}

你可能感兴趣的:(c语言,sd卡检测)