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卡进行响应,比如CMD2,SD card收到之后会回复CID
  • ac - Address command(point-to-point command),没有data transfer,CMD7,CMD16,ACMD6
  • 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 - 返回状态信息,addressed card就是匹配RCA的值的SD card
  • CMD16 - argument中有block length,设置block length,默认用512byte,设置超过512byte,SD card会将错误信息配置到状态寄存器中,block length error bit拉高,表示配置的block length错误
  • 读写操作都是以block为单位进行的,会有设置block length的操作
  • CMD17,18 - single,multiple block transfer, SD Card处于data transfer state,都会携带data address(开始读的地址)
  • 系统是指令驱动的,在设计指令集的时候,存在一些保留的指令空间,方便后期增加指令(CMD19-CMD23)
  • CMD16\17\18都是在Data Transfer state状态下配置的
  • CMD24,25 - single block,multiple block write,都会携带data address,常规容量的SD Card的block length是CMD16设置的,但是高容量的SD Card的block length就是固定的512byte,不使用CMD16设置的block length
  • CMD27 - 对于CSD进行program,改变CSD的值
    CMD指令通常就是对于SD卡中的寄存器进行读写操作并启动一些操作

3. Application Command

  • ACMD6 - 设置Bus的位宽,位宽存在于SCR寄存器中,就是设置其中Bus位宽的域段
  • ACMD13 - 发送SD卡的状态
  • ACMD22 - 设置写的block num,在进行写操作之前,需要将写的block的数量配置好
  • ACMD23 - 设置erase num

4.SD Card state

  • 不同的CMD会使SD Card处于不同的状态
  • 在特定的状态才可以接收一些CMD
  • 在SD Card接收到CMD0的时候,除了处于inactive state以外的所有状态,都会回到IDLE状态

  • ACMD41 - OCR check is ok and Card is not busy --> SD卡从IDLE-->ready
  • ACMD41 - 命令发送之后,SD Card根据OCRcheck和busy情况可以有四种选择

5.Response

  • 通过CMD线进行返回,CMD总是48bit,Response可以是48bit或者是更多bit
  • 起始位0
  • 第二位也是0 - 表示Response,从SD Card发送给SD Host

5.1 Response Width

  • 有几种不同的分类

  • [133:128] - reserved(没有使用)
  • [127:1] - CID和CSD register信息,包含CRC7
  • R3 - 是没有CRC,发送OCR register(包含具体的电压返回和busy状态)
  • R6 - 会返回RCA的值,作为CMD3的返回值,除了返回RCA还会返回一些SD Card的状态
  • R7 - 针对CMD8的响应,会返回4bit电压是不是被接受的状态

6.Card Status

  • SD Card支持两种状态
  • Card Status:执行的命令的状态和错误信息,通过response指示
  • SD Status:包含了SD Card feature信息和应用的spec

  • OUT_OF_RANGE - 接收了CMD,CMD中的argument超出范围
  • ADDRESS_ERROR - 假设block length为512byte,如果出现misaligned transfer就会报错

SD Status

  • SD Card支持两种状态
  • Card Status:执行的命令的状态和错误信息,通过response指示
  • SD Status:包含了SD Card feature信息和应用的spec
  • 返回使用的是Data线,使用的是16bit的CRC
  • ACMD13 - SD Card将卡的信息进行返回,SD Card处于Sending data state
posted @ 2023-06-01 01:52  Icer_Newer  阅读(812)  评论(0编辑  收藏  举报