重学STM32---(八)----SDIO

本文详细介绍了SDIO(SD/SDIOMMC卡主机模块)在嵌入式系统中的作用,包括SD卡、MMC卡、SDIO卡及CE-ATA设备的特性与应用。深入探讨了SDIO的命令传输机制,响应类型,以及如何实现卡的初始化和识别过程。
摘要由CSDN通过智能技术生成

1.  SDIO(SD/SDIO MMC卡主机模块)在AHB外设总线和多媒体卡(MMC)、SD存储卡、SDIO卡和CE-ATA设备间提供了操作接口。(SDIO没有SPI兼容的通信模式 )

1.1.什么是MMC卡

MMC:MMC就是MultiMediaCard的缩写,即多媒体卡。它是一种非易失性存储器件,体积小巧(24mm*32mm*1.4mm),容量大,耗电量低,传输速度快,广泛应用于消费类电子产品中。

1.2.什么是SD卡

SD:SD卡为Secure Digital Memory Card, 即安全数码卡。它在MMC的基础上发展而来,增加了两个主要特色:SD卡强调数据的安全安全,可以设定所储存的 
使用权限,防止数据被他人复制;另外一个特色就是传输速度比2.11版的MMC卡快。在数据传输和物理规范上,SD卡(24mm*32mm*2.1mm,比MMC卡更厚一点),向前兼容了MMC卡.所有支持SD卡的设备也支持MMC卡。SD卡和2.11版的MMC卡完全兼容。

1.3.什么是SDIO

SDIO:SDIO是在SD标准上定义了一种外设接口,它和SD卡规范间的一个重要区别是增加了低速标准。在SDIO卡只需要SPI和1位SD传输模式。低速卡的目标应用是以最小的硬件开销支持低速IO能力。

 

现在已经有非常多的手机或是手持装置都支持 SDIO 的功能(SD 标准原本就是针对 mobile device 而制定),而且许多 SDIO 外围也都被开发出来,让手机外接外围更加容易,并且开发上更有弹性(不需要内建外围)。目前常见的 SDIO 外围(SDIO 卡)有:

· Wi-Fi card(无线网络卡) 

· CMOS sensor card

· GPS card 

· GSM/GPRS modem card 

· Bluetooth card 

·  Radio/TV card

SDIO 的应用将是未来嵌入式系统最重要的接口技术之一,并且也会取代目前 GPIO 式的 SPI 接口。

1.4. CE-ATA 一种基于为了节省接口IO数量,专为轻薄笔记本硬盘设计的笔记本硬盘高速通讯接口

 

2. SDIO功能描述 

2.1 复位后默认情况下SDIO_D0用于数据传输。初始化后主机可以改变数据总线的宽度。(通过SDIO时钟控制寄存器(SDIO_CLKCR) 改变
2.2 如果一个多媒体卡接到了总线上,则SDIO_D0、SDIO_D[3:0]或SDIO_D[7:0]可以用于数据传输。MMC版本V3.31和之前版本的协议只支持1位数据线,所以只能用SDIO_D0。

2.3 如果一个SD或SD I/O卡接到了总线上,可以通过主机配置数据传输使用SDIO_D0或SDIO_D[3:0]。所有的数据线都工作在推挽模式。

2.4 SDIO_CMD有两种操作模式:
● 用于初始化时的开路模式(仅用于MMC版本V3.31或之前版本)
● 用于命令传输的推挽模式(SD/SD I/O卡和MMC V4.2在初始化时也使用推挽驱动)
2.5 SDIO_CK是卡的时钟:每个时钟周期在命令和数据线上传输1位命令或数据。对于多媒体卡V3.31协议,时钟频率可以在0MHz至20MHz间变化;对于多媒体卡V4.0/4.2协议,时钟频率可以在0MHz至48MHz间变化;对于SD或SD I/O卡,时钟频率可以在0MHz至25MHz间变化。(初始化时不大于400KHz)
SDIO使用两个时钟信号: 
● SDIO适配器时钟(SDIOCLK=HCLK) 72MHz
● AHB总线时钟(HCLK/2)   


3. SDIO命令传输

3.1 命令:命令是用于开始一项操作。主机向一个指定的卡或所有的卡发出带地址的命令或广播命令(广播命令只适合于MMC V3.31或之前的版本)。命令在CMD线上串行传送。所有命令的长度固定为48位,下表给出了多媒体卡、SD存储卡和SDIO卡上一般的命令格式。

命令通道操作于半双工模式,这样命令和响应可以分别发送和接收。如果CPSM不处在发送状态,SDIO_CMD输出处于高阻状态,SDIO_CMD上的数据与
SDIO_CK的上升沿同步。

所有的命令都是由 STM32F1 发出,其中开始位、传输位、CRC7 和结束位由 SDIO硬件控制,我们需要设置的就只有命令索引和参数部分。其中命令索引(如 CMD0,CMD1 之类的)在 SDIO_CMD 寄存器里面设置,命令参数则由寄存器 SDIO_ARG 设置。一般情况下,选中的 SD卡在接收到命令之后,都会回复一个应答(注意 CMD0 是无应答的),这个应答我们称之为响应,响应也是在 CMD线上串行传输的。STM32F1 的 SDIO控制器支持 2 种响应类型,即:短响应(48 位)和长响应(136 位),这两种响应类型都带 CRC 错误检测(注意不带 CRC 的响应应该忽略 CRC 错误标志,如 CMD1 的响应)。


3.2  响应:响应是由一个被指定地址的卡发送到主机,对于MMC V3.31或以前版本所有的卡同时发送响应;响应是对先前接收到命令的一个应答。响应在CMD线上串行传送。

SDIO支持2种响应类型,2种类型都有CRC错误检测: (如果响应不包含CRC(如CMD1的响应),设备驱动应该忽略CRC失败状态)

● 48位短响应 
● 136位长响应



命令寄存器(SDIO_CMD)包含命令索引(发至卡的6位)和命令类型;命令本身决定了是否需要响应和响应的类型、48位还是136位

  同样,硬件为我们滤除了开始位、传输位、CRC7 以及结束位等信息,对于短响应,命令索引存放在 SDIO_RESPCMD 寄存器,参数则存放在 SDIO_RESP1 寄存器里面。对于长响应,则仅留 CID/CSD位域,存放在 SDIO_RESP1~SDIO_RESP4 等4 个寄存器。

例如:CMD9和CMD10

   命令索引  是否需要响应  命令参数   响应的类型、48位还是136位          

响应格式有:R1,R1b,R2,R3,R4,R4b,R5,R6,R7(stm32参考手册SDIO响应格式)

 

4. 命令与响应

应用相关命令和通用命令
      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格式。


5. Card Initialization and Identification Process :




程序太多,不会写,只能参考网上的。。。。。╮(╯▽╰)╭

 

 







转载于:https://www.cnblogs.com/qigaohua/p/5362713.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值