目录
一、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的学习
3.1 SDIO的主要功能
3.2 SDIO总线拓扑
3.3 SDIO功能描述
3.3.1 SDIO适配器
3.3.2 SDIO AHB接口
3.4卡功能描述
3.4.1卡识别模式
3.4.2 卡复位
3.4.3 操作电压范围确认
3.4.4 卡识别过程
3.4.5 写数据块
3.4.6 读数据块
3.4.7 数据流操作,数据流写入和数据流读出(只适用于多媒体卡)
3.4.8 擦除:成组擦除和扇区擦除
3.4.9 宽总线选择和解除选择
3.4.10 保护管理
3.4.10 卡状态寄存器
3.4.12 SD状态寄存器
3.4 13 SD的I/O模式
3.4.14 命令与响应
3.5 响应格式
3.5.1 R1(普通响应命令)
3.5.2 R1b
3.5.3 R2(CID、 CSD寄存器)
3.5.4 R3(OCR寄存器)
3.5.5 R4(快速I/O)
3.5.6 R4b
3.5.7 R5(中断请求)
3.5.8 R6(中断请求)
3.6 SDIO I/O卡特定的操作
3.6.1 使用SDIO_D2 信号线的SDIO I/O读等待操作
3.6.2 使用停止SDIO_CK的SDIO读等待操作
3.6.3 SDIO暂停/恢复操作
3.6.4 SDIO中断
3.7 CE-ATA特定操作
3.7.1 命令完成指示关闭
3.7.2 命令完成指示使能
3.7.3 CE-ATA中断
3.7.4 中止CMD61
3.8 硬件流控制
参考:
SD卡_百度百科
eMMC_百度百科
MMC(影院)_百度百科
MMC是什么-太平洋IT百科
Nand flash_百度百科
SD卡规格等级区别总结 - 知乎
《STM32中文参考手册》
《ARM cortex-M3权威指南》
《SD Card Specification(V1.0)》
一、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填充数据。
1. 执行卡识别过程
2. 提高SDIO_CK频率
3. 发送CMD7命令选择卡
4. 按下述步骤配置DMA2:
a) 使能DMA2控制器并清除所有的中断标志位
b) 设置DMA2通道4的源地址寄存器为存储器缓冲区的基地址, DMA2通道4的目标地址寄
存器为SDIO_FIFO寄存器的地址
c) 设置DMA2通道4控制寄存器(存储器递增,非外设递增,外设和源的数据宽度为字宽度)
d) 使能DMA2通道4
5. 发送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
6. 查询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输出为开路驱动,允许在这个过程中的卡的并行连接,识别过程如下:
1. 总线被激活
2. SDIO卡主机广播发送SEND_OP_COND(CMD1)命令,并接收操作条件
3. 得到的响应是所有卡的操作条件寄存器内容的“线与”
4. 不兼容的卡会被置于非激活状态
5. SDIO卡主机广播发送ALL_SEND_CID(CMD2)至所有激活的卡
6. 所有激活的卡同时串行地发送他们的CID号,那些检测到输出的CID位与命令线上的数据
不相符的卡必须停止发送,并等待下一个识别周期。最终只有一个卡能够成功地传送完整
的CID至SDIO卡主机并进入识别状态。
7. SDIO卡主机发送SET_RELATIVE_ADDR(CMD3)命令至这个卡,这个新的地址被称为相
对卡地址(RCA),它比CID短,用于对卡寻址。至此,这个卡转入待机状态,并不再响应
新的识别过程,同时它的输出驱动从开路转变为推挽模式。
8. SDIO卡主机重复上述步骤5至7,直到收到超时条件。
对于SD卡而言,卡识别过程以时钟频率Fod开始,所有SDIO_CMD输出为推挽驱动而不是开路驱动,识别过程如下:
1. 总线被激活
2. SDIO卡主机广播发送SEND_APP_OP_COND(ACMD41)命令
3. 得到的响应是所有卡的操作条件寄存器的内容
4. 不兼容的卡会被置于非激活状态
5. SDIO卡主机广播发送ALL_SEND_CID(CMD2)至所有激活的卡
6. 所有激活的卡发送回他们唯一卡识别号(CID)并进入识别状态。
7. SDIO卡主机发送SET_RELATIVE_ADDR(CMD3)命令和一个地址到一个激活的卡,这个
新的地址被称为相对卡地址(RCA),它比CID短,用于对卡寻址。至此,这个卡转入待机
状态。 SDIO卡主机可以再次发送该命令更改RCA,卡的RCA将是最后一次的赋值。
8. SDIO卡主机对所有激活的卡重复上述步骤5至7。
对于SD I/O卡而言,卡识别过程如下:
1. 总线被激活
2. SDIO卡主机发送IO_SEND_OP_COND(CMD5)命令
3. 得到的响应是卡的操作条件寄存器的内容
4. 不兼容的卡会被置于非激活状态
5. 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错误标志。
3.4.7 数据流操作,数据流写入和数据流读出(只适用于多媒体卡)
在数据流模式,数据按字节传输,同时每个数据块后没有CRC。
数据流写(只适用于多媒体卡)
WRITE_DAT_UNTIL_STOP(CMD20)开始从SDIO卡主机至卡的数据传输,从指定的地址开始
连续传输直到SDIO卡主机发出一个停止命令。如果允许部分数据块传输(设置了CSD参数
WRITE_BL_PARTIAL),则数据流可以在卡的地址空间中的任意地址开始和停止,否则数据流
只能在数据块的边界开始和停止。因为传输的数据数目没有事先设定,不能使用CRC校验。如
果发送数据时达到了存储器的最大地址,即使SDIO卡主机没有发送停止命令,随后传输的数据
也会被丢弃。
数据流写操作的最大时钟频率可以通过下式计算
(8 x 2writebllen)(-NSAC)
Maximumspeed = Min(TRANSPEED, )
TAAC x R2WFACTOR
● Maximumspeed = 最大写频率
● TRANSPEED = 最大数据传输率
● writebllen = 最大写数据块长度
● NSAC = 以CLK周期计算的数据读操作时间2
● TAAC = 数据读操作时间1
● R2WFACTOR = 写速度因子
如果主机试图使用更高的频率,卡可能不能处理数据并停止编程,同时在状态寄存器中设置
OVERRUN错误位,丢弃所有随后传输的数据并(在接收数据状态)等待停止命令。如果主机试图
写入一个写保护区域,写操作将被中止,同时卡将设置WP_VIOLATION位。
数据流读(只适用于多媒体卡)
READ_DAT_UNTIL_STOP(CMD11)控制数据流数据传输。
这 个 命 令 要 求 卡 从 指 定 的 地 址 读 出 数 据 , 直 到SDIO卡 主 机 发 送STOP_TRANSMISSION
(CMD12)。因为串行命令传输的延迟,停止命令的执行会有延迟,数据传送会在停止命令的结
束位后停止。如果发送数据时达到了存储器的最大地址, SDIO卡主机没有发送停止命令,随后
传输的数据将是无效数据。
数据流读操作的最大时钟频率可以通过下式计算
(8 x 2readbllen)(-NSAC)
Maximumspeed = Min(TRANSPEED, )
TAAC x R2WFACTOR
● Maximumspeed = 最大写频率
● TRANSPEED = 最大数据传输率
● readbllen = 最大读数据块长度
● NSAC = 以CLK周期计算的数据读操作时间2
● TAAC = 数据读操作时间1
● R2WFACTOR = 写速度因子
如 果 主 机 试 图 使 用 更 高 的 频 率 , 卡 将 不 能 处 理 数 据 传 输 , 此 时 卡 在 状 态 寄 存 器 中 设 置UNDERRUN错误位,中止数据传输并在数据状态等待停止命令。
3.4.8 擦除:成组擦除和扇区擦除
多媒体卡的擦除单位是擦除组,擦除组是以写数据块计算,写数据块是卡的基本写入单位。擦除组的大小是卡的特定参数,在CSD中定义。
主机可以擦除一个连续范围的擦除组,开始擦除操作有三个步骤。
首先,主机使用ERASE_GROUP_START(CMD35)命令定义连续范围的开始地址,然后使用
ERASE_GROUP_END(CMD36) 命 令 定 义 连 续 范 围 的 结 束 地 址 , 最 后 发 送 擦 除 命 令
ERASE(CMD38)开始擦除操作。擦除命令的地址域是以字节为单位的擦除组地址。卡会舍弃未
与擦除组大小对齐的部分,把地址边界对齐到擦除组的边界。
如果未按照上述步骤收到了擦除命令,卡在状态寄存器中设置ERASE_SEQ_ERROR位,并重新等待第一个步骤。如 果 收 到 了 除 SEND_STATUS 和 擦 除 命 令 之 外 的 其 它 命 令 , 卡 在 状 态 寄 存 器 中 设 置ERASE_RESET位,解除擦除序列并执行新的命令。
如果擦除范围包含了写保护数据块,这些块不被擦除,只有未保护的块被擦除,同时卡在状态寄存器中设置WP_ERASE_SKIP状态位。
在擦除过程中,卡拉低SDIO_D信号。实际的擦除时间可能很长,主机可以使用CMD7解除卡的选择.
3.4.9 宽总线选择和解除选择
可以通过SET_BUS_WIDTH(ACMD6)命令选择或不选择宽总线(4位总线宽度)操作模式,上电后或GO_IDLE_STATE(CMD0)命令后默认的总线宽度为1位。 SET_BUS_WIDTH(ACMD6)命令仅
在传输状态时有效,即只有在使用SELECT/DESELECT_CARD(CMD7)命令选择了卡后才能改
变总线宽度。
3.4.10 保护管理
SDIO卡主机模块支持三种保护方式:
1. 内部卡保护(卡内管理)
2. 机械写保护开关(仅由SDIO卡主机模块管理)
3. 密码管理的卡锁操作
内部卡的写保护
卡的数据可以被保护不被覆盖或擦除。在CSD中永久地或临时地设置写保护位,生产厂商或内容提供商可以永久地对整个卡施行写保护。对于支持在CSD中设置WP_GRP_ENABLE位从而
提供一组扇区写保护的卡,部分数据可以被保护,写保护可以通过程序改变。写保护的基本单
位是CSD参数WP_GRP_SIZE个扇区。 SET_WRITE_PROT和CLR_WRITE_PROT命令控制指
定组的保护, SEND_WRITE_PROT命令与单数据块读命令类似,卡送出一个包含32个写保护
位(代表从指定地址开始的32个写保护组)的数据块,跟着一个16位的CRC码。写保护命令的地
址域是一个以字节为单位的组地址。
卡将截断所有组大小以下的地址。
机械写保护开关
在卡的侧面有一个机械的滑动开关,允许用户设置或清除卡的写保护。当滑动开关置于小窗口打开的位置时,卡处于写保护状态,当滑动开关置于小窗口关闭的位置时,可以更改卡中内
容。在卡的插槽上的对应部位也有一个开关指示SDIO卡主机模块,卡是否处于写保护状态。卡
的内部电路不知道写保护开关的位置。
密码保护
密码保护功能允许SDIO卡主机模块使用密码对卡实行上锁或解锁。密码存储在128位的PWD寄存器中,它的长度设置在8位的PWD_LEN寄存器中。这些寄存器是不可挥发的,即掉电后它们
的内容不丢失。已上锁的卡能够响应和执行相应的命令,即允许SDIO卡主机模块执行复位、初
始化和查询状态等操作,但不允许操作卡中的数据。当设置了密码后(即PWD_LEN的数值不为
0),上电后卡自动处于上锁状态。正如CSD和CID寄存器写命令,上锁/解锁命令仅在传输状态
下有效,在这个状态下,命令中没有地址参数,但卡已经被选中。卡的上锁/解锁命令具有单数
据块写命令的结构和总线操作类型,传输的数据块包含所有命令所需要的信息(密码设置模式、
PWD内容和上锁/解锁指示)。在发送卡的上锁/解锁命令之前,命令数据块的长度由SDIO卡主机
模块定义,,命令结构示于表142。
位的设置如下:
● ERASE:设置该位将执行强制擦除,所有其它位必须为0,只发送命令字节。
● LOCK_UNLOCK:设置该位锁住卡, LOCK_UNLOCK与SET_PWD可以同时设置,但不能
与CLR_PWD同时设置。
● CLR_PWD:设置该位清除密码数据。
● SET_PWD:设置该位将密码数据保存至存储器。
● PWD_LEN:以字节为单位定义密码的长度。
● PWD:密码(依不同的命令,新的密码或正在使用的密码) |
以下几节列出了设置/清除密码、上锁/解锁和强制擦除的命令序列。
设置密码
1. 选择一个卡(SELECT/DESELECT_CARD, CMD7)。
2. 定义要在8位的卡上锁/解锁模式下发送的数据块长度(SET_BLOCKLEN, CMD16), 8位
的PWD_LEN,新密码的字节数目。当更换了密码后,发送命令的数据块长度必须同时考
虑新旧密码的长度。
3. 以合适的数据块长度在数据线上发送LOCK/UNLOCK(CMD42)命令,并包含16位的CRC
码。数据块包含了操作模式(SET_PWD=1)、长度(PWD_LEN)和密码(PWD)。当更换了密
码后,长度数值(PWD_LEN)包含了新旧两个密码的长度, PWD域包含了旧的密码(正在
使用的)和新的密码。
4. 当旧的密码匹配后,新的密码和它的长度被分别存储在PWD和PWD_LEN域。如果送出
的旧密码与期望的密码(长度或内容)不吻合,则设置状态寄存器中的
LOCK_UNLOCK_FAILED错误位,同时密码不变。
密码长度域(PWD_LEN)指示当前是否设置了密码,如果该域为非零,则表示使用了密码,卡在
上电时自动上锁。在不断电的情况下,如果设置了密码,可以通过设置LOCK_UNLOCK位或发
送一个额外的上锁命令,立即锁住卡。
清除密码
1. 选择一个卡(SELECT/DESELECT_CARD, CMD7)。
2. 定义要在8位的卡上锁/解锁模式下发送的数据块长度(SET_BLOCKLEN, CMD16), 8位
的PWD_LEN,当前使用密码的字节数目。
3. 当密码匹配后, PWD域被清除同时PWD_LEN被设为0。如果送出的密码与期望的密码(长
度或内容)不吻合,则设置状态寄存器中的LOCK_UNLOCK_FAILED错误位,同时密码不
变。
卡上锁
1. 选择一个卡(SELECT/DESELECT_CARD, CMD7)
2. 定义要在8位的卡上锁/解锁模式(见表142的字节0)下发送的数据块长度
(SET_BLOCKLEN, CMD16), 8位的PWD_LEN,和当前密码的字节数目。
3. 以合适的数据块长度在数据线上发送LOCK/UNLOCK(CMD42)命令,并包含16位的CRC
码。数据块包含了操作模式(LOCK_UNLOCK=1)、长度(PWD_LEN)和密码(PWD)。
4. 当密码匹配后,卡被上锁并则设置状态寄存器中的CARD_IS_LOCKED状态位。如果送出
的密码与期望的密码(长度或内容)不吻合,则设置状态寄存器中的
LOCK_UNLOCK_FAILED错误位,同时上锁操作失败。
设置密码和为卡上锁可以在同一个操作序列中进行,此时SDIO卡主机模块按照前述的步骤设置
密码,但在发送新密码命令的第3步需要设置LOCK_UNLOCK位。
如果曾经设置过密码(PWD_LEN不为0),卡会在上电复位时自动地上锁。对已经上锁的卡执行
上 锁 操 作 或 对 没 有 密 码 的 卡 执 行 上 锁 操 作 会 导 致 失 败 , 并 设 置 状 态 寄 存 器 中 的
LOCK_UNLOCK_FAILED错误位。
卡解锁
1. 选择一个卡(SELECT/DESELECT_CARD, CMD7)
2. 定义要在8位的卡上锁/解锁模式(见表142的字节0)下发送的数据块长度
(SET_BLOCKLEN, CMD16), 8位的PWD_LEN,和当前密码的字节数目。
3. 以合适的数据块长度在数据线上发送LOCK/UNLOCK(CMD42)命令,并包含16位的CRC
码。数据块包含了操作模式(LOCK_UNLOCK=0)、长度(PWD_LEN)和密码(PWD)。
4. 当密码匹配后,卡锁被解除,同时状态寄存器中的CARD_IS_LOCKED位被清除。如果送
出的密码与期望的密码(长度或内容)不吻合,则设置状态寄存器中的
LOCK_UNLOCK_FAILED错误位,同时卡仍保持上锁状态。
解锁状态只在当前的供电过程中有效,只要不清除PWD域,下次上电后卡会被自动上锁。
试 图 对 已 经 解 了 锁 的 卡 执 行 解 锁 操 作 会 导 致 操 作 失 败 , 并 设 置 状 态 寄 存 器 中 的
LOCK_UNLOCK_FAILED错误位。
强制擦除
如果用户忘记了密码(PWD的内容),可以在清除卡中的所有内容后使用卡。强制擦除操作擦除
所有卡中的数据和密码。
1. 选择一个卡(SELECT/DESELECT_CARD, CMD7)
2. 设置发送的数据块长度(SET_BLOCKLEN, CMD16)为1,仅发送8位的卡上锁/解锁字节
(见表142的字节0)。
3. 以合适的数据块长度在数据线上发送LOCK/UNLOCK(CMD42)命令,并包含16位的CRC
码。数据块包含了操作模式(ERASE=1)所有其它位为0。
4. 当ERASE位是数据域中仅有的位时,卡中的所有内容将被擦除,包括PWD和PWD_LEN
域,同时卡不再被上锁。如果有任何其它位不为0,则设置状态寄存器中的
LOCK_UNLOCK_FAILED错误位,卡中的数据保持不变,同时卡仍保持上锁状态。
试 图 对 已 经 解 了 锁 的 卡 执 行 擦 除 操 作 会 导 致 操 作 失 败 , 并 设 置 状 态 寄 存 器 中 的LOCK_UNLOCK_FAILED错误位。
3.4.10 卡状态寄存器
响应格式R1包含了一个32位的卡状态域,这个域是用于向卡主机发送卡的状态信息(这些信息有可能存在本地的状态寄存器中)。除非特别说明,卡返回的状态始终是与之前的命令相关的。
表129定义了不同的状态信息。表中有关类型和清除条件域的缩写定义如下:
类型:
● E: 错误位
● S: 状态位
● R: 检测位,并依据实际的命令响应而设置
● X: 检测位,在命令的执行中设置。 SDIO卡主机通过发送状态命令读出这些位而查询卡的状
态。
清除条件:
● A: 依据卡的当前状态
● B: 始终与之前的命令相关。接收到正确的命令即可清除(具有一个命令的延迟)。
● C: 读即可清除
3.4.12 SD状态寄存器
SD状态包含与SD存储器卡特定功能相关的状态位和一些与未来应用相关的状态位, SD状态的长度是一个512位的数据块。收到ACMD13命令(CMD55,然后是CMD13)后,这个寄存器的内
容被传送到SDIO卡主机。只有卡处于传输状态时(卡已被选择)才能发送ACMD13命令。
表130定义了不同的SD状态寄存器信息。表中有关类型和清除条件域的缩写定义如下:
类型:
● E: 错误位
● S: 状态位
● R: 检测位,并依据实际的命令响应而设置
● X: 检测位,在命令的执行中设置。 SDIO卡主机通过发送状态命令读出这些位而查询卡的状
态。
清除条件:
● A: 依据卡的当前状态
● B: 始终与之前的命令相关。接收到正确的命令即可清除(具有一个命令的延迟)。
● C: 读即可清除
SIZE_OF_PROTECTED_AREA
标准容量卡和高容量卡设置该位的方式不同。对于标准容量卡,受保护区域的容量由下式计
算:
受保护区域 = SIZE_OF_PROTECTED_AREA * MULT * BLOCK_LEN
SIZE_OF_PROTECTED_AREA的单位是MULT * BLOCK_LEN。
对于高容量卡,受保护区域的容量由下式计算:
受保护区域 = SIZE_OF_PROTECTED_AREA
SIZE_OF_PROTECTED_AREA的单位是字节。
SPEED_CLASS
这8位指示速度的类型和可以通过计算PW/2的数值(PW是写的性能)。
PERFORMANCE_MOVE
这8位以1MB/秒为单位指示移动性能(Pm)。如果卡不用RU(纪录单位)移动数据,应该认为Pm是
无穷大。设置这个域为FFh表示无穷大。
AU_SIZE
这4位指示AU的长度,数值是16K字节为单位2的幂次的倍数。
依据卡的容量,最大的AU长度由下表定义。卡可以在RU长度和最大的AU长度之间设置任意的
AU长度。
ERASE_SIZE
这个16位域给出了NERASE,当NERASE个AU被擦除时, ERASE_TIMEOUT定义了超时时间。主
机应该确定适当的一次操作中擦除的AU数目,这样主机可以显示擦除操作的进度。如果该域为
0,则不支持擦除的超时计算。
ERASE_TIMEOUT
这6位给出了TERASE,当ERASE_SIZE指示的多个AU被擦除时,这个数值给出了从偏移量算起
的擦除超时。 ERASE_TIMEOUT的范围可以定义到最多63秒,卡的生产商可以根据具体实现选
择 合 适 的 ERASE_SIZE 与 ERASE_TIMEOUT 的 组 合 , 先 确 定 ERASE_TIMEOUT 再 确 定
ERASE_SIZE。
ERASE_OFFSET
这2位给出了TOFFSET,当ERASE_SIZE和ERASE_TIMEOUT同为0时这个数值没有意义
3.4 13 SD的I/O模式
SD的I/O中断
为了让SD I/O卡能够中断多媒体卡/SD模块,在SD接口上有一个具有中断功能的引脚——第8
脚,在4位SD模式下这个脚是SDIO_D1,卡用它向多媒体卡/SD模块提出中断申请。对于每一
个卡或卡内的功能,中断功能是可选的。 SD I/O的中断是电平有效,即在被识别并得到多媒体
卡/SD模块的响应之前,中断信号线必须保持有效电平(低),在中断过程结束后保持无效电平
(高)。在多媒体卡/SD模块服务了中断请求后,通过一个I/O写操作,写入适当的位到SD I/O卡的
内部寄存器,即可清除中断状态位。所有SD I/O卡的中断输出是低电平有效,多媒体卡/SD模块
在 所 有 数 据 线 (SDIO/D[3:0]) 上 提 供 上 拉 电 阻 。 多 媒 体 卡 /SD 模 块 在 中 断 阶 段 对 第 8 脚(SDIO_D/IRQ)采样并进行中断检测,其它时间该信号线上的数值将被忽略。
存储器操作和I/O操作都具有中断阶段,单个数据块操作的中断阶段定义与多个数据块传输操作
的中断阶段定义不同。
SD的I/O暂停和恢复
在一个多功能的SD I/O卡或同时具有I/O和存储器功能的卡中,多个设备(I/O和存储器)共用
MMC/SD总线。为了使MMC/SD模块中的多个设备能够共用总线, SD I/O卡和复合卡可以有选
择地实现暂停/恢复的概念;如果一个卡支持暂停/恢复, MMC/SD模块能够暂时地停止一个功能
或存储器的数据传输操作(暂停),借此让出总线给具有更高优先级的其它功能或存储器,在这个
具有更高优先级的传输完成后,再恢复原先暂停的传输。支持暂停/恢复的操作是可选的。在
MMC/SD总线上执行暂停/恢复操作有下述步骤:
1. 确定SDIO_D[3:0]信号线的当前功能
2. 请求低优先级或慢的操作暂停
3. 等待暂停操作完成,确认设备已暂停
4. 开始高优先级的传输
5. 等待高优先级的传输结束
6. 恢复暂停的操作
SD I/O读等待(ReadWait)
可选的读等待(RW)操作只适用于SD卡的1位或4位模式。读等待操作允许MMC/SD模块在一个
卡正在读多个寄存器(IO_RW_EXTENDED, CMD53)时,要求它暂时停止数据传输,同时允许
MMC/SD模块发送命令到SD I/O设备中的其他功能。判断一个卡是否支持读等待协议,
MMC/SD模块应该检测卡的内部寄存器。读等待的时间与中断阶段相关。
3.4.14 命令与响应
应用相关命令和通用命令
SD卡主机模块系统是用于提供一个适用于多种应用类型的标准接口,但同时又要兼顾特定用户和 应 用 的 功 能 , 因 此 标 准 中 定 义 了 两 类 通 用 命 令 : 应 用 相 关 命 令 (ACMD) 和 通 用 命 令(GEN_CMD)。
当卡收到APP_CMD(CMD55)命令时,卡期待下一个命令是应用相关命令。应用相关命令
(ACMD)具有普通多媒体卡相同的格式结构,并可以使用相同的CMD号码,因为它是出现在
APP_CMD(CMD55)后面,所以卡把它识别为ACMD命令。如果跟随APP_CMD(CMD55)之后不
是一个已经定义的应用相关命令,则认为它是一个标准命令;例如:有一个SD_STATUS
(ACMD13)应用相关命令,如果在紧随APP_CMD(CMD55)之后收到CMD13,它将被解释为
SD_STATUS(ACMD13);但是如果卡在紧随APP_CMD(CMD55)之后收到CMD7,而这个卡没
有定义ACMD7,则它将被解释为一个标准的CMD7(SELECT/DESELECT_CARD)命令。
如果要使用生产厂商自定义的ACMD, SD卡主机需要做以下操作:
1. 发送APP_CMD(CMD55)命令
卡送回响应给多媒体/SD卡模块,指示设置了APP_CMD位并等待ACMD命令。
2. 发送指定的ACMD |
卡送回响应给多媒体/SD卡模块,指示设置了APP_CMD位,收到的命令已经正确地按照
ACMD命令解析;如果发送了一个非ACMD命令,卡将按照普通的多媒体卡命令处理同时
清除卡中状态寄存器的APP_CMD位。
如果发送了一个非法的命令(不管是ACMD还是CMD),将被按照标准的非法多媒体卡命令进行
错误处理。
GEN_CMD 命 令 的 总 线 操 作 过 程 , 与 单 数 据 块 读 写 命 令 (WRITE_BLOCK , CMD24 或
READ_SINGLE_BLOCK, CMD17)相同;这时命令的参数表示数据传输的方向而不是地址,数
据块具有用户自定义的格式和意义。
发送GEN_CMD(CMD56)命令之前,卡必须被选中(状态机处于传输状态),数据块的长度由
SET_BLOCKLEN(CMD16)定义。 GEN_CMD(CMD56)命令的响应是R1b格式。
命令类型
应用相关命令和通用命令有四种不同的类型:
1. 广播命令(BC):发送到所有卡,没有响应返回。
2. 带响应的广播命令(BCR):发送到所有卡,同时收到从所有卡返回的响应。
3. 带寻址(点对点)的命令(AC):发送到选中的卡,在SDIO_D信号线上不包括数据传输。
4. 带寻址(点对点)的数据传输命令(AC):发送到选中的卡,在SDIO_D信号线上包含数据传
输。
命令格式
命令格式参见表122。
多媒体卡/SD卡模块的命令
3.5 响应格式
所有的响应是通过MCCMD命令在SDIO_CMD信号线上传输。响应的传输总是从对应响应字的
位串的最左面开始,响应字的长度与响应的类型相关。
一个响应总是有一个起始位(始终为0),跟随着传输的方向位(卡=0)。下表中标示为x的数值表示
一个可变的部分。除了R3响应类型,所有的响应都有CRC保护。每一个命令码字都有一个结束
位(始终为1)。
共有5种响应类型,它们的格式定义如下:
3.5.1 R1(普通响应命令)
代码长度=48位。位45:40指示要响应的命令索引,它的数值介于0至63之间。卡的状态由32位
进行编码
3.5.2 R1b
与R1格式相同,但可以选择在数据线上发送一个繁忙信号。收到这些命令后,依据收到命令之
前的状态,卡可能变为繁忙。
3.5.3 R2(CID、 CSD寄存器)
代码长度=136位。 CID寄存器的内容将作为CMD2和CMD10的响应发出。 CSD寄存器的内容将
作为CMD9的响应发出。卡只送出CID和CSD的位[127…1],在接收端这些寄存器的位0被响应
的结束位所取代。卡通过拉低MCDAT指示它正在进行擦除操作;实际擦除操作的时间可能非常
长,主机可以发送CMD7命令不选中这个卡。
3.5.4 R3(OCR寄存器)
代码长度=48位。 OCR寄存器的内容将作为CMD1的响应发出。电平代码的定义是:限制的电压
窗口 = 低,卡繁忙 = 低。
3.5.5 R4(快速I/O)
代码长度=48位。参数域包含指定卡的RCA、需要读出或写入寄存器的地址、和它的内容。
表147 R4响应
3.5.6 R4b
仅适合SD I/O卡:一个SDIO卡收到CMD5后将返回一个唯一的SDIO响应R4。
表148 R4b响应
当一个SD I/O卡收到命令CMD5,卡的I/O部分被使能并能够正常地响应所有后续的命令。 I/O卡
的使能状态将保持到下一次复位、断电或收到I/O复位的CMD52命令。注意,一个只包含存储器
功能的SD卡可以响应CMD5命令,它的正确响应可以是:当前存储器=1, I/O功能数目=0。按照
SD存储器卡规范版本1.0设计的只包含存储器功能的SD卡,可以检测到CMD5命令为一个非法
命令并不响应它。可以处理I/O卡的主机将发送CMD5命令,如果卡返回响应R4,则主机会依据
R4响应中的数据确定卡的配置。
3.5.7 R5(中断请求)
仅适用于多媒体卡。代码长度=48位。如果这个响应由主机产生,则参数中的RCA域为0x0。
3.5.8 R6(中断请求)
仅适用于SD I/O卡。这是一个存储器设备对CMD3命令的正常响应。
当发送CMD3命令到只有I/O功能的卡时,卡的状态位[23:8]会改变;此时,响应中的16位将是只
有I/O功能的SD卡中的数值:
● 位15 = COM_CRC_ERROR
● 位14 = ILLEGAL_COMMAND
● 位13 = ERROR
● 位[12:0] = 保留
3.6 SDIO I/O卡特定的操作
下述功能是SD I/O卡特定的操作:
● 由SDIO_D2信号线实现的SDIO读等待操作。
● 通过停止时钟实现的SDIO读等待操作。
● SDIO暂停/恢复操作(写和读暂停)
● SDIO中断
只有设置了SDIO_DCTRL[11]位时, SDIO才支持这些操作;但读暂停除外,因为它不需要特殊
的硬件操作
3.6.1 使用SDIO_D2 信号线的SDIO I/O读等待操作
在收到第一个数据块之前即可以开始读等待过程,使能数据通道(设置SDIO_DCTRL[0]位)、使能 SDIO 特 定 操 作 ( 设 置 SDIO_DCTRL[11] 位 ) 、 开 始 读 等 待 (SDIO_DCTRL[10]=0 并 且
SDIO_DCTRL[8]=1),同时数据传输方向是从卡至SDIO主机(SDIO_DCTRL[1]=1), DPSM将直
接从空闲进入读等待状态。在读等待状态时, 2个SDIO_CK时钟周期后, DPSM驱动SDIO_D2
为’0’,在此状态,如果设置RWSTOP位(SDIO_DCTRL[9]),则DPSM会在等待状态多停留2个
SDIO_CK时钟周期, (根据SDIO规范)并在一个时钟周期中驱动SDIO_D2为’1’。然后DPSM开始
等待从卡里接收数据。在接收数据块时,即使设置了开始读等待, DPSM也不会进入读等待,
读等待过程将在收到CRC后开始。必须清除RWSTOP才能开始新的读等待操作。在读等待期
间, SDIO主机可以在SDIO_D1上监测SDIO中断。
3.6.2 使用停止SDIO_CK的SDIO读等待操作
如果SDIO卡不能支持前述的读等待操作, SDIO可以停止SDIO_CK进入读等待(按照20.6.1节介绍的方式设置SDIO_DCTRL,但置SDIO_DCTRL[10]=1),在接收当前数据块结束位之后的2个
SDIO_CK周期后, DSPM停止时钟,在设置了读等待开始位后恢复时钟。
因为SDIO_CK停止了,可以向卡发送任何命令。在读等待期间, SDIO主机可以在SDIO_D1上监测SDIO中断。
3.6.3 SDIO暂停/恢复操作
在向卡发送数据时, SDIO可以暂停写操作。设置SDIO_CMD[11]位,这指示CPSM当前的命令是一个暂停命令。 CPSM分析响应,在从卡收到ACK时(暂停被接受),它确认在收到当前数据块
的CRC后进入空闲状态。
硬件不会保存结束暂停操作之后,剩余的发送数据块数目。
可以通过软件暂停写操作:在收到卡对暂停命令的ACK时,停止DPSM(SDIO_DCTRL[0]=0),
DPSM即可进入空闲状态。
暂停读操作: DPSM在Wait_r状态等待,在停止数据传输进入暂停之前,已经发送完成完整的数
据包。随后应用程序继续读出RxFIFO直到FIFO变空,最后DPSM自动地进入空闲状态。
3.6.4 SDIO中断
当设置了SDIO_DCTRL[11]位, SDIO主机在SDIO_D1信号线上监测SDIO中断。
3.7 CE-ATA特定操作
下面是CE-ATA的特定操作:
● 送出命令完成信号能够关闭CE-ATA设备
● 从CE-ATA设备接收命令完成信号
● 使用状态位和/或中断,向CPU发送CE-ATA命令完成信号
仅当设置了SDIO_CMD[14]位时,即SDIO主机只对CE-ATA的CMD61命令支持这些操作。
3.7.1 命令完成指示关闭
如果未设置SDIO_CMD[12]中的“允许CMD结束位”并且设置了SDIO_CMD[13]中的“非中断
使能位”,则在收到一个短响应后的8个位周期之后,发出命令完成关闭信号。
在命令移位寄存器中写入关闭序列“00001”并且在命令计数器中写入43,则CPSM进入暂停状
态。 8个周期后,一个触发将CPSM移至发送状态。当命令计数器达到48时,因为没有要等待的
响应, CPSM变为空闲状态。
3.7.2 命令完成指示使能
如果设置SDIO_CMD[12]中的“允许CMD结束位”并且设置了SDIO_CMD[13]中的“非中断使
能位”, CPSM在Waitcpl状态下等待命令完成信号。
当在CMD信号上收到’0’, CPSM进入空闲状态。在个7位周期之内不能发送新命令。然后,在最
后5个周期(上述7个周期之外),在推挽模式下CMD信号变为’1’。
3.7.3 CE-ATA中断
命令完成是由状态位SDIO_STA[23]通知CPU,使用清除位SDIO_ICR[23]可以清除该位。
根据屏蔽位SDIO_MASKx[23]的设置, SDIO_STA[23]状态位可以在每一个中断线上产生中断。
3.7.4 中止CMD61
如果还未发送”命令完成指示关闭”信号,但需要中止CMD61命令,命令状态机必须被关闭。然后它变成空闲,并且可以发送CMD12命令。在此操作期间,不传送”命令完成指示关闭”信号。
3.8 硬件流控制
使用硬件流控制功能可以避免FIFO下溢(发送模式)和上溢(接收模式)错误。
操作过程是停止SDIO_CK并冻结SDIO状态机,在FIFO不能进行发送和接收数据时,数据传输
暂停。只有由SDIOCLK驱动的状态机被冻结, AHB接口还在工作。即使在流控制起作用时,仍
然可以读出或写入FIFO。
必须设置SDIO_CLKCR[14]位为’1’,才能使能硬件流控制。复位后,硬件流控制功能关闭。