STM32使用SDIO进行SD卡读写-初步认识SD卡

Posted pureheart

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32使用SDIO进行SD卡读写-初步认识SD卡相关的知识,希望对你有一定的参考价值。

先介绍几个协会的网站,里面有相关的文件

多媒体卡协会网站:www.mmca.org(STM32F4的SDIO支持的一种通讯,但不是本文的重点)

SD卡协会网站:www.sdcard.org

CE-ATA:www.ce-ata.org(STM32F4的SDIO支持的一种通讯,但不是本文的重点)

我会着重在SD卡和SDIO协议的部分,以下图片截至SD卡协会网站

技术图片

原本SD协议是用在存储上的(图片蓝底处),后来扩展了一个叫SDIO的协议(全名:Secure Digital Input and Output)(图片紫底红框处)

这个协议属于外设接口,使得它能连接一些外设,例如:GPS 相机 Wi-Fi 调频广播 以太网 条形码读卡器 蓝牙,从此跳出存储这个局限

 

下面是几种卡的类型(容量),配合上面图片写的图标

另外,我没能找到SDUC的SD卡

技术图片

STM32F4里,只支持SD 2.0协议,SD和SDHC属于这个范畴,SDXC是4.0协议,所以不支持

其他相关的技术,可以去SD卡协会网站查看

 

下面来说明一下SD卡的引脚

技术图片

SD卡的读取方式有两种:SDIO、SPI

【SDIO模式】

CLK:时钟,通信过程需要的东西,没这个东西,数据会不稳定

CMD:命令,可下达命令,例如读取SD卡的信息,或是写入数据等等

DAT0、1、2、3:数据线

VCC、VSS:电源和地

【SPI模式】

CLK:时钟,理由同SDIO里面的CLK

MOSI:命令或数据输出到SD卡

MISO:SD卡传输数据到主机

CS:片选,选择是否要操作当前的SD卡

 

SDIO的存储速度会高于SPI,假设都是SD卡传输数据到主机

SDIO有4条数据线,而SPI只有MISO这1条

另外,SDIO相当于总线,它可以挂载很多SD卡,但是STM32F4只支持一张SD卡

在与SD卡操作的过程中,会有两种不同的操作频率

第一种:识别SD卡阶段的时钟频率FOD,最高为400KHz

第二种:后续数据传输的时钟频率FPP,默认最高为25MHz,还可以透过寄存器修改,修改后最高为50MHz

 

下面介绍SD卡的8个寄存器

技术图片

CID:卡识别寄存器,一些制造商ID、版本、日期等相关讯息

RCA:相对卡地址寄存器,初始化时,动态由主机确定,后续挂载在SDIO总线上时,透过RCA找到对应的SD卡来进行操作

DSR:驱动级寄存器,配置卡的输出驱动

CSD:卡的特殊数据寄存器,SD卡的操作信息

SCR:SD配置寄存器,SD卡的特殊信息

OCR:操作条件寄存器,例如SD卡的电压信息

SSR:SD状态寄存器,SD卡专有的特征信息

CSR:SD卡状态寄存器,SD卡的状态信息

 

这一章节先结束,下一章来说明命令(CMD)的部分

 

以上是关于STM32使用SDIO进行SD卡读写-初步认识SD卡的主要内容,如果未能解决你的问题,请参考以下文章

STM32CubeMX学习笔记(26)——SDIO接口使用(读写SD卡)

第36章 SDIO—SD卡读写测试

STM32F407 - SDIO | FATFS - 将文件保存到 SD 卡

嵌入式用STM32F103完成对SD卡的数据读取

RT-Thread Studio快速配置AB32读写SD卡

STM32CubeMx之SD卡驱动