目录
一、SD卡简介
1.1历史
MMC(Multi-Media Card,多媒体卡)由西门子公司Siemens和SanDisk于1997年推出。由于它的封装技术较为先进,7针引脚,体积小、重量轻、非常符合移动存储的需要。MMC支持1bit模式,20MHz时钟,采用总线结构。
MMC卡在SM卡基础上诞生替代了东芝开发的SM卡。不久的几年后,在MMC卡基础上研发的SD卡又替代了MMC卡,成为了几乎一切便携式数码产品的存储卡格式。
SD卡结构
SD卡是由松下电器、东芝和SanDisk联合推出,1999年8月发布。SD卡的数据传送和物理规范由MMC发展而来,大小和MMC卡差不多,尺寸为32mmx24mmx2.1mm。长宽和MMC卡一样,只是比MMC卡厚了0.7mm,以容纳更大容量的存贮单元。与MMC卡保持着向上的兼容,MMC卡可以被新的SD设备存取,兼容性则取决于应用软件,但SD卡却不可以被MMC设备存取。(SD卡外型采用了与MMC卡厚度一样的导轨式设计,以使SD设备可以适合MMC卡)。
SD卡是东芝在MMC卡技术中加入加密技术硬件而成,由于MMC卡可能会较易让使用者复制数码音乐,东芝便加入这些技术希望令音乐业界安心。类似的技术包括索尼的MagicGate,理论上加密技术可引入一些数码版权管理措施,但这功能甚少被应用。
SD系列记忆卡都是SanDisk完成测试后送交SD卡协会认证规格,因此几乎所有专利权都掌控在SanDisk手上。不过在2007年,因为NAND市场的动荡SanDisk变卖了家当,给外界一种即将消失错觉。失去了很多自己的核心技术和专利,最重要的NAND工厂都卖给了美光。没多久,重新吸引外资换了脸面的SanDisk,无心再研发Flash技术和建立新厂。而是注资东芝与东芝合作,使用东芝的制造工艺和技术生产芯片。之后东芝试产的新产品都会有两个品牌的LOGO。SD卡也不例外,两个品牌的产品拥有着很多相似之处,这两个牌子也是SD卡市场的主要供货来源。
希望未来可以有国产的规则,而不用在去遵守他们的规则。
1.2 tf卡和SD卡的区别
1、定义不同。SD卡是一个完全开放的标准(系统),多用于MP3、数码摄像机、数码相机、电子图书、AV器材等等TF卡又称microSD,是一种极细小的快闪存储器卡,由著名的存储厂商闪迪(SanDisk)公司发明创立。
2、外观大小不同。TF卡又称T-Flash卡,全名: TransFLash,又名:MicroSD,由摩托罗拉与SANDISK共同研发,是目前一种超小型微型卡,其大小仅为11x15x1MM,约为SD卡的1/4。
3、产品不同。目前基本所有的手机都使用的是TF卡,这主要是由于TF卡体积更小,更利于节省空间,而一般传统的SD卡则主要用于用于MP3、数码摄像机、数码相机、电子图书、AV器材等,不过TF卡也可以安装卡套充当SD卡来使用,SD卡由于体积较大,不能使用TF卡插槽。
4、适用范围不同。TF卡是功能机必搭储存卡,且体积极小,所以主要应用于手机。随着TF卡存储容量的提升,它也量慢开始在GPS设备、便携式音乐播放器和一些闪存盘中得到使用。SD卡不仅体积小,而且数据传输速度快、可热插拔,所以在便携式装置领域的应用比较广泛。
5、安全性能不同。一般来说,市面上的SD卡在卡的侧面会设置一个安全锁定的读写保护开关,可以有效地保护SD卡中的各类数据和信息,防止误删,安全性好。而TF卡由于体积比较小,就不具备这个功能,相对来说安全性不如SD卡。
6、原理不同。TF卡全称为Trans-flashCard,又称MicroSD卡,是一种极细小的快闪存储器卡,俗称小卡。简单来说可以看作是一种记忆卡,使用了相对来说比较新的NANDMLC技术。SD卡全称为SecureDigitalMemoryCard,是一种基于半导体快闪记忆器的记忆设备,被发明出来的时间比较早,俗称大卡,是一种发展时间比较久的内存卡。
现在使用他们其实方法都是一样的,只是他们的引脚数量和体积有所不同加上,大卡的安全性高点。
1.3 mmc,emmc,nand,flash的关系
核心都是flash,nand是一种flash,但是它的接口很恶心,所以在上面封装了一下,出现了emmc接口标准,但是emmc不是单纯的flash,他是有一块关系闪存的IC在里面的,这俩加一起构成了我们现在启动单片机所选择模式中的emmc模式。
mmc和他们不同,是一种对卡形状的规范。它规定了卡的形状,尺寸和通信协议。
1.4 SD卡的规格等级
存储卡有很多种类,CF卡、记忆棒、SD卡、XD卡、MMC卡、MS卡、TF卡、MicroSD卡等。平时最常见的有SD卡和MicroSD卡两种, SD卡和MicroSD只是两张卡的大小不同,规格版本是完全相同的,均由SD卡协会推出。
SD卡有不少规范,常用包含存储空间和存储速度两种,厂商会把满足的规范的图标印在卡面上,所以通过卡上有的规格,就能很快判断出这张卡的容量、类型和最低速度,甚至适用场景。这样,在购买存储卡时便能够自己判断出是否为自己需要的卡。MicroSD卡的规范和SD卡相同。
1.4.1按容量分
这几种类别表示卡的容量大小:
SD:早期版本现在已经基本停用,最高容量2GB,分区格式为FAT12(FAT)或FAT16。
SDHC:技术很成熟的种类,容量为4GB-32GB,分区格式为FAT32。
SDXC:目前市场存储卡的主流,容量为64GB-2TB,分区格式为exFAT。
SDUC:新推出的版本,容量为2TB-128TB,分区格式为exFAT。
这些类别都是向下兼容的,例如使用SDXC的设备,一般也能使用SDHC。分类主要是因为使用的文件系统有区别。
1.4.2 class等级
存储卡的Class等级主要是标识存储卡的最低写入速度,Class后面的数字就代表了存储卡最低写入速度:
Class 2 2MB/s
Class 4 4MB/s
Class 6 6MB/s
Class 10 10MB/s
存储卡的“最低写入速度”一般是最重要的,表示存储卡稳定使用的速度。Class等级越高传输速度越快,现在比较常见的都是速度最快的Class 10级别,简称C10。速度更低的C6、C4、C2的存储卡早已退出市场。
1.4.3 UHS总线模式
UHS(Ultra High Speed)超高速等级为全新的总线模式,目前有UHS-I、UHS-II、UHS-III三个等级划分,I的个数越多,接口支持的速度越高,目前UHS-III的存储卡市场上很少见。
支持UHS-I的SD卡最大读取速度可达104MB/s
支持UHS-II的SD卡最大读取速度可达312MB/s
支持UHS-III的SD卡最大读取速度可达624MB/s
SD Express I,最大读取速度可达985MB/s
实现UHS标准传输速度需要设备支持,高版本向下兼容低版本,不支持该标准可以兼容降速为普通存储卡使用。
1.4.4 UHS速度等级
UHS速度等级也是标识存储卡的最低写入速度,日常使用U1(最低写入速度10M/S)和U3(最低写入速度30M/S)的等级标识最低写入速度。
U1 10MB/s
U3 30MB/s
UHS速度等级在存储卡上的标志为字母U,中间包含等级的数字。此处的数字和UHS总线模式无关,即UHS-I的存储卡,也能达到U3的速度等级。
1.4.5 VSC视频速度等级
VSC(Video Speed Class)视频速度等级,是SD协会针对视频拍摄应用制定的视频速度等级,以识别字母V加上最低写入速度值的数字构成标识。V后面的数字为几,就代表最低写入速度为多少,即:V10最低写入速度10M/S;V30最低写入速度30M/S。VSC视频速度等级有如下几种:
V6 6MB/s
V10 10MB/s
V30 30MB/s
V60 60MB/s
V90 90MB/s
如果想支持拍摄4K高清视频,一般需要V30或者V60等级的存储卡。
二、SD卡的内部结构
上面两图描述了SDIO模式下的两种存储卡的接线
注意上下的图片中的箭头方向。
下面再看看SPI方式
后续我会录制一个讲解视频的。
到时候放到评论区
三、SDIO的学习
3.1 SDIO的主要功能
SD/SDIO MMC卡主机模块(SDIO)在AHB外设总线和多媒体卡(MMC)、SD存储卡、SDIO卡和 CE-ATA设备间提供了操作接口。
多媒体卡系统规格书由MMCA技术委员会发布,可以在多媒体卡协会的网站上(www.mmca.org) 获得。
CE-ATA系统规格书可以在CE-ATA工作组的网站上(www.ce-ata.org)获得。
SDIO的主要功能如下:
● 与多媒体卡系统规格书版本4.2全兼容。支持三种不同的数据总线模式:1位(默认)、4位和8 位。
● 与较早的多媒体卡系统规格版本全兼容(向前兼容)。
● 与SD存储卡规格版本2.0全兼容。
● 与SD I/O卡规格版本2.0全兼容:支持良种不同的数据总线模式:1位(默认)和4位。
● 完全支持CE-ATA功能(与CE-ATA数字协议版本1.1全兼容)。
● 8位总线模式下数据传输速率可达48MHz。
● 数据和命令输出使能信号,用于控制外部双向驱动器。
注:
1.SDIO没有SPI兼容的通信模式
2.在多媒体卡系统规格书版本2.11中,定义SD存储卡协议是多媒体卡协议的超集。只支持I/O 模式的SD卡或复合卡中的I/O部分不能支持SD存储设备中很多需要的命令,这里有些命令在SD I/O设备中不起作用,如擦除命令,因此SDIO不支持这些命令。另外,SD存储卡和SD I/O卡中 有些命令是不同的,SDIO也不支持这些命令。细节可以参考SD I/O卡规格书版本1.0。使用现有 的MMC命令机制,在MMC接口上可以实现CE-ATA的支持 。SDIO接口的电气和信号定义详见 MMC参考资料。 多媒体卡/SD总线将所有卡与控制器相连。 当前版本的SDIO在同一时间里只能支持一个SD/SDIO/MMC 4.2卡,但可以支持多个MMC版本 4.1或以前版本的卡。
3.2 SDIO总线拓扑
总线上的通信是通过传送命令和数据实现。
在多媒体卡/SD/SD I/O总线上的基本操作是命令/响应结构,这样的总线操作在命令或总线机制
下实现信息交换;另外,某些操作还具有数据令牌。
在SD/SDIO存储器卡上传送的数据是以数据块的形式传输;在MMC上传送的数据是以数据块或
数据流的形式传输;在CE-ATA设备上传送的数据也是以数据块的形式传输。
注: 当有Busy(繁忙)信号时, SDIO(SDIO_D0被拉低)将不会发送任何数据
3.3 SDIO功能描述
SDIO包含2个部分:
● SDIO适配器模块:实现所有MMC/SD/SD I/O卡的相关功能,如时钟的产生、命令和数据的
传送。
● AHB总线接口:操作SDIO适配器模块中的寄存器,并产生中断和DMA请求信号。
复位后默认情况下SDIO_D0用于数据传输。初始化后主机可以改变数据总线的宽度。
如果一个多媒体卡接到了总线上,则SDIO_D0、 SDIO_D[3:0]或SDIO_D[7:0]可以用于数据传
输。 MMC版本V3.31和之前版本的协议只支持1位数据线,所以只能用SDIO_D0。
如 果 一 个 SD 或 SD I/O 卡 接 到 了 总 线 上 , 可 以 通 过 主 机 配 置 数 据 传 输 使 用 SDIO_D0 或
SDIO_D[3:0]。所有的数据线都工作在推挽模式。
SDIO_CMD有两种操作模式:
● 用于初始化时的开路模式(仅用于MMC版本V3.31或之前版本)
● 用于命令传输的推挽模式(SD/SD I/O卡和MMC V4.2在初始化时也使用推挽驱动)
SDIO_CK是卡的时钟:每个时钟周期在命令和数据线上传输1位命令或数据。对于多媒体卡
V3.31协议,时钟频率可以在0MHz至20MHz间变化;对于多媒体卡V4.0/4.2协议,时钟频率可
以在0MHz至48MHz间变化;对于SD或SD I/O卡,时钟频率可以在0MHz至25MHz间变化。
SDIO使用两个时钟信号:
● SDIO适配器时钟(SDIOCLK=HCLK)
● AHB总线时钟(HCLK/2)
下表适用于多媒体卡/SD/SD I/O卡总线:
3.3.1 SDIO适配器
SDIO适配器是多媒体/加密数字存储卡总线的主设备(主机),用于连接一组多媒体卡或加密数字
存储卡,它包含以下5个部分:
● 适配器寄存器模块
● 控制单元
● 命令通道
● 数据通道
● 数据FIFO
注: 适配器寄存器和FIFO使用AHB总线一侧的时钟(HCLK/2),控制单元、命令通道和数据通道使用。
SDIO适配器一侧的时钟(SDIOCLK)。
适配器寄存器模块
适配器寄存器模块包含所有系统寄存器。该模块还产生清除多媒体卡中静态标记的信号,当在
SDIO清除寄存器中的相应位写’1’时会产生清除信号。
控制单元
控制单元包含电源管理功能和为存储器卡提供的时钟分频。
共有三种电源阶段:
● 电源关闭
● 电源启动
● 电源开
上图为控制单元的框图,有电源管理和时钟管理子单元。
在电源关闭和电源启动阶段,电源管理子单元会关闭卡总线上的输出信号。
时钟管理子单元产生和控制SDIO_CK信号。 SDIO_CK输出可以使用时钟分频或时钟旁路模式。
下述情况下没有时钟输出:
● 复位后
● 在电源关闭和电源启动阶段
● 当启动了省电模式并且卡总线处于空闲状态(命令通道和数据通道子单元进入空闲阶段后的8
个时钟周期)
命令通道
命令通道单元向卡发送命令并从卡接收响应。
● 命令通道状态机(CPSM)
─ 当写入命令寄存器并设置了使能位,开始发送命令。命令发送完成时,命令通道状态机
(CPSM)设置状态标志并在不需要响应时进入空闲状态(见下图)。当收到响应后,接收到
的CRC码将会与内部产生的CRC码比较,然后设置相应的状态标志。
当进入等待(Wait)状态时,命令定时器开始运行;当CPSM进入接收(Receive)状态之前,产生了超时,则设置超时标志并进入空闲(Idle)状态。
注: 命令超时固定为64个SDIO_CK时钟周期。
如果在命令寄存器设置了中断位,则关闭定时器, CPSM等待某一个卡发出的中断请求。如果命令寄存器中设置挂起位, CPSM进入挂起(Pend)状态并等待数据通道子单元发出的CmdPend
信号,在检测到CmdPend信号时, CPSM进入发送(Send)状态,这将触发数据计数器发送停止
命令的功能。
注: CPSM保持在空闲状态至少8个SDIO_CK周期,以满足NCC和NRC时序限制。 NCC是两个主机命令间的最小间隔; NRC是主机命令与卡响应之间的最小间隔。
● 命令格式
─ 命令:命令是用于开始一项操作。主机向一个指定的卡或所有的卡发出带地址的命令或广
播命令(广播命令只适合于MMC V3.31或之前的版本)。命令在CMD线上串行传送。所有
命令的长度固定为48位,下表给出了多媒体卡、 SD存储卡和SDIO卡上一般的命令格式。
CE-ATA命令是MMC V4.2命令的扩充,所以具有相同的格式。
命令通道操作于半双工模式,这样命令和响应可以分别发送和接收。如果CPSM不处在发
送状态, SDIO_CMD输出处于高阻状态,如图189所示。 SDIO_CMD上的数据与
SDIO_CK的上升沿同步。
响应:响应是由一个被指定地址的卡发送到主机,对于MMC V3.31或以前版本所有的卡
同时发送响应;响应是对先前接收到命令的一个应答。响应在CMD线上串行传送。
SDIO支持2种响应类型, 2种类型都有CRC错误检测:
● 48位短响应
● 136位长响应
注: 如果响应不包含CRC(如CMD1的响应),设备驱动应该忽略CRC失败状态
命令寄存器包含命令索引(发至卡的6位)和命令类型;命令本身决定了是否需要响应和响应的类
型、 48位还是136位(见20.9.4节)。命令通道中的状态标志示于下表:
CRC发生器计算CRC码之前所有位的CRC校验和,包括开始位、发送位、命令索引和命令参数
(或卡状态)。对于长响应格式, CRC校验和计算的是CID或CSD的前120位;注意,长响应格式
中的开始位、传输位和6个保留位不参与CRC计算。
CRC校验和是一个7位的数值:
CRC[6:0] = 余数[(M(x) * x7) / G(x)]
G(x) = x7 + x3 + 1
M(x) = (开始位) * x39 + … + (CRC前的最后一位) * x0, 或
M(x) = (开始位) * x119 + … + (CRC前的最后一位) * x0, 或
数据通道
数据通道子单元在主机与卡之间传输数据。下图是数据通道的框图
在时钟控制寄存器中可以配置卡的数据总线宽度。如果选择了4位总线模式,则每个时钟周期四
条数据信号线(SDIO_D[3:0])上将传输4位数据;如果选择了8位总线模式,则每个时钟周期八条
数据信号线(SDIO_D[7:0])上将传输8位数据;如果没有选择宽总线模式,则每个时钟周期只在
SDIO_D0上传输1位数据。
根据传输的方向(发送或接收),使能时数据通道状态机(DPSM)将进入Wait_S或Wait_R状态:
● 发送: DPSM进入Wait_S状态。如果发送FIFO中有数据,则DPSM进入发送状态,同时数
据通道子单元开始向卡发送数据。
● 接收: DPSM进入Wait_R状态并等待开始位;当收到开始位时, DPSM进入接收状态,同
时数据通道子单元开始从卡接收数据。
数据通道状态机(DPSM)
DPSM工作在SDIO_CK频率,卡总线信号与SDIO_CK的上升沿同步。 DPSM有6个状态,如下图所示
● 空闲(Idle):数据通道不工作, SDIO_D[7:0]输出处于高阻状态。当写入数据控制寄存器并设
置使能位时, DPSM为数据计数器加载新的数值,并依据数据方向位进入Wait_S或Wait_R
状态。
● Wait_R:如果数据计数器等于0,当接收FIFO为空时DPSM进入到空闲(Idle)状态。如果数
据计数器不等于0, DPSM等待SDIO_D上的开始位。如果DPSM在超时之前接收到一个开
始位,它会进入接收(Receive)状态并加载数据块计数器。如果DPSM在检测到一个开始位
前出现超时,或发生开始位错误, DPSM将进入空闲状态并设置超时状态标志。
● 接收(Receive):接收到的串行数据被组合为字节并写入数据FIFO。根据数据控制寄存器中
传输模式位的设置,数据传输模式可以是块传输或流传输:
─ 在块模式下,当数据块计数器达到0时, DPSM等待接收CRC码,如果接收到的代码与内
部产生的CRC码匹配,则DPSM进入Wait_R状态,否则设置CRC失败状态标志同时
DPSM进入到空闲状态。
─ 在流模式下,当数据计数器不为0时, DPSM接收数据;当计数器为0时,将移位寄存器中
的剩余数据写入数据FIFO,同时DPSM进入Wait_R状态。
如果产生了FIFO上溢错误, DPSM设置FIFO的错误标志并进入空闲状态。
● Wait_S:如果数据计数器为0, DPSM进入空闲状态;否则DPSM等待数据FIFO空标志消失
后,进入发送状态。
注: DPSM会在Wait_S状态保持至少2个时钟周期,以满足NWR的时序要求, NWR是接收到卡的响应
至主机开始数据传输的间隔。
● 发送(Send): DPSM开始发送数据到卡设备。根据数据控制寄存器中传输模式位的设置,数
据传输模式可以是块传输或流传输:
在块模式下,当数据块计数器达到0时, DPSM发送内部产生的CRC码,然后是结束位,并进入繁忙状态。
在流模式下,当使能位为高同时数据计数器不为0时, DPSM向卡设备发送数据,然后进入空闲状态。
如果产生了FIFO下溢错误, DPSM设置FIFO的错误标志并进入空闲状态。
● 繁忙(Busy): DPSM等待CRC状态标志:
如果没有接收到正确的CRC状态,则DPSM进入空闲状态并设置CRC失败状态标志。
如果接收到正确的CRC状态,则当SDIO_D0不为低时(卡不繁忙)DPSM进入Wait_S状 态。
当DPSM处于繁忙状态时发生了超时, DPSM则设置数据超时标志并进入空闲状态。
当DPSM处于Wait_R或繁忙状态时,数据定时器被使能,并能够产生数据超时错误:
─ 发送数据时,如果DPSM处于繁忙状态超过程序设置的超时间隔,则产生超时。
接收数据时,如果未收完所有数据,并且DPSM处于Wait_R状态超过程序设置的超时间 隔,则产生超时。
● 数据:数据可以从主机传送到卡,也可以反向传输。数据在数据线上传输。数据存储在一
个32字的FIFO中,每个字为32位宽。
数据FIFO
数据FIFO(先进先出)子单元是一个具有发送和接收单元的数据缓冲区。
FIFO包含一个每字32位宽、共32个字的数据缓冲区,和发送与接收电路。因为数据FIFO工作在
AHB时钟区域(HCLK/2),所有与SDIO时钟区域(SDIOCLK)连接的信号都进行了重新同步。
依据TXACT和RXACT标志,可以关闭FIFO、使能发送或使能接收。 TXACT和RXACT由数据通
道子单元设置而且是互斥的:
─ 当TXACT有效时,发送FIFO代表发送电路和数据缓冲区
─ 当RXACT有效时,接收FIFO代表接收电路和数据缓冲区
● 发送FIFO:当使能了SDIO的发送功能,数据可以通过AHB接口写入发送FIFO。
发送FIFO有32个连续的地址。发送FIFO中有一个数据输出寄存器,包含读指针指向的数据
字。当数据通道子单元装填了移位寄存器后,它移动读指针至下个数据并传输出数据。
如果未使能发送FIFO,所有的状态标志均处于无效状态。当发送数据时,数据通道子单元
设置TXACT为有效。
● 接收FIFO:当数据通道子单元接收到一个数据字,它会把数据写入FIFO,写操作结束后,写指针自动加一;在另一端,有一个读指针始终指向FIFO中的当前数据。如果关闭了接收FIFO,所有的状态标志会被清除,读写指针也被复位。在接收到数据时数据通道子单元设置RXACT。下表列出了接收FIFO的状态标志。通过32个连续的地址可以访问接收FIFO。
3.3.2 SDIO AHB接口
AHB接口产生中断和DMA请求,并访问SDIO接口寄存器和数据FIFO。它包含一个数据通道、
寄存器译码器和中断/DMA控制逻辑。
SDIO中断
当至少有一个选中的状态标志为高时,中断控制逻辑产生中断请求。有一个屏蔽寄存器用于选
择可以产生中断的条件,如果设置了相应的屏蔽标志,则对应的状态标志可以产生中断。
SDIO/DMA接口:在SDIO和存储器之间数据传输的过程
在下面的例子中,主机控制器使用CMD24(WRITE_BLOCK)从主机传送512字节到MMC卡,
DMA控制器用于从存储器向SDIO的FIFO填充数据。
-
执行卡识别过程
-
提高SDIO_CK频率
-
发送CMD7命令选择卡
-
按下述步骤配置DMA2:
a) 使能DMA2控制器并清除所有的中断标志位
b) 设置DMA2通道4的源地址寄存器为存储器缓冲区的基地址, DMA2通道4的目标地址寄
存器为SDIO_FIFO寄存器的地址
c) 设置DMA2通道4控制寄存器(存储器递增,非外设递增,外设和源的数据宽度为字宽度)
d) 使能DMA2通道4 -
发送CMD24(WRITE_BLOCK),操作如下:
a) 设置SDIO数据长度寄存器(SDIO数据时钟寄存器应该在执行卡识别过程之前设置好)
b) 设置SDIO参数寄存器为卡中需要传送数据的地址
c) 设置SDIO命令寄存器: CmdIndex置为24(WRITE_BLOCK); WaitRest置为1(SDIO卡
主机等待响应); CPSMEN置为1(使能SDIO卡主机发送命令),保持其它域为他们的复位值。
d) 等待SDIO_STA[6]=CMDREND中断,然后设置SDIO数据寄存器: DTEN置为1(使能
SDIO卡主机发送数据); DTDIR置为0(控制器至卡方向); DTMODE置为0(块数据传
送); DMAEN置为1(使能DMA); DBLOCKSIZE置为9(512字节);其它域不用设置。
e) 等待SDIO_STA[10]=DBCKEND -
查询DMA通道的使能状态寄存器,确认没有通道仍处于使能状态
3.4卡功能描述
3.4.1卡识别模式
在卡识别模式,主机复位所有的卡、检测操作电压范围、识别卡并为总线上每个卡设置相对地址(RCA)。在卡识别模式下,所有数据通信只使用命令信号线(CMD)。
3.4.2 卡复位
GO_IDLE_STATE命令(CMD0)是一个软件复位命令,它把多媒体卡和SD存储器置于空闲状态。 IO_RW_DIRECT命令(CMD52)复位SD I/O卡。上电后或执行CMD0后,所有卡的输出端都处于高阻状态,同时所有卡都被初始化至一个默认的相对卡地址(RCA=0x0001)和默认的驱动器寄存器设置(最低的速度,最大的电流驱动能力)。
3.4.3 操作电压范围确认
所有的卡都可以使用任何规定范围内的电压与SDIO卡主机通信,可支持的最小和最大电压VDD数值由卡上的操作条件寄存器(OCR)定义。
内部存储器存储了卡识别号(CID)和卡特定数据(CSD)的卡,仅能在数据传输VDD条件下传送这些信息。当SDIO卡主机模块与卡的VDD范围不一致时,卡将不能完成识别周期,也不能发送CSD数据;因此,在VDD范围不匹配时, SDIO卡主机可以用下面几个特殊命令去识别和拒绝卡:SEND_OP_COND(CMD1) 、 SD_APP_OP_COND(SD 存 储 卡 的 ACMD41) 和IO_SEND_OP_COND(SD I/O卡的CMD5)。 SDIO卡主机在执行这几个命令时会产生需要的VDD电压。不能在指定的电压范围进行数据传输的卡,将从总线断开并进入非激活状态。
使用这些不包含电压范围作为操作数的命令, SDIO卡主机能够查询每个卡并在确定公共的电压范围前,把不在此范围内的卡置于非激活状态。当SDIO卡主机能够选择公共的电压范围或用户需要知道卡是否能用时, SDIO卡主机可以进行这样的查询。
3.4.4 卡识别过程
多媒体卡和SD卡的卡识别过程是有区别的;对于多媒体卡,卡识别过程以时钟频率Fod开始,所有SDIO_CMD输出为开路驱动,允许在这个过程中的卡的并行连接,识别过程如下:
- 总线被激活
- SDIO卡主机广播发送SEND_OP_COND(CMD1)命令,并接收操作条件
- 得到的响应是所有卡的操作条件寄存器内容的“线与”
- 不兼容的卡会被置于非激活状态
- SDIO卡主机广播发送ALL_SEND_CID(CMD2)至所有激活的卡
- 所有激活的卡同时串行地发送他们的CID号,那些检测到输出的CID位与命令线上的数据
不相符的卡必须停止发送,并等待下一个识别周期。最终只有一个卡能够成功地传送完整
的CID至SDIO卡主机并进入识别状态。 - SDIO卡主机发送SET_RELATIVE_ADDR(CMD3)命令至这个卡,这个新的地址被称为相
对卡地址(RCA),它比CID短,用于对卡寻址。至此,这个卡转入待机状态,并不再响应
新的识别过程,同时它的输出驱动从开路转变为推挽模式。 - SDIO卡主机重复上述步骤5至7,直到收到超时条件。
对于SD卡而言,卡识别过程以时钟频率Fod开始,所有SDIO_CMD输出为推挽驱动而不是开路驱动,识别过程如下:
- 总线被激活
- SDIO卡主机广播发送SEND_APP_OP_COND(ACMD41)命令
- 得到的响应是所有卡的操作条件寄存器的内容
- 不兼容的卡会被置于非激活状态
- SDIO卡主机广播发送ALL_SEND_CID(CMD2)至所有激活的卡
- 所有激活的卡发送回他们唯一卡识别号(CID)并进入识别状态。
- SDIO卡主机发送SET_RELATIVE_ADDR(CMD3)命令和一个地址到一个激活的卡,这个
新的地址被称为相对卡地址(RCA),它比CID短,用于对卡寻址。至此,这个卡转入待机
状态。 SDIO卡主机可以再次发送该命令更改RCA,卡的RCA将是最后一次的赋值。 - SDIO卡主机对所有激活的卡重复上述步骤5至7。
对于SD I/O卡而言,卡识别过程如下:
-
总线被激活
-
SDIO卡主机发送IO_SEND_OP_COND(CMD5)命令
-
得到的响应是卡的操作条件寄存器的内容
-
不兼容的卡会被置于非激活状态
-
SDIO卡主机发送SET_RELATIVE_ADDR(CMD3)命令和一个地址到一个激活的卡,这个
新的地址被称为相对卡地址(RCA),它比CID短,用于对卡寻址。至此,这个卡转入待机
状态。 SDIO卡主机可以再次发送该命令更改RCA,卡的RCA将是最后一次的赋值
3.4.5 写数据块
执行写数据块命令(CMD24-27)时,主机把一个或多个数据块从主机传送到卡中,同时在每个数据块的末尾传送一个CRC码。一个支持写数据块命令的卡应该始终能够接收由WRITE_BL_LEN
定义的数据块。如果CRC校验错误,卡通过SDIO_D信号线指示错误,传送的数据被丢弃而不
被写入,所有后续(在多块写模式下)传送的数据块将被忽略。
如果主机传送部分数据,而累计的数据长度未与数据块对齐,当不允许块错位(未设置CSD的参数WRITE_BLK_MISALIGN),卡将在第一个错位的块之前检测到块错位错误(设置状态寄存器中
的ADDRESS_ERROR错误位)。当主机试图写一个写保护区域时,写操作也会被中止,此时卡会设置WP_VIOLATION位。
设置CID和CSD寄存器不需要事先设置块长度,传送的数据也是通过CRC保护的。如果CSD或CID寄存器的部分是存储在ROM中,则这个不能更改的部分必须与接收缓冲区的对应部分相一致,如果有不一致之处,卡将报告一个错误同时不修改任何寄存器的内容。有些卡需要长的甚至不可预计的时间完成写一个数据块,在接收一个数据块并完成CRC检验后,卡开始写操作,如果它的写缓冲区已经满并且不能再从新的WRITE_BLOCK命令接受新的数据时,它会把SDIO_D信号线拉低。主机可以在任何时候使用SEND_STATUS(CMD13)查询卡的状态,卡将返回当前状态。 READY_FOR_DATA状态位指示卡是否可以接受新的数据或写操作是否还在进
行。主机可以使用CMD7(选择另一个卡)不选中某个卡,而把这个卡置于断开状态,这样可以释放SDIO_D信号线而不中断未完成的写操作;当重新选择了一个卡,如果写操作仍然在进行并且写缓冲区仍不能使用,它会重新通过拉低SDIO_D信号线指示忙的状态。
3.4.6 读数据块
在读数据块模式下,数据传输的基本单元是数据块,它的大小在CSD中(READ_BL_LEN)定义。如果设置了READ_BL_PARTIAL,同样可以传送较小的数据块,较小数据块是指开始和结束地址完全包含在一个物理块中, READ_BL_LEN定义了物理块的大小。为保证数据传输的正确,
每个数据块后都有一个CRC校验码。 CMD17(READ_SINGLE_BLOCK)启动一次读数据块操作,在传输结束后卡返回到发送状态。
CMD18(READ_MULTIPLE_BLOCK)启动一次连续多个数据块的读操作。
主机可以在多数据块读操作的任何时候中止操作,而不管操作的类型。发送停止传输命令即可中止操作。
如果在多数据块读操作中(任一种类型)卡检测到错误(例如:越界、地址错位或内部错误),它将停止数据传输并仍处于数据状态;此时主机必须发送停止传输命令中止操作。在停止传输命令的响应中报告读错误。
如果主机发送停止传输命令时,卡已经传输完一个确定数目的多个数据块操作中的最后一个数据块,因为此时卡已经不在数据状态,主机会得到一个非法命令的响应。如果主机传输部分数据块,而累计的数据长度不能与物理块对齐同时不允许块错位,卡会在出现第一个未对齐的块时检测出一个块对齐错误,并在状态寄存器中设置ADDRESS_ERROR错误标志。