首页 > 代码库 > STM32之SD卡

STM32之SD卡

一、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》)