本帖最后由 susutata 于 2023-4-26 10:10 编辑
APM32外设SDIO和SD卡的配置 - 上
01 SD Card简介
SD卡(SD Card,Secure Digital Memory Card),是一种安全数码卡。现在已经被TF卡(MicroSD)取代。TF卡已经成为最广泛应用于数码、存储等便携设备上的新型快闪存储卡。SD卡和TF卡有不同的容量标准和速度等级。
容量标准SD卡和TF卡的容量标准如下表所示。
速度等级速度等级如下表所示。 SD卡的结构SD卡的结构组成包括存储单元、存储单元的接口、电源检测、卡及接口控制器和接口驱动器。 存储单元是存储数据的部件,存储单元通过存储单元接口与卡控制单元进行数据的传输; 电源检测单元保证SD卡工作在合适的电压下,如果出现掉电或者异常状态时,它会使控制单元和存储单元接口复位; 卡及接口控制单元控制SD卡的运行状态,包含几个特殊寄存器; 接口驱动器控制SD卡引脚的输入和输出。
PIN脚定义标准SD卡有九个对外的触点,SD模式和SPI模式下的引脚定义不同。
SD Mode
SPI Mode
存储单元读写SD卡数据的基本单位是1 byte,所有数据都是以block的形式来传输的。SDHC标准卡的数据块长度为512 bytes。每个sector扇区的block大小是固定的,定义在CSD寄存器中。 ->block长度可以通过CSD寄存器自定义
SD卡的寄存器
OCROperation Conditions Register (OCR),操作条件寄存器,存储着SD卡的VDD电压配置文件,寄存器结构如下。 CIDCard Identification Register (CID),卡标识寄存器,长度共16字节,包含唯一的卡识别码。寄存器结构如下图所示。 CSDCard Specific Data (CSD) Register,卡描述数据寄存器,用于获取SD卡的信息。具体结构大家可以查看官方手册。
RCARelative Card Address (RCA),卡相对地址寄存器,此地址用于卡识别程序后寻址的主机卡通信。 ->此外还有SSR和CSR等,而SPI模式下的寄存器基本一致,有些微小区别,具体可以查看官方手册。
SD总线根据PIN脚定义可知,SD卡的MMC(MultiMediaCard)总线包括下图中的信号。
特点1.通电后,默认情况下,SD卡只使用DAT0进行数据的传输 2.完成初始化后,SD总线允许动态配置数据线的数量
SPI总线和普通SPI总线一样,带有SCK、CS、MOSI和MISO四个信号。SPI的相关SD配置,这里不展开,具体可以查看官方手册。
SD总线协议SD 总线上的通信是基于命令和数据传输的。通信过程由一个起始位(“0”)启动,而由一个停止位(“1”) 终止。SD总线的基本交互过程是命令和响应的交互,一般是主机向从机发送一个命令(Command),从设备在接收到命令后作出响应(Response),如果有数据的传递需求,则会有数据(Data)的传输参与到整个通信过程中。
命令格式SD 命令格式固定为48bit,都是通过CMD 线连续传输的。
命令类型命令类型共有四种,分别是: 1.Broadcast(bc),无响应广播命令,发送到所有卡,不返回任务响应; 2.Broadcast w/Response(bcr),带响应广播命令,发送到所有卡,同时接收来自所有卡响应; 3.Addressed point-to-point(ac),寻址命令,发送到选定卡,DAT 线无数据传输; 4.Addressed point-to-point data transfer(adtc),寻址数据传输命令,发送到选定卡,DAT 线有数据传输。 ->另外还有两种通用命令,特定应用命令(ACMD) 和常规命令(GEN_CMD)。其中ACMD命令发送前,需要先发送CMD55 命令。
基本命令(Class 0)
block读命令(Class 2)
block写命令(Class 4)
擦除命令(Class 5)
锁卡命令(Class 7)
特定应用命令(Class 8)
SD卡特定应用命令
响应响应由SD 卡通过CMD线向主机发出,有些命令要求响应,有些不要求,SDIO 总线共有7 种响应类型(R1 ~ R7)。 ->SD 卡不支持R4和R5 类型的响应
R1标准响应->如果有传输到卡的信号,那么在数据线上可能有busy的信号(R1b)出现
R2 CID,CSD寄存器响应
->CID寄存器的值是CMD2和CMD10命令的响应,而CSD寄存器内容是CMD9命令的响应
R3 OCR寄存器响应
->OCR寄存器的值是ACMD41命令的响应
R6 发布的RCA寄存器响应
->专用于CMD3的响应
R7 发布的RCA寄存器响应
->专用于CMD8命令的响应,返回卡所支持的电压范围和检测模式
数据包使用所有wide bus时,每一次数据传输4个bit,每条线路的CRC是独立计算和校验的。SD卡只在DAT0线路上向主机发送CRC状态响应和Standard busy信号。下图中CMD53命令和ACMD13命令的两个数据包传输例子。
卡状态类型和操作模式
卡识别模式在该模式下,主机会对所有处于“卡识别模式”的SD 卡进行复位操作,然后确认其工作电压范围,识别SD卡类型,并且获取SD 卡的相对地址(RCA)。下图是该模式下的SD卡状态转换图。 1.主机也可以发送 CMD0让所有卡软复位进入空闲状态,但当前处于Inactive State的卡不会复位 2.主机在与卡开始通信前,需要先确认双方在互相支持的电压范围内。SD 卡内的寄存器有一个电压支持范围,主机当前的电压必须在该范围内才能与卡正常通信,CMD8可以用于该操作。 3.ACMD41命令可以识别或拒绝不匹配主机电压范围的SD卡 4.CMD2命令要求所有卡返回CID 5.CMD3命令是让卡推荐一个RCA,RCA是16bit的地址,相对于使用CID(128bit)进行通信会更简化
数据传输模式SD 卡系统处于数据传输模式下,主机才可以对其进行数据读写。数据传输模式下可以将主机SD时钟频率设置为FPP,默认最高为25MHz。 1.数据传输模式下,主机和目标卡通信都是通过RCA来点对点通信的 2.CMD7命令用来选中和取消选中卡
下篇会介绍APM32的SDIO外设,以及SD卡的驱动和应用方法。
|