SD卡spi读写流程

1、SD卡的命令格式:

SD卡的指令由6字节(Byte)组成,如下:

Byte1:0 1 x x x x x x(命令号,由指令标志定义,如CMD39为100111即16进制0x27,那么完整的CMD39第一字节为01100111,即0x27+0x40)
Byte2-5:Command Arguments,命令参数,有些命令没有参数
Byte6:前7位为CRC(Cyclic Redundacy Check,循环冗余校验)校验位,最后一位为停止位0

2、SD卡的命令

SD卡命令共分为12类,分别为class0到class11,不同的SDd卡,主控根据其功能,支持不同的命令集 如下:

Class0 :(卡的识别、初始化等基本命令集)  

CMD0 的CRC 是0x95, 其余命令的 CRC 无所谓。

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

 

SD卡中的响应有许多种,R1为标准响应,最为常用。与R1响应相似的还有R1b、R2和R3。R1响应在除SEND_STATUS外其它命令后发送,也是最高位先发送,共1个字节。R1的格式如图7所示。响应说明如下:

0x01:空闲状态   //0表示空闲,1表示忙

0x02:擦除错误

0x04:命令错误

0x08:CRC通信错误

0x10:擦除次序错误

0x20:地址错误

0x40:参数错误

 

MMC_write_Blocks: 

1,初始化,进入SPI模式, 
2,发CMD25命令, 
3,连读2字节,好象读1字节也可以, 
4,发start(发一字节0xfc到sd卡), 
5,发一个数据块到sd卡, 
6,发2字节0xff到sd卡,当作CRC16, 
7,读忙信息,直到不忙, 
8,如果所有数据没有发完,跳到4, 
9,结束,发end(发一字节0xfb到sd卡), 
10,发CMD12命令。 

SMMC_read_Blocks: 

1,初始化,进入SPI模式, 
2,发CMD18命令, 
3,循环读到0xfe字节, 
4,读1个数据块到sd卡, 
5,读2字节CRC16, 
6,如果所有数据没有读完,跳到3, 
7,结束,发CMD12命令。

 

https://www.cnblogs.com/ransn/p/8682088.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值