本文主要是介绍SD协议-命令响应,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1.CRC
- 发送命令或数据的时候,都需要经过芯片的IO口,SD Host和SD卡是通过PCB的走线连接在一起的,SD Host IO --> PCB线 --> SD Card IO,PCB走线容易受到电磁干扰,所以在传递的数据的时候可能出现错误
- 在进行数据或者指令传输的时候,会跟一段数据的编码(CRC),CRC的位宽通常比数据位宽小很多
- 在传输数据和命令的时候,发送端有一个CRC生成器,当数据发送完之后,再传输CRC生成器生成的CRC(CRC-m)
- 在接收端,不断接收数据,一边接收数据,也会一边生成自己的CRC(CRC-s),然后通过比较器cmp比较CRC-m和CRC-s,如果相同,就表示数据没有问题
- 如果CRC-m和CRC-s如果不同,有两种情况,数据传输出现错误或者CRC传输的时候出现错误,就不能使用这一笔数据,接收端会发送信息给发送端,将接收到数据并出错的信息返回给发送端,发送端一般会再次发送一次数据
- CRC的作用主要是为了校验发送的数据是不是传输正确
1.1 CRC生成
- 对于CMD来讲使用的是CRC7,7bitCRC
- CRC生成多项式:CRC7,最高次幂是7,系数为1;其他次幂前的系数是0或者是1
- 最高次幂是多少就有多少个寄存器,data out和data in做异或逻辑,输入到第一个寄存器
- x3之前的系数是1,就在第三个寄存器后面加异或逻辑,哪一项系数是1,就在其所在次幂的寄存器之后加一个异或逻辑
- DATA位宽比较宽,使用的是CRC16
2.Command种类及格式
- bc(Broadcast) - 命令总是从SD Host发送给SD Card,SD Host发送一些命令,所有的SD Card都会收到这个命令
- bcr - Broadcast with response,需要SD卡进行回复
- ac - Address command(point-to-point command),没有data transfer
- actc - Address data transfer command,比如CMD发送出去之后附带有数据返回或者输出
- SD Host在进行读写的时候,只会要求一个SD Card进行读写
- 最高位是1bit,0表示开始
- transmission bit:0表示响应回来的数据,1表示发送的命令
- command index:CMD3,4,5,6,7,具体的命令编号通过[45:40]进行体现
- argument:命令附带的参数,比如电压等信息,体现在这里面
- CRC7:CRC7编码
- 最低位1bit,1结束
2.1 CMD类型
- CMD0 - 所有的SD Card都会回到IDLE状态
- CMD2 - SD Card返回CID
- CMD3 - SD Card返回RCA,SD Host收到RCA之后,会进行存储
- CMD4 - 设置DSR(Driver Stage),设置驱动等级,挂载的SD Card越多或者总线越长,驱动能力需求越强,在standby状态下可以通过CMD4设置驱动能力
- CMD7 - argument中会携带RCA,SD Card收到之后会进行比对RCA值,相同则转到data transfer state
- CMD8 - check电压值
- CMD9 - 给SD A通信就发送A的RCA,返回CSD
- CMD10 - 返回CID值
- CMD12 - stop transmission(用于multiple block transfer)
- CMD13 - 返回状态信息
- CMD17,18 - single,multiple block transfer, SD Card处于data transfer state
- 存在一些保留的指令,方便增加指令
这篇关于SD协议-命令响应的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!