一、SD卡概述
1、定义
SD卡(安全数码卡),是一种基于半导体快闪记忆器的新一代记忆设备,它被广泛地于便携式装置上使用,例如数码相机、个人数码助理(外语缩写PDA)和多媒体播放器等。
2、容量等级
容量等级 |
容量范围 |
磁盘格式 |
SD |
上限至2GB |
FAT 12, 16 |
SDHC |
2GB至 32GB |
FAT 32 |
SDXC |
32GB至2TB |
exFAT |
3、SD卡结构
(摘自SanDisk Secure Digital Card Product Manual Version 1.9)
① SD卡
由SD卡控制器和存储阵列组成,SD卡与外界的通讯接口是SD Bus或者SPI Bus。
② 存储阵列结构图
Block:
最小的读写单元,它的单位是“字节”。
Sector:
如果CSD寄存器ERASE_BLK_EN =
0时,Sector是最小的擦除单元,它的单位是“块”。Sector的值等于CSD寄存器中的SECTOR_SIZE的值+1。
WP Group:
最小的写保护单元,它的单位是“扇区”。
二、SD卡物理层
1、SD卡写数据块
执行写数据块命令(CMD24-27)
时,主机把一个或多个数据块从主机传送到卡中,同时在每个数据块的末尾传送一个CRC码,数据块的长度定义在CSD中的WRITE_BL_LEN。主机传送数据,SD卡接收数据并将数据保存在Buffer中,累计接收数据达到WRITE_BL_LEN长度的时候,SD卡把接下来的数据当做CRC校验码,并且开始数据校验。如果CRC校验错误,卡通过SDIO_D
线指示错误,传送的数据被丢弃而不被写入,所有后续(在多块写模式下)传送的数据块将被忽略。
如果主机传送部分数据而累计的数据长度未与数据块对齐,当不允许块错位(
未设置CSD的参数WRITE_BLK_MISALIGN),卡将在第一个错位的块之前检测到块错位错误( 设置状态寄存器中的ADDRESS_ERROR 错误位)
。当主机试图写一个写保护区域时,写操作也会被中止,此时卡会设置WP_VIOLATION位。
2、SD卡读数据块
在读数据块模式下,数据传输的基本单元是数据块,它的大小在CSD中(READ_BL_LEN)
定义。如果设置了READ_BL_PARTIAL,同样可以传送的较小数据块,较小数据块是指开始和结束地址完全包含在一个物理块中,READ_BL_LEN定义了物理块的大小。为保证数据传输的正确,每个数据块后都有一个CRC校验码。笔者认为主机在累计接收到READ_BL_LEN数据后,软件可以把接下来的数据当做CRC校验码,并且进行校验。
CMD17 (READ_SINGLE_BLOCK)启动一次读数据块操作,在传输结束后卡返回到发送状态。
3、擦除SD卡
CSD寄存器ERASE_BLK_EN决定了SD卡的最小擦除单位。
当ERASE_BLK_EN等于0的时候,主机擦除的最小单位是扇区。比如一个Sector包含32个Block,擦除时的起始地址是5,而结束地址是40,那么实际擦除的块是从0到63。
当ERASE_BLK_EN等于1的时候,主机擦除的最小单位是512
Byetes。比如擦除时的起始地址是5,而结束地址是40,那么实际擦除的块就是从5到40。
三、STM32与SD卡相配的外设--SDIO
四、SD卡编程
二、SD卡疑惑
1、SD卡擦除后,其中的内容是0,还是1 ?
The data at the card after an erase operation is either ‘0‘ or ‘1‘, depends
on the card vendor.The SCR register bit DATA_STAT_AFTER_ERASE (bit 55) defines
whether it is ‘0‘ or ‘1‘.(摘自《SD
Specifications_Part_1_Physical_Layer_Specification_Ver3.00_Final_090416.pdf》)