SD卡学习(SDIO和SPI模式) | 您所在的位置:网站首页 › sd卡速度快就不卡了吗 › SD卡学习(SDIO和SPI模式) |
SD卡的操作模式:SD卡模式(SDIO)、SPI模式(默认为SD模式)。 其中SD卡模式的信号线有:CLK、CMD、DAT0-DAT3,6根线。 SPI模式的信号线有:CS、CLK、MISO(DATAOUT)、MOSI(DATAIN),4根线。 SD卡只能使用3.3V的I/O电平。SPI模式下信号线要加10-100K的上拉电阻。 SD卡有五个寄存器: 名称宽度描述CID128卡标识寄存器RCA16相对地址寄存器(Relative Card Address):本地系统中卡的地址,动态变化,在主机初始化的时候确定,SPI模式中没有。CSD128卡描述数据:卡操作条件相关的信息数据SCR64SD配置寄存器:SD卡特定信息数据OCR32操作条件寄存器SD卡的命令格式: 命令CMD0就是0,CMD16就是16,以此类推。 SPI命令格式为6字节构成,高位在前(MSB)。 字节1字节2-5字节6765-001command字节1的最高2位固定是01,低6位为命令号(CMD0就是0,CMD16就是16,以此类推),字节2-5为命令参数,有些命令是没有参数的;字节6的高7位为CRC,最低位恒为1。 SD卡的命令总共有12类,下表为几个比较重要的命令: SD卡的主要相关各种命令解析 CMD0: SD卡进入IDLE和复位SD卡 CMD1: 读OCR,是否为SD卡 CMD2: 获取卡CID信息 CMD3: 获取SD卡所分配的相对地址 CMD9: 获取SD卡的存储信息(容量、块大小等) CMD12:停止传输操作 CMD13:获取卡的状态 CMD16:设置SD卡块大小 CMD17:使SD卡进入传输状态、读取单个块 CMD18: 使SD卡进入传输状态、读取多个块,直到收到CMD12为止 CMD24:使SD卡进入传输状态、写入单个块 CMD25: 使SD卡进入传输状态、写入多个块 命令参数回应描述CMD0(0X00)NONER1复位SD卡CMD8(0X08)VHS+Check PatternR7发送接口状态命令CMD9(0X09)NONER1读取卡特定数据寄存器CMD10(0X0A)NONER1读取卡标志数据寄存器CMD16(0X10)块大小R1设置块大小(字节数)CMD17(0X11)地址R1读取一个块的数据CMD24(0X18)地址R1写入一个块的数据CMD41(0X29)NONER3发送给主机容量支持信息和激活卡初始化过程CMD55(0X37)NONER1告诉SD卡,下一个是特定应用命令CMD58(0X3A)NONER3读取OCR寄存器SD卡和单片机的通信采用发送应答机制: 初始化SD卡过程: SPI操作模式下:在SD卡收到复位命令时,CS为有效电平(低电平),则SPI模式被启用,在发送CMD之前要先发送74个时钟,64个为内部供电上升时间,10个用于SD卡同步;之后才能开始CMD操作,在初始化时CLK时钟不能超过400KHz。 接着我们看看SD卡的初始化,** SD卡的典型初始化过程如下:** 1、初始化与SD卡连接的硬件条件(MCU的SPI配置,IO口配置); 2、上电延时(>74个CLK); 3、复位卡(CMD0),进入IDLE状态; 4、发送CMD8,检查是否支持2.0协议; 5、根据不同协议检查SD卡(命令包括:CMD55、CMD41、CMD58和CMD1等); 6、取消片选,发多8个CLK,结束初始化 这样我们就完成了对SD卡的初始化,注意末尾发送的8个CLK是提供SD卡额外的时钟,完成某些操作。通过SD卡初始化,我们可以知道SD卡的类型(V1、V2、V2HC或者MMC),在完成了初始化之后,就可以开始读写数据了。 SD卡读取数据,这里通过CMD17来实现,具体过程如下: 1、发送CMD17; 2、接收卡响应R1; 3、接收数据起始令牌0XFE; 4、接收数据; 5、接收2个字节的CRC,如果不使用CRC,这两个字节在读取后可以丢掉。 6、禁止片选之后,发多8个CLK; 以上就是一个典型的读取SD卡数据过程,SD卡的写于读数据差不多,写数据通过CMD24来实现,具体过程如下: 1、发送CMD24; 2、接收卡响应R1; 3、发送写数据起始令牌0XFE; 4、发送数据; 5、发送2字节的伪CRC; 6、禁止片选之后,发多8个CLK; 以上就是一个典型的写SD卡过程。关于SD卡的介绍,我们就介绍到这里,更详细的介绍请参考光盘SD卡的参考资料(SD卡2.0协议)。 参考资料: STM32之SD卡 SD卡简介(SPI方式) |
CopyRight 2018-2019 实验室设备网 版权所有 |