STM32外设SDIO应用之SD卡1、 SD原理及内部结构Pin 3Pin 8Pin 7Pin 6Pin 5Pin 4Pin 2Pin 1Pin 9SD卡(Secure Digital Memory Card)是一种为满足安全性、容量、性能和使用环境等各方面的需求而设计的一种新型存储器件,SD卡允许在两种模式下工作,即SD模式和SPI模式1、SD卡内部及引脚示意图:引脚SD模式SPI模式名称描述名称描述1CD/DAT3卡检测/数据线(位3)CS芯片选择2CMD命令响应DI数据输入3VSS1电源地1VSS1电源地14VDD提供电压VDD提供电压5CLK时钟SCLK时钟6VSS2电源地2VSS2电源地27DAT0数据线(位0)DO数据输出8DAT1数据线(位1)RSV保留9DAT2数据线(位2)RSV保留2、SD模式及SPI模式引脚名称3、Micro SD引脚示意图及模式区别:引脚SD模式SPI模式名称描述名称描述1DAT2数据线(位2)RSV保留2CD/DAT3卡检测/数据线(位3)CS芯片选择3CMD命令响应DI数据输入4VDD提供电压VDD提供电压5CLK时钟SCLK时钟6VSS电源地VSS电源地7DAT0数据线(位0)DO数据输出8DAT1数据线(位1)RSV保留2、 SD模式1、 STM32的SDIO适配器原理框图:位4746[45:40][39:8][7:1]0宽度1163271数值01---1说明开始位传输位命令索引参数CRC7结束位2、SD命令格式3、SD通用命令命令索引类型参数响应格式缩写说明CMD0bc[31:0] 填充位-GO_IDLE_STATE重置所有卡为空闲状态CMD2bcr[31:0] 填充位R2ALL_SEND_CID要求所有卡发送CID号(任何连在总线上的卡都必须响应)CMD3bcr[31:0] 填充位R6SEND_RELATIVE_ADDR要求卡发送一个新的相对地址(RCA)CMD4bc[31:16] DSR[15:0] 填充位-SET_DSR规划所有卡的DSRCMD7ac[31:16] RCA[15:0] 填充位R1bSELECT/DESELECT_CARD使卡在备用和传输状态或者编程和断开状态之间切换。
在这两种情况下,当接收到的相对地址与自己的相同时卡被选中,不同时卡取消选中,而相对地址是0时,所有卡都不被选中,之后主机可能会执行如下操作:1、 使用其它的相对地址来选中卡2、 重新发送命令3更改卡的相对地址为0,再发送命令7,参数相对地址为0选中该卡CMD8bcr[31:12] 保留[11:8] 电源电压[7:0] 检验模式R7SEND_IF_COND发送SD存储卡的接口条件,包括主机支持的电压范围及询问卡是否支持保留位应当设置为“0”CMD9ac[31:16] RCA[15:0] 填充位R2SEND_CSD寻址卡并让其发送它的特殊数据寄存器(CSD)CMD10ac[31:16] RCA[15:0] 填充位R2SEND_CID寻址卡并让其发送识别号(CID)CMD12ac[31:0] 填充位R1bSTOP_TRANSMISSION强制卡停止传输CMD13ac[31:16] RCA[15:0] 填充位R1SEND_STATUS寻址卡并让其发送状态寄存器的数据CMD15ac[31:16] RCA[15:0] 保留-GO_INACTIVE_STATE使被寻址的卡进入不活跃状态,该命令用在主机明确想要去激活某张卡CMD16ac[31:0] 块大小R1SET_BLOCKLEN如果是标准容量SD存储卡,该命令为随后的块操作命令(读、写及上锁)设定块大小(单位为字节)。
块大小默认为512字节只有当该命令是CSD所允许时,才是一个合法的内存访问命令如果卡是高容量SD存储卡,使用该命令不会影响内存的读写命令,块大小总是固定的512字节该命令会影响卡上锁/解锁命令在这两种情形下,如果块大小被设置超过512字节,卡将会设置BLOCK_LEN_ERROR位CMD17adtc[31:0] 数据地址R1READ_SINGLE_BLOCK如果是标准容量SD存储卡,该命令会读取由SET_BLOCKLEN命令所设置大小的块如果卡是高容量SD存储卡,读取的块大小固定位512字节,不受SET_BLOCKLEN命令影响CMD18adtc[31:0] 数据地址R1READ_MULTIPLE_BLOCK使卡连续传输数据块到主机,直到被停止传输命令中断块大小的详细说明同上CMD24adtc[31:0] 数据地址R1WRITE_BLOCK如果是标准容量SD存储卡,该命令会写由SET_BLOCKLEN命令所设置大小的块如果卡是高容量SD存储卡,读取的块大小固定位512字节,不受SET_BLOCKLEN命令影响CMD25adtc[31:0] 数据地址R1WRITE_MULTIPLE_BLOCK连续写数据块到卡,直到被停止传输命令中断。
块大小的详细说明同上CMD27adtc[31:0] 填充位R1PROGRAM_CSD对CSD中可编程的位编程CMD28ac[31:0] 数据地址R1bSET_WRITE_PROT如果卡有写保护功能,该命令设置指定组的写保护位写保护特性设置在卡的特殊数据区(WP_GRP_SIZE)高容量SD存储卡不支持该命令CMD29ac[31:0] 数据地址R1bCLR_WRITE_PROT如果卡有写保护功能,该命令清除指定组的写保护位高容量SD存储卡不支持该命令CMD30adtc[31:0] 写保护数据的地址R1SEND_WRITE_PROT如果卡有写保护功能,该命令要求卡发送写保护位的状态高容量SD存储卡不支持该命令CMD32ac[31:0] 数据地址R1ERASE_WR_BLK_START设置第一个擦除组的地址CMD33ac[31:0] 数据地址R1ERASE_WR_BLK_END在连续的擦除范围内,设置最后一个擦除组的地址CMD38ac[31:0] 填充位R1bERASE擦除先前选择的数据块CMD42adtc[31:0] 保留R1LOCK_UNLOCK用来设置/重置密码或对卡上锁/解锁数据块的大小由SET_BLOCK_LEN命令设置。
保留位应当设置为“0”CMD55ac[31:16] RCA[15:0] 填充位R1APP_CMD指示卡下一个命令是应用相关命令而不是一个标准命令CMD56adtc[31:1] 填充位0 读/写R1GEN_CMD在通用或应用相关命令中,或者用于向卡中传输一个数据块,或者用于从卡中读取一个数据块如果是标准容量SD存储卡,数据块的大小由SET_BLOCK_LEN命令设置如果卡是高容量SD存储卡,数据块的大小固定位512字节当读/写位为“1”时,主机从卡读取数据,为“0”时写数据到卡里4、 SD应用命令命令索引类型参数响应格式缩写说明ACMD6ac[31:2] 填充位[1:0] 数据线宽度R1SET_BUS_WIDTH定义用于数据传输的数据线宽度(‘00’表示1位,‘10’表示4位)允许的数据线宽度由SCR寄存器给出ACMD13adtc[31:0] 填充位R1SD_STATUS返回SD状态ACMD18----预留给SD安全应用ACMD22adtc[31:0] 填充位R1SEND_NUM_WR_BLOCKS返回已写块的数量(未出错)如果WRITE_BL_PARTIAL是‘0’,ACMD22的单位总是512字节。
如果WRITE_BL_PARTIAL是‘1’,ACMD22的单位是写命令执行时的数据块大小ACMD23ac[31:23] 填充位[22:0] 块数量R1SET_WR_BLK_ERASE_COUNT在写数据前设置预写块的数量(用于更快的多块写命令)默认为‘0’(一个写数据块)ACMD25----预留给SD安全应用ACMD26----预留给SD安全应用ACMD38----预留给SD安全应用ACMD41bcr[31] 保留30 HCS(OCR[30])[29:24] 保留[23:0]供电电压窗口(OCR[23:0])R3SD_SEND_OP_COND发送主机的容量支持信息(HCS)到被访问的卡,并利用CMD线询问其工作条件寄存器(OCR)中的内容当卡接收到SEND_IF_COND命令时,HCS变得有效,保留位应当设置为0CCS位将被设置成对应OCR[30]中的内容ACMD42ac[31:1] 填充位0 设置R1SET_CLR_CARD_DETECT连接[1]或不连接[0]5万欧姆的电阻到卡CD/DAT3(引脚1)信号线上ACMD43...ACMD49----预留给SD安全应用ACMD51adtc[31:0] 填充位R1SEND_SCR读取SD配置寄存器(SCR)5、 响应格式响应格式位域宽度数值说明R14746[45:40][39:8][7:1]0116327100XXX1开始位传输位命令索引卡状态CRC7结束位R2135134[133:128][127:1]0116127100111111X1开始位传输位命令索引卡状态结束位R34746[45:40][39:8][7:1]0116327100111111X1111111开始位传输位保留OCR寄存器保留结束位R64746[45:40]11600X开始位传输位CMD3[39:8]1616XX卡新的相对地址(RCA)卡状态23,22,19,12:0[7:1]071。