没有合适的资源?快使用搜索试试~ 我知道了~
首页STM32之CubeL4(四)— SD/MMC + SDIO + HAL
我们进行嵌入式开发时,常会遇到SD卡驱动或者扩展SDIO模块,ST提供的SD卡HAL标准库中常出现SDMMC,为什么SD经常与MMC一块出现,SD与SDIO又有什么关系呢? 一、SD/MMC/SDIO概念区分 MMC(MultiMediaCard)从本质上看,是一种用于固态非易失性存储的内存卡(memory card)规范,定义了诸如卡的形态、尺寸、容量、电气信号、和主机之间的通信协议等方方面面的内容。 从1997年MMC规范发布至今,基于不同的考量(物理尺寸、电压范围、管脚数量、最大容量、数据位宽、clock频率、安全特性、是否支持SPI mode、是否支持DDR mode、等等),进化出了
资源详情
资源评论
资源推荐

STM32之之CubeL4(四)(四)— SD/MMC + SDIO + HAL
我们进行嵌入式开发时,常会遇到SD卡驱动或者扩展SDIO模块,ST提供的SD卡HAL标准库中常出现SDMMC,为什么SD经常与MMC一块出现,SD与SDIO又有什么关系呢?
一、一、SD/MMC/SDIO概念区分概念区分
MMC(MultiMediaCard)从本质上看,是一种用于固态非易失性存储的内存卡(memory card)规范,定义了诸如卡的形态、尺寸、容量、电气信号、和主机之间的通信协议等方方面
面的内容。
从1997年MMC规范发布至今,基于不同的考量(物理尺寸、电压范围、管脚数量、最大容量、数据位宽、clock频率、安全特性、是否支持SPI mode、是否支持DDR mode、等
等),进化出了MMC、SD、microSD、SDIO、eMMC等不同的规范,如下图所示(图片取自博客:MMC/SD/SDIO介绍):
SD卡卡(Secure Digital Memory Card)是在MMC的基础上发展而来的,相比MMC增加了两个主要特色:SD卡强调数据的安全,可以设定所储存的使用权限,防止数据被他人复制;
SD卡的传输速度比MMC卡快。在数据传输和物理规范上,SD卡向前兼容了MMC卡,所有支持SD卡的设备也支持MMC卡,这也是我们在SD卡驱动文件中常见到SDMMC的原因。
SDIO(Secure Digital Input Output)是从SD规范演化来的,强调的是接口 I/O功能,不再关注另一端的具体形态(可以是Wi-Fi card、Bluetooth card、GPS card、GSM/GPRS card
、Camera card、Radio/TV card等)。SDIO和SD卡规范间的一个重要区别是增加了低速标准,低速卡的目标应用是以最小的硬件开销支持低速IO能力。因此,SDIO接口兼容SD
卡,或者说SD卡就是其中一种具有安全存储功能的SDIO Card,SDIO Card也可以是兼具多种功能的组合卡Combo Card(比如 I/O + Memory)。
二、二、SDIO Bus简介简介

SDIO/SD协议规范包含三部分:Host Controller、SDIO Bus、SDIO Card,三者的结构框图如下所示:
SDIO总线和USB总线类似,都是采用主从模式通信,其中一端是主机端(Host Controller / Adapter),另一端是设备端(SDIO Card),采用 Host – Device 这样的设计是为了简化
Device 的设计,所有的通信都是由 Host 端发出命令开始的。在 Device 端只要能解析 Host 的命令,就可以同 Host 进行通信了,SDIO 的 Host 可以连接多个 Device。
2.1 SDIO Bus物理层物理层
SDIO Bus的物理信号有 CK、CMD、DATA三类(SDIO适配器时钟SDIOCLK用于驱动SDIO Host,并用于产生SDIO_CK时钟):
SDIO_CK:Host给Device的时钟信号,SDIO卡时钟频率全速模式可达0-25MHZ(低速模式为0-400KHZ),SD卡或MMC卡的高速版本时钟频率可达上百兆赫兹;
SDIO_CMD:双向的命令、响应信号线,Command由Host发送给Device,Response由Device 返回给Host;
SDIO_D[7:0]: 双向的数据传输线,数据位宽允许动态配置为 1-bit(默认)、4-bit、8-bit模式(数据线与命令线通常要保持上拉状态,以保护数据免受总线浮动影响);
VCC/VDD:按照工作电压的不同,SD卡可分为高电压版(3.3V)和双电压版(1.8V和3.3V)。
SDIO的信号传输模式有SD 4-bit、SD 1-bit、SPI三种(8-bit模式一般用于MMC),以最常见的SD卡9 pin引脚(3根电源线 + 6根信号线)为例,分别工作在这三种模式下的引脚功能
定义如下表所示:
依据 SD 标准,所有的 SD(记忆卡)与 SDIO(外设)都必须支持 SPI mode,因此 SPI mode 是「required」。SDIO新增的低速标准本身就为了减少硬件开支,因此不支持上面的
SD 4-bit模式。
2.2 SDIO Bus协议层协议层
SDIO 总线的通信是基于命令和数据流的,由一个起始位开始,由一个停止位终止。
命令命令(Command):就是一个标记,用于发起(或结束)一个操作,由主机发送到单个卡(寻址命令)或者所有卡(广播命令);
响应响应(Response):也是一个标记,从寻址的卡或者所有卡(同步)发送给主机,作为向先前接收到的命令的回答;
数据数据(Data):可以从主机到卡,也可以从卡到主机,数据线的个数可以是 1、4、8。
SDIO总线上的基本交互是命令/响应交互,这种总线交互直接在命令或者响应的结构里面传输它们的信息。SDIO的每次操作都是由Host 在CMD线上发起一个命令,对于有的
Command,Device 需要返回 Response,有的则不需要。
SDIO总线上传输的数据可以是数据块(比如SD memory card 这类块设备),也可以是数据流(比如 I/O function card 这类字符设备),数据块需附加CRC(Cyclic Redundancy
Check)位来保证数据准确传输。主机端可以配置单线或者多线传输,数据块可以单块操作或多块操作,数据块写操作使用busy来表示DAT0数据线上的持续写操作,不管使用几线传
输。SDIO总线上命令、响应、数据块、数据流的交互示意图如下:

2.2.1 SDIO Command
Command是一次操作开始的令牌,从主机发送到一个卡设备(寻址命令)或者连接到主机的所有卡设备(广播命令)。每个命令都有一个起始位和结束位,总长度为48 bits,并且
每个命令都有 7 bits 的CRC 校验码。命令只能通过CMD线传输,并且MSB(Most Significant Bit)为先(也即最高有效位在前),Command的编码格式如下图所示:
命令的开始位(始终为0)、传输位(始终为1,表示Host–>Device的传输方向)、 CRC7 和结束位(始终为1)由 SDIO 硬件控制,我们需要设置的就只有命令索引和参数部分。其
中命令索引(CMD0 ~ CMD63共64个命令)在 SDIO_CMD 寄存器里面设置,命令参数则由寄存器 SDIO_ARG 设置。
SDIO的命令分为应用相关命令ACMD 和通用命令CMD 两部分,应用相关命令ACMD 的发送,必须先发送通用命令 CMD55 ,然后才能发送应用相关命令 ACMD 。 SDIO的命令根据
发送范围和是否带响应可以分为下面四种不同的类型:
Broadcast Commands(BC):发送到所有卡,没有响应返回;
Broadcast Commands with Response(BCR):发送到所有卡,同时收到从所有卡返回的响应;
Addressed(point-to-point) Commands(AC):由Host 发送到指定的卡设备,没有数据的传输;
Address(point-to-point) Data Transfer Commands(ADTC):由Host 发送到指定的卡设备且伴随有数据传输。
SD卡与SDIO卡支持的命令共分为12类(class 0 ~ class 11),下面按命令类别class和命令类型type,将SD/SDIO支持的常用命令及其功能描述汇总如下(保留命令、SPI模式命令

等没有列出):
上面的命令中出现的CID、CSD、OCR、SCR等都是卡设备寄存器(SD/SDIO Card寄存器信息下文再单独介绍),实际上Host 与Card Device 之间的命令/响应信息交互,都是通过
Host 读写Card Device 的寄存器信息实现的。类似于,CPU控制SDIO Host 发送命令、解析响应、传输数据等操作,都是通过CPU 读写 SDIO Host 的寄存器信息实现的。
2.2.2 SDIO Response
Response从卡设备发回数据的令牌,回应主机之前发送的命令。每个响应也都有一个起始位(始终为0)、传输位(始终为0,表示Device –> Host 方向)和结束位(始终为1),总
长度为48 bits(短响应)或者136 bits(长响应),有相应的 CRC 校验码(除了R3/R4没有CRC)。响应信号也只在 CMD 线上传输,并且 MSB(Most Significant Bit) 为
先,Response的编码格式如下图所示:
剩余19页未读,继续阅读



















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0