SD卡简介与驱动开发
基本概念
存储卡有很多种类,CF卡、记忆棒、SD卡、XD卡、MMC卡、MS卡、TF卡、MicroSD卡等。平时最常见的有SD卡和MicroSD卡两种, SD卡和MicroSD只是两张卡的大小不同,规格版本是完全相同的,均由SD卡协会推出。
SD卡有不少规范,常用包含存储空间和存储速度两种,厂商会把满足的规范的图标印在卡面上,所以通过卡上有的规格,就能很快判断出这张卡的容量、类型和最低速度,甚至适用场景。
容量
SD | 早期版本现在已经基本停用,最高容量2GB,分区格式为FAT12(FAT)或FAT16 | ![]() |
DHC | SDHC:技术很成熟的种类,容量为4GB-32GB,分区格式为FAT32。 | ![]() |
SDXC | SDXC:目前市场存储卡的主流,容量为64GB-2TB,分区格式为exFAT。 | ![]() |
SDUC | 新推出的版本,容量为2TB-128TB,分区格式为exFAT。 | ![]() |
速度分级
Class 2 大于等于2MB/s | ![]() |
Class 4 大于等于4MB/s | ![]() |
Class 6 大于等于6MB/s | ![]() |
Class 10 大于等于10MB/s | ![]() |
UHS总线模式
UHS-I | 最大读取速度104MB/s | ![]() |
UHS-II | 最大读取速度312MB/s | ![]() |
UHS-III | 最大读取速度624MB/s | ![]() |
SD Express I | 最大读取速度985MB/s | ![]() |
UHS速度等级
U1 | 最低写入速度10M/S | |
U3 | 最低写入速度30M/S | ![]() |
举例
总线模式
SD模式
SPI模式
引脚对应
SD卡寄存器
上电时序要求
SD卡在上电要求250ms内电压必须要达到要求的最小电压值,并且至少需要保持74个SD卡时钟周期以保证CMD线变为高电平,SPI模式下则要求CS信号线在至少74个CLK时钟保持高电平
控制协议(以SD模式举例)
command
command共包含6个字节
Response
Response 包含不同的种类,不同种类的长度不一样
SD卡协议规定了不同的Command对应的Response
Data
命令控制时序
块读取时序
块写入时序
工作模式
SD卡根据上电后默认为SD卡模式,后所接收的指令来决定是否切换为SPI模式,SPI模式属于SD卡控制的附加模式
切换方式:在CS引脚为低电平条件下向SD卡发送CMD0 (复位指令),返回R1寄存器状态OK表示切换完成
退出方式:一旦切换为SPI模式,无法退回至SD模式,除非重新上电
两种工作模式各有优劣
SD模式: 速率更高,线路多,通信较为复杂
SPI模式:速率相对较低,更加通用,线路少,控制简单
SD模式
SD模式下的SD卡初始化流程
最重要的是ACMD41和CMD8命令及其结果返回
注意事项:初始化前应当考虑将SD卡的时钟线频率配置在400kHz以下,初始化完成后再恢复时钟频率
SPI模式
SPI模式下的初始化与SD模式相差无几,
1、SPI模式下需要先控制SD卡进入到SPI模式
2、SPI模式下的命令/返回/时序等要求与SD模式都存在区别,需要区别对待
3、初始化流程中ACMD41/CMD8命令最为重要
ACMD41返回
CMD8返回
SPI模式驱动举例
SPI时序要求
发送命令时序
时序中存在不确定的等待周期,如NCS NEC等,因此包含NCR在内的等待过程都需要设置重试等待机制,推荐使用
do while方式进行编程实现
块读取
对于读到的数据而言,其包含以下结构,首字节为0xFE, 中间数据为块大小数据,最后为2byte的CRC校验值
块写入时序
参考资料:home - SD Association