SD卡
SD卡是Secure Digital Card的英文缩写,直译就是“安全数字卡”。
目前市面上按物理规格来看,常见的SD卡有三种:
- 标准的SD卡,这种卡比较大,在有些相机或者PC电脑上会使用;
- 第二种是miniSD
- 最后一种是叫TF卡,也称mircoSD,这种卡比较小,是我们最常接触的,像我们的手机里面使用的就是这种卡。很多人基本上都管我们手机使用的那种卡叫SD卡,这样的叫法实际上不够准确,更准确应该是叫TF卡,但是不管怎样,都没人会去计较,能理解就行。
SD卡分类
SD卡按容量(Capacity)分类,可以分为标准容量卡、高容量卡,扩展容量卡,详细如下:
- Standard Capacity SD Memory Card (SDSC): 这种卡容量小于等于2GB
- High Capacity SD Memory Card (SDHC): 这种卡容量大于2GB,小于等于32GB
- Extended Capacity SD Memory Card (SDXC):这种卡容量大于32GB, 小于等于2TB
SD卡按供电范围划分,分两种:
- High Voltage SD Memory Card: 操作的电压范围在2.7-3.6V
- UHS-II SD Memory Card: 操作的电压范围,VDD1: 2.7-3.6V, ,VDD2: 1.70-1.95V
除此之外还有其他多种,比如SD1.0,SD2.0,SD3.0以及根据速率分类,不在阐述
SD卡引脚定义
SD卡通信模式
SD卡一般支持两种通信模式,SPI模式和SD模式,这两种模式分别需要使用到的信号及其对应关系如下表:
SD模式信号名 | SPI模式信号名 |
---|---|
SD_CLK | SD_CLK |
SD_CMD | SD_DATAIN |
SD_DATA0 | SD_DATAOUT |
SD_DATA1 | – |
SD_DATA2 | SD_CLK |
SD_DATA3 | SD_CS |
SD卡数据读写时间要求不是很严格的情况下,选用SPI模式可以说是一种最佳的解决方案。因为在SPI模式下,使用相对简单,只要四条线就可以完成所有的数据交换。
SD卡命令协议
- SD卡的协议是一种简单的命令/响应的协议。全部命令由主机发起,SD卡接收到命令后并返回响应数据。
- 根据命令的不同,返回的数据内容和长度也不同。
- SD卡命令是一个6字节组成的命令包,其中第一个字节为命令号,命令号高位bit7和bit6为固定的“01“,其它6个bit为具体的命令号。第2个字节到第5个字节为命令参数。第6个字节为7个bit 的CRC校验加1个bit的结束位。如果在SPI模式的时候,CRC校验位为可选。
SD卡对每个命令会返回一个响应,每个命令有一定的响应格式。响应的格式跟给它的命令号有关。在SPI模式中,有三种响应格式:R1(1个字节),R2(2个字节),R3(5个字节)
常用的SD命令及响应格式:
SD卡时序
SPI模式初始化
SD卡上电后,默认为SD模式,只要在发送CMD0命令的同时使得CS置低,若SD卡返回响应无错误,则已经进入了SPI模式。一旦选择了SPI模式,只有当SD卡掉电重启后,才会退出SPI模式。
SPI模式初始化步骤
- 发送CMD0,需要返回0x01,进入Idle状态(这一步同时需要令CS置低,选择SPI模式);
- 为了区别SD卡是2.0还是1.0,或是MMC卡,这里根据协议向下兼容的原则,首先发送只有SD2.0才有的命令CMD8,如果CMD8返回无错误,则初步判断为2.0卡,进一步发送命令循环发送CMD55+ACMD41,直到返回0x00,确定SD2.0卡;
- 如果CMD8返回错误则判断为1.0卡或是MMC卡,循环发送CMD55+ACMD41,返回无错误,则为SD1.0卡,到此SD1.0卡初始成功,如果在一定的循环次数下,返回为错误,则进一步发送CMD1进行初始化,如果返回无错误,则确定为MMC卡,如果在一定的次数下,返回为错误,则不能识别该卡,初始化结束。
- CS拉高。
数据读取
- 发送CMD17(单块)或CMD18(多块)读命令,返回0x00;
- 接收数据开始令牌0xfe(或0xfc)+正式数据512Bytes + CRC校验2Bytes。默认正式传输的数据长度是512Bytes,可用CMD16设置块长度。
数据写入
- 发送CMD24(单块)或CMD25(多块)写命令,返回0x00;
- 发送数据开始令牌0xfe(或0xfc)+正式数据512Bytes + CRC校验2Bytes。
TF卡
TF卡是SD卡的一种
TF卡引脚定义
与SD卡区别
TF卡即是T-Flash卡,又叫micro SD卡,即微型SD卡。
TF卡有八个引脚,仅仅比SD卡少一个引脚,即SD卡的一个VSS引脚