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位,再发送低四位。

SDIO接口(4)——SDIO通信相关推荐

  1. Linux 下wifi 驱动开发(三)—— SDIO接口WiFi驱动浅析

    SDIO-Wifi模块是基于SDIO接口的符合wifi无线网络标准的嵌入式模块,内置无线网络协议IEEE802.11协议栈以及TCP/IP协议栈,能够实现用户主平台数据通过SDIO口到无线网络之间的转 ...

  2. 【STM32H7】第3章 ThreadX FileX移植SDIO接口SD的基础知识

    论坛原始地址(持续更新):http://www.armbbs.cn/forum.php?mod=viewthread&tid=100749 第3章   ThreadX FileX移植SDIO接 ...

  3. STM32的SD卡与SDIO接口

    STM32的SD卡与SDIO接口 一.SD卡的简介 1.SD卡的主要参数 2.SD卡的SDIO 模式和SPI 模式 3.SD卡寄存器 二.命令和响应 1.SD卡的操作过程   主机(单片机等)发起&q ...

  4. STM32个人笔记-SDIO接口

    目录 SDIO接口常用设备 SD卡的总线拓扑 总线协议 SD卡数据包格式 SD命令 SD命令类型 响应 SD卡操作模式 SD卡系统(包括主机和CD卡)定义了两种操作模式:卡识别模式和数据传输模式. 卡 ...

  5. 关于SDIO接口的wifi和通用SD卡的一些记录

    在使用SDIO接口操作SD卡时,需要CONFIG_MMC_DW该宏,来开启dw_mmc的支持. 在注册platform_device时,指定名字为dw_mmc即可自动执行SD卡相关的初始化进程. 但是 ...

  6. android蓝牙双通道意义,BCM43598双通道SDIO接口双频11ac级蓝牙WiFi

    这是一款可同时双频工作的双通道SDIO接口WiFi支持11ac级双频.蓝牙支持BT5.0标准的蓝牙WiFi二合一模块;其中蓝牙和WiFi共用天线: 芯片:BCM43598; 尺寸:15*13*1.5m ...

  7. SDIO接口(2)——SD卡寄存器

    1.SD卡寄存器 SDIO接口中定义了8个寄存器:OCR,CID,CSD,RCA,DSR,SCR,SSR(仅sdio卡支持),CSR(仅sdio卡支持). 这些寄存器只能通过对应的命令访问. 其中OC ...

  8. SD卡及STM32的SDIO接口相关原理

    SD卡      SD卡(Secure Digital Memory Card)即:安全数码卡,它是在MMC的基础上发展而来,是一种基于半导体快闪记忆器的新一代记忆设备,它被广泛地于便携式装置上使用, ...

  9. 关于Go语言在服务端做Restful接口和socket通信

    转载自: http://xiaorui.cc/2014/10/25/%e5%85%b3%e4%ba%8ego%e8%af%ad%e8%a8%80%e5%9c%a8%e6%9c%8d%e5%8a%a1% ...

  10. C#通过接口与线程通信(捕获线程状态)介绍

    摘要:本文介绍C#通过接口与线程通信(捕获线程状态),并提供简单的示例代码供参考. 提示:本文所提到的线程状态变化,并不是指线程启动.暂停.停止,而是说线程内部状态的迁移.随着软件技术不断发展,用户需 ...

最新文章

  1. HGOI 20181103 题解
  2. python查看是否存在某个变量名
  3. springboot+security框架整合
  4. 数据结构:队列的了解与示例(CPU处理任务的时间)
  5. 计算机启动需输入两次密码,我的电脑开机的时候要输入2次密码,我应当怎么去除?...
  6. HCIE-Security Day38:理论学习:信息安全管理
  7. PSP超强自制系统3.52 M33最新傻瓜安装指南(Dark Alex-OE系统接班人)
  8. STM32F103c8t6点灯
  9. 器件选型-墨水屏(电子纸)介绍
  10. JavaCV音视频开发宝典:JavaCV使用gdigrab方式实现windows录屏(windows屏幕画面抓取/采集,可实现高帧率屏幕截屏、录屏功能)
  11. 如何做华为云服务器迁移?
  12. python 代码转程序_python2代码转python3
  13. NB-IoT技术实战开发 ----- NB-IoT介绍
  14. 【笔记】【WPF编程宝典】 第02章 XAML
  15. SaaS常用指标及计算方法
  16. c语言程序培训,C语言编程培训学习心得
  17. 磁盘损坏无法修复怎么办
  18. 当网红本人成为网红毒瘤:Vtuber的纸片人模式能够破解困局吗?
  19. JVM学习笔记——垃圾回收器
  20. android 返回按钮 黑色,安卓推送10.0,取消返回键,增设暗黑模式,这些改变你知道吗?...

热门文章

  1. jdk工具keytool和jarsigner帮助(jdk keytooljarsigner tool manual)
  2. 弹簧设计计算软件简介
  3. 加粉软件直接把你的银行卡信息给泄露了
  4. [破解]Shark恒破解基础教程笔记
  5. 学习编程必备常用英语单词
  6. TeamTalk部署详细教程(最全最新TeamTalk部署教程助你一次部署成功)
  7. python Django中文文档
  8. 小米5安装googleplay框架
  9. Matlab GUI界面设计
  10. python汉字拼音首字母,python获取一组汉字拼音首字母的方法