因为一张SD卡要能读写,涉及到的技术有些多,我打算分如下几篇博客html
【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(一)-初步认识SD卡git
【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(二)-了解SD总线,命令的相关介绍函数
【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(三)-SD卡的操做流程网站
【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(四)-介绍库函数,获取一些SD卡的信息spa
【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(五)-FatFs的介绍(暂定,待研究FatFs后,写博客)htm
【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(六)-实现SD卡的读取(暂定,完成第五篇博客后,填写第六篇)blog
先介绍几个协会的网站,里面有相关的文件接口
多媒体卡协会网站:www.mmca.org(STM32F4的SDIO支持的一种通信,但不是本文的重点)图片
SD卡协会网站:www.sdcard.orgget
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协议,因此不支持
另外SDHC卡,有些数据块大小是512,有的是1024,STM32F4只支持读取512大小的,意思是说,SDHC卡的一部分也不支持的
其余相关的技术,能够去SD卡协会网站查看
下面来讲明一下SD卡的引脚
SD卡的读取方式有两种:SDIO、SPI
【SDIO模式】
CLK:时钟,通讯过程须要的东西,没这个东西,数据会不稳定
CMD:命令,可下达命令,例如读取SD卡的信息,或是写入数据等等
DAT0、一、二、3:数据线
VCC、VSS:电源和地
【SPI模式】
CLK:时钟,理由同SDIO里面的CLK
MOSI:命令或数据输出到SD卡
MISO:SD卡传输数据到主机
CS:片选,选择是否要操做当前的SD卡
SDIO的存储速度会高于SPI,假设都是SD卡传输数据到主机
SPI只有MISO这1条数据线,而SDIO有4条数据线(固然,SDIO也能够只使用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)的部分