SDIO接口(4)——SDIO通信

SDIO通信

SD总线上的通信基于命令和数据位流,这些命令和数据位流由起始位启动,并由停止位终止。
SDIO总线上的设置和控制都是通过命令来实现,SDIO总线上都是HOST端发起请求,然后DEVICE端回应请求,其中请求和应答中会包含数据信息:

命令
命令是启动传输操作的令牌。命令从主机发送到单个卡(寻址命令)或所有连接的卡(广播命令)。命令在CMD线上串行传输。
响应
响应是令牌,令牌是从地址卡或从所有连接的卡(同步)发送到主机的,作为对先前收到的命令的答复。响应在CMD线上串行传输。
数据
数据是双向传送的。可以设置为1线模式,也可以设置为4线模式。数据是通过DAT0-DAT3信号线传输的。

命令

对SD卡的所有操作都是基于命令进行的,不同协议版本的卡的命令略微有所不同,但遵循向前兼容原则。由于SD卡命令众多,切记不要死记硬背,即用即查,SD卡2.0协议的操作命令。

其中,起始位、传输位、CRC7、结束位均是硬件添加,6bit的命令索引、32bit的参数根据场景确定,由软件填写。命令索引就是CMD的编号,如CMD1、CMD52、CMD53等;

command可以分为 应用命令(ACMD)和普通命令(CMD)。在发送应用命令ACMD之前必须先发送CMD55;

格式

所有的commond都有一个固定的48bit长度,在CMD Line上传输的是MSB优先。
在这里插入图片描述
Start: 起始位,值固定为0。
Transmission:传输方向,值为1表示host发出, 0则表示device发出。
Command Index: 代表命令索引,例如CMD0 这项值为0 ,CMD5则这项值为5,它的范围是0-63。
Argument:CMD所附带的一些参数,不同的CMD,这32bit每一位所代表的含义是不一样的。
CRC7:7位CRC校验值,G(x)=x7+x3+1
End:结束位,值固定为1

类型

SDIO应用相关命令和通用命令共有四种不同的类型:
广播指令,无应答(代号bc):发送完此类命令后,并不会有反馈,但操作已经生效。
广播指令,有应答(代号bcr):发送完此类命令后,SD卡会给予反馈。可能是一些寄存器信息,可能是
寻址(点对点)指令(代号ac):发送完此类命令后,只有指定地址的SD卡会给予反馈(地址通过命令请求SD卡发布,是唯一的)。此时DAT线上无数据传输。
寻址(点对点)数据传输指令(adtc):发送完此类命令后,只有制定地址的SD卡会给予反馈。此时DAT线上有数据传输。

在这里插入图片描述
Command 被划分为12类class0-class11,SD card通过读寄存器CSD(card specific data)中12位CCC bit field来确定该card支持哪些classes,SD memory card和sdio card(不包含memory portion)所支持的cmd是不一样的,比如CMD5,CMD52,CMD53只有sdio card支持,而CID,DSR和CSD寄存器在sdio card中不存在所以不支持有这些寄存器相关的读取命令,比如CMD2,CMD4,CMD9,CMD10。

class0(basic commands)

基础命令:用于重置、切换SD卡状态,获取相关信息。
下图为class0(basic commands)

在这里插入图片描述

Class2(Block oriented read commands)

读单个、多个块数据,设置块长度。
在这里插入图片描述

Class4(Block oriented write commands)

写单个、多个块数据,设置块长度。
在这里插入图片描述

Class5(Erase commands)

把对应的块数据擦除.
在这里插入图片描述

Class6(Block oriented write protection commands)

设置、取消对应地址的数据的写保护,可以使其他程序无法写入指定的地址,达到保护目的。用的情况不太多。
在这里插入图片描述

Class7(Lock card commands)

设置、取消锁卡。锁卡后需要密码才能访问SD卡。
在这里插入图片描述

Class8(Application specific commands)

应用特殊命令:CMD55,使用ACMD前必须先发送的命令;CMD56是标准的读、写命令,会读、写一个block的数据。
在这里插入图片描述

Class9(I/O mode commands)

SDIO命令:预留给SDIO设备使用(CMD5也是预留给SDIO设备),在SD卡官方文档中没有说明具体用途
在这里插入图片描述

SD卡专用命令

MMC卡无法使用这些命令,里面包括如设置数据总线位宽,获取SD卡信息(寄存器)。
在这里插入图片描述

CMD52

CMD52命令是IO_RW_DIRECT命令的简称,其命令格式如下

首先第一位为0,表明是起始位,第二位为传输方向,这里为1,代表方向为HOST向DEVICE设备传送,其后6位为命令号,这里是110100b,用十进制表示为52,CMD52的名字也由此而来。紧接着是读写标志位。

然后是操作的功能号。也就是function_number。如果为0则指示为CCCR寄存器组。

紧接着是寄存器地址,用17指示,由于功能寄存器有128K地址,17位正好能寻址。

再下来8位Write data or Staff Bits的意思是说,如果当前为写操作,则为数据,否则8位为填充位。无意义。

最后7位为CRC校验码。最后一位为结束位0。

对于CMD52的Response是48位,命令格式如下:

总结下,CMD52是由HOST发往DEVICE的,它必须有DEVICE返回来的Response。 CMD52不需要占用DAT线,读写的数据是通过CMD52或者Response来传送。每次CMD52只能读或者写一个byte.

CMD53

CMD52每次只能读写一个字节,因为有了CMD53对读写进行了扩展,CMD53允许每次读写多个字节或者多个块(BLOCK)。CMD53的命令格式如下:

第一位是1,为开始位,然后是一位方向位,总是1,代表方向为HOST向DEVICE设备传送,其后6位为命令号,这里是110101b,用十进制表示为53,CMD53的名字也由此而来。

然后是1位的读写标志。接着是3位功能号,这个同CMD52都是相同的。Block_Mode如果1代表是块传输模式,否则为字节传输模式。

OP Code为操作位,如果是0,代表数据往固定的位置读写,如果1代表是地质增量读写。例如,对地址0固定读写16个字节,相当于16次读写的地址0,而对地址0增量读写16个字节,相当于读写0~15地址的数据。

然后是17位的地址寄存器,可以寻址到128K字节的地址,然后是9位的读写的计数,对于字节读取,读写大小就是这个计数,而对于块读写,读写的大小是计数乘以块的大小。

随后的7位为CRC校验码。最后一位为1。

当读写操作是块操作的时候,块的大小是可以通过设置FBR中的相关寄存器来设置。

同CMD52命令不同的是,CMD53没有返回的命令的,这里判断是否DEVICE设备读写完毕是需要驱动里面自己判断的,一般有2个方法:
1.设置相应的读写完毕中断。如果DEVICE设备读写完毕,则对HOST设备发送中断。
2.2.HOST设备主动查询DEVICE设备是否读写完毕,可以通过CMD命令是否有返回来判断是否DEVICE是否读写完毕

响应

响应,也可以称为response,由Device通过CMD线发送给Host,作为对command的响应,传输也是MSB优先,它的格式与commad不同的地方是response格式取决于response的类型,类型不一样,长度也不一样。
SD卡支持5种response type:R1,R1b,R2,R3,R6。
SDIO卡额外支持2种response type:R4,R5。

由Device回复的response分为两种,短响应和长响应。
长响应和短响应的唯一区别就是32bit的参数是128bit位宽,由四个寄存器填充;
响应分为:
在这里插入图片描述
start bit和transmission bit都固定为0;
command index代表命令的索引,表示回复的是哪个Command;
card status用于表示传输过程中card的状态信息,它有32bit/120bit,除去reserved bit以外,其他的bit都代表一个状态标志,用于表示card处理上一个command时的某些状态。
CRC7:7位CRC校验值,G(x)=x7+x3+1
End bit:结束位,值固定为1

除了R3类型之外,所有响应都用CRC7(7位CRC校验码)来保护,所有响应也是以结束位结束“1”。
SD卡有5种响应类型,SDI/O卡增加了的R4,R5类型的响应。

R1(正常响应命令)

在这里插入图片描述

R1b响应

在这里插入图片描述

R2(CID、CSD寄存器)响应

在这里插入图片描述

R3(OCR寄存器)响应

在这里插入图片描述

R4响应

用来回复CMD5,该CMD是给SDIO card专用的,用来查询card中支持的电压域,response则回复支持的电压域。
响应CMD5,并把OCR寄存器作为响应数据.。

R5响应

CMD52是一个读写寄存器的指令,R5用于CMD52的响应。

R6(发布的RCA寄存器响应)响应

在这里插入图片描述

R7(卡接口条件)响应

卡支持的电压信息通过CMD 8的响应发送,Bit[19:16] 表明卡支持的电压范围,卡接受提供的电压范围就返回R7响应。卡会在响应的参数中返回电压范围和检查模式。
在这里插入图片描述

数据

数据可以在主机和SD卡之前传输,通过Data0或者Data0-Data3。
数据传输都是以块(Block)为单位的,为512字节的倍数。数据块后边会紧跟一个crc校验。

数据传输有2种方式:
标准字节(8bit)传输
扩展字节(512b)传输,按比特流传输时,一次传输64个字节。

数据可以从主机到卡,也可以从卡到主机,通过数据线传输,SDIO总线定义了3种数据模式-1bit、4bit、8bit,其中SD卡只用到1bit和4bit模式,SD卡传输数据时使用的是4bit模式。
(1)常规数据模式(1bit模式) :数据通过DATO数据线传输,常规数据按照低字节在前,高字节在后的顺序传输,但是每个字节的数据则是按照高位在前,低位在后的顺序

(2)宽位数据模式(4bit模式):数据通过DAT 03数据线传输,宽位数据传输顺序与常规数据模式类似,也是低字节在前,高字节在后的顺序。由于数据线由1根变为4根,数据由串行改为并行传输,DAT3DAT0依次先发送高4位,再发送低四位。

  • 6
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值