Java教程

SD协议-命令响应

本文主要是介绍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协议-命令响应的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!