发送命令或数据的时候,都需要经过芯片的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的作用主要是为了校验发送的数据是不是传输正确
对于CMD来讲使用的是CRC7,7bitCRC
CRC生成多项式:CRC7,最高次幂是7,系数为1;其他次幂前的系数是0或者是1
最高次幂是多少就有多少个寄存器,data out和data in做异或逻辑,输入到第一个寄存器
x3之前的系数是1,就在第三个寄存器后面加异或逻辑,哪一项系数是1,就在其所在次幂的寄存器之后加一个异或逻辑
DATA位宽比较宽,使用的是CRC16
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
存在一些保留的指令,方便增加指令
手机扫一扫
移动阅读更方便
你可能感兴趣的文章