SDIO接口(4)——SDIO通信

article/2025/10/24 2:41:15

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


http://chatgpt.dhexx.cn/article/ZbIy2XLE.shtml

相关文章

STM32 SDIO详解

目录 01、SDIO简介 02、SDIO特点 03、SDIO时钟 04、SDIO的命令与响应 05、SDIO块数据传输 06、代码 1、SDIO简介 SDIO,全称:Secure Digital Input and Output,即安全数字输入输出接口。它是在SD卡接口的基础上发展而来,它可…

SDIO简介

SDIO,全称: Secure Digital Input and Output ,即安全数字输入输出接口。它是在SD卡接口的基础上发展而来,它可以兼容之前的SD卡,并可以连接SDIO接口设备,比如:蓝牙、WIFI、照相机等。 S…

SDIO接口

一、SDIO简介 SDIO接口是在SD内存卡接口的基础上发展起来的接口,SDIO接口兼容以前的SD内存卡,并且可以连接SDIO接口的设备。 SDIO1.0标准定义了两种类型的SDIO卡: 1.全速的SDIO卡,传输率可以超过100Mbps; 2.低速的…

SDIO接口(1)——SDIO简介

博客系列 SDIO接口(1)——SDIO简介 SDIO接口(2)——SD卡寄存器 SDIO接口(3)——SDIO总线接口 SDIO接口(4)——SDIO通信 1.SDIO简介 SDIO(Secure Digital Input and Output)&#…

STM32——SDIO的学习(驱动SD卡)(理论篇)

目录 一、SD卡简介 1.1历史 1.2 tf卡和SD卡的区别 1.3 mmc,emmc,nand,flash的关系 1.4 SD卡的规格等级 1.4.1按容量分 1.4.2 class等级 1.4.3 UHS总线模式 1.4.4 UHS速度等级 1.4.5 VSC视频速度等级 二、SD卡的内部结构 三、SDIO…

SDIO(安全数字输入输出)/协议

目录 一、SDIO:安全数字输入输出 目录 定义 功能 二、SDIO协议 介绍 信号 协议 一般协议 写协议 读协议 命令 命令格式 命令应答 数据 三、一文搞懂SDIO 四、SDIO简介 五、SD卡引脚定义和图连接 六、SDIO协议简介 七、MMC、SD、TF、SDIO、SDMMC简…

SDIO协议

SDIO协议 1 概述 SDIO,全称:Secure Digital Input and Output ,即安全数字输入输出接口。2 特点 ①与多媒体卡系统规格书版本4.2全兼容。支持三种不同的数据总线模式:1位(默认)、4位和8位。②与较早的多媒体卡系统规格版本全兼容…

硬件接口之SDIO

SDIO接口是在SD内存卡接口的基础上发展起来的接口,SDIO接口兼容以前的SD内存卡,并且可以连接SDIO接口的设备。 参考 SDIO1.0标准定义了两种类型的SDIO卡: 全速的SDIO卡,传输率可以超过100Mbps;   低速的SDIO卡&#…

一文搞懂SDIO

SDIO总线简介 SDIO(Secure Digital Input and Output),即安全数字输入输出接口。它是在SD卡接口的基础上发展而来,它可以兼容之前的SD卡,并可以连接SDIO接口设备,比如:蓝牙、WIFI、GPS等。 什么是SDIO卡 SDIO卡&…

visual svn for visual studio 2019

https://marketplace.visualstudio.com/items?itemNameVisualSVNLimited.VisualSVN-VS2019 参考 https://www.cnblogs.com/Music/p/visualsvn-for-visual-studio-2019.html

visualSVN server的安装和使用

一、安装visualSVN server 服务器端 下载地址:https://www.visualsvn.com/server/download/ 1.在官网中下载visualSVN server服务器端 2.安装下载的visualSVN server,选择默认选项即可 二、安装号visualSVN server后,创建一个代码创库&am…

《SVN系列教程-第三章-VisualSVN的使用》

教程说明 本系列教程目录大纲:《SVN系列教程-目录大纲》 《SVN系列教程-第三章-VisualSVN的使用》 1.1 VisualSVN简介 VisualSVN是Subversion的一款图形化界面工具,提供了图形化方式来辅助我们管理仓库、用户、组信息,另外VisualSVN还帮我…

安装VisualSVN server

链接: 官网链接: https://www.visualsvn.com/ 下载页链接: https://www.visualsvn.com/server/download/ 下载文件链接:https://www.visualsvn.com/files/VisualSVN-Server-3.2.3-x64.msi安装步骤: 这一步是让选择安装…

VS2019安装 VisualSVN Server 插件

选择VisualSVN for Visual Studio 2019 进行安装,网址:https://www.visualsvn.com/visualsvn/download/

VisualSVN的下载与安装

1.在浏览器地址栏中搜索:https://www.visualsvn.com/server/download/,选择对应版本的下载包进行下载 2.安装VisualSVN 点击运行 3.点击Next 4.点击接受,然后点击Next . 5.点击Next 6.点击Next Location是指VisualSVN Server的安装目录&am…

vs2010插件之VisualSVN

一、说说svn 说到svn,大体上说的有两种,服务端:Subversion和VisualSVN-Server,客户端:TortoiseSVN和VisualSVN,现在在开发项目的时候用的代码管理工具也无非那么几种,比如:tfs和svn…

Vs插件 VisualSvn破解

发现问题 之前的项目是使用git,最近有个别项目使用SVN来管理代码,于是使用Vs 的 svn插件,用了一个月,今天突然发现修改代码后居然识别不了,就连我昨天改动的几个页面也识别不出来,开始有点慌,后…

VisualSVN Server的配置和使用方法(项目部署到svn上)

1.为什么要用VisualSVN Server,而不用Subversion? 回答: 因为如果直接使用Subversion,那么在Windows 系统上,要想让它随系统启动,就要封装SVN Server为windws service,还要通过修改配置文件来…

VS中SVN的简介、安装和使用(安装+汉化+使用)

SVN是subversion的缩写,是一个开放源代码的版本控制系统,通过采用分支管理系统的高效管理,简而言之就是用于多个人共同开发同一个项目,实现共享资源,实现最终集中式的管理。 一.安装SVN 1.下载:Downloads…

VisualSVN Server的配置和使用方法

VisualSVN Server搭建SVN服务器 使用原始的SVN和Apache相配合来实现源代码的SVN管理,虽然专业且功能强大,但对于一般个人用户来说未免太过复杂。而使用VisualSVN Server来实现主要的SVN功能则简单得多。 简单的直接看前面,详细的看后面部分。…