SDIO

来源:互联网 发布:淘宝怎么做起来 编辑:程序博客网 时间:2024/05/09 00:58

SDIO   

      SDIO 卡是在 SD 内存卡接口的基础上发展起来的接口,SDIO 接口兼容以前的SD 内存卡,并且可以连接SDIO 接口的设备,目前根据SDIO 协议的SPEC SDIO 接口支持的设备总类有蓝牙,网卡,电视卡等。

      SDIO 协议是由 SD 卡的协议演化升级而来的,很多地方保留了SD 卡的读写协议,同时SDIO 协议又在SD 卡协议之上添加了CMD52 CMD53命令。由于这个, SDIO SD卡规范间的一个重要区别是增加了低速标准,低速卡的目标应用是以最小的硬件开始来支持低速I/O 能力。低速卡支持类似调制解调器, 条形码扫描仪和GPS 接收器等应用。高速卡支持网卡,电视卡还有“组合”卡等,组合卡指的是存储器+SDIO

      SDIO SD 卡的SPEC 间的又一个重要区别是增加了低速标准。SDIO 卡只需要SPI 1 SD 传输模式。低速卡的目标应用是以最小的硬件开支来支持低速I/O 能力,低速卡支持类似MODEM ,条形扫描仪和 GPS接收器等应用。对组合卡来说,全速和 4BIT操作对卡内存储器和 SDIO部分都是强制要求的。

      在非组合卡的 SDIO 设备里,其最高速度要只有达到25M ,而组合卡的最高速度同SD 卡的最高速度一样,要高于25M

 

SDIO  总线 

      SDIO 总线和USB 总线类似,SDIO 总线也有两端,其中一端是主机(HOST )端,另一端是设备端(DEVICE ),采用 HOST- DEVICE这样的设计是为了简化 DEVICE的设计,所有的通信都是由 HOST端发出命令开始的。在 DEVICE端只要能解溪 HOST的命令,就可以同 HOST进行通信了。

      SDIO HOST 可以连接多个DEVICE ,如下图所示 :

 

 

      这个是同 SD 的总线一样的, 其中有如下的几种信号

1.       CLK信号:HOST DEVICE的时钟信号 .

2.       CMD信号:双向的信号,用于传送命令和反应。

3.       DAT0-DAT3信号: 四条用于传送的数据线。

4.       VDD信号: 电源信号。

5.       VSS1VSS2: 电源地信号。

SDIO 总线定义中,DAT1 信号线复用为中断线。在 SDIO 1BIT模式下 DAT0用来传输数据, DAT1用作中断线。在 SDIO 4BIT模式下 DAT0-DAT3用来传输数据,其中 DAT1复用作中断线。

 

SDIO  命令: 

      SDIO 总线上都是 HOST 端发起请求,然后DEVICE 端回应请求。其中请求和回应中会数据信息。

1.       Command:用于开始传输的命令,是由HOST 端发往DEVICE 端的。其中命令是通过 CMD信号线传送的。

2.       Response:回应是DEVICE 返回的 HOST的命令,作为 Command的回应。也是通过

CMD线传送的。

3.       Data:数据是双向的传送的。可以设置为1 线模式,也可以设置为4 线模式。数据是通过DAT0-DAT3 信号线传输的。

  SDIO 的每次操作都是由HOST CMD 线上发起一个CMD ,对于有的CMD DEVICE 需要返回 Response,有的则不需要。

      对于读命令,首先 HOST 会向DEVICE 发送命令,紧接着 DEVICE会返回一个握手信号,此时,当 HOST收到回应的握手信号后,会将数据放在 4位的数据线上,在传送数据的同时会跟随着 CRC 校验码。当整个读传送完毕后,HOST 会再次发送一个命令,通知DEVICE 操作完毕, DEVICE同时会返回一个响应。

      对于写命令,首先 HOST 会向DEVICE 发送命令,紧接着 DEVICE会返回一个握手信号,此时,当 HOST收到回应的握手信号后,会将数据放在 4位的数据线上,在传送数据的同时会跟随着 CRC 校验码。当整个写传送完毕后,HOST 会再次发送一个命令,通知DEVICE 操作完毕, DEVICE同时会返回一个响应。

 

SDIO  的寄存器: 

     SDIO卡的设备驱动80%的任务就是操作 SDIO卡上的有关寄存器。SDIO卡最多允许有 7个功能( function ,这个同其功能号是对应的(0 7 ,每个功能都对应一个128K字节大小的寄存器,这个见下面的图。功能号之所以取值范围是1~7,而没有包含 0,是因为功能 0并不代表真正的功能,而代表CIA寄存器,即 Common I/O Area,这个纪录着 SDIO卡的一些基本信息和特性,并且可以改写这些寄存器。其中地址0x1000~0x17fff SDIO卡的 CIS区域,就是基本信息区域,Common Information Structure。初始化的时候读取并配对SDIO设备。

      这些寄存器的详细分区已经其对应的功能,在开发过程中都是需要仔细研读的,这些都在协议的SPEC 中都有详细说明,这里就不在罗索了。 

 

CMD52  命令: 

SDIO设备为了和 SD内存卡兼容, SD卡所有 Command Response完全兼容,同时加入了一些新的 Command Response。例如,初始化 SD内存卡使用 ACMD41,而 SDIO卡设备则用 CMD5通知 DEVICE进行初始化。

但二者最重要的区别是,SDIO 卡比SD 内存卡多了CMD52 CMD53命令,这两个命令可以方便的访问某个功能的某个地址寄存器。

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.HOST  设备主动查询  DEVICE  设备是否读写完毕,可以通过  CMD  命令是否有返回来判断是否  DEVICE  是否读写完毕。