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

22e8b78abc3fd0e07b073967381fcd35.png

程序运行照片:

b0f856ecdbc6e548b760d29b96ce6ce9.png

接线方法:

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

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值