文档详情

STM32学习笔记之SD卡V20协议初始化.pdf

发布:2017-07-29约3.51千字共6页下载文档
文本预览下载声明
while(1)世界 STM32学习笔记 STM32学习笔记 STM32学习笔记 SSTTMM3322学学习习笔笔记记 SD卡V2.0协议初始化 《STM32学习笔记》由while(1)世界会员所总结的学习笔记, 供大家参考学习,有问题可以在while(1)世界的STM32版块提问, 共同讨论。 这一笔记是有会员liklon总结的学习笔记,如果有问题可以在 while(1)世界的STM32版块发帖提问!STM32版块也提供源代码下 载。笔记具体类容如下: while(1)世界 STM32学习笔记 现在使用的4G的SD卡,小于或等于2G的卡是属于标准SD卡,而大于2G的卡 小于32G的卡是大容量SD卡,也就是SDHC卡。对于SDHC卡的初始化和操作要 使用V2.0协议。看了几天的SD卡v2.0协议,现在总结一下啊。 首先是一个流程图,这个图在官方资料上有: SPI模式下SD卡部分操作指令 命令 参数 回应 描述 CM0(0X00) NONE R1 复位SD卡 CMD9(0X09) NONE R1 读取卡特定寄存器 CMD10(0X0A) NONE R1 读取卡标志寄存器 CMD16(0X10) 块大小 R1 设置块的大小(字节数) CMD17(0X11) 地址 R1 读取一块的数据 CMD24(0X18) 地址 R1 写入一块的数据 while(1)世界 STM32学习笔记 CMD41(0X29) NONE R1 开始卡的初始化 CMD55(0X37) NONE R1 引用命令的前命令 CMD59(0X3B) 最后一位有效 R1 设置CRC开启(1)或关闭(0) SD卡R1回应格式: BIT BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 7 0 参数错误 地址错误 连续擦除错误 命令CRC错误 非法命令 擦除复位 IDLE状态 卡会根据不同的时候处在不同的状态 第一步操作: 复位 SD卡上电后先发送(74个时钟),因为SD卡有个供电电压上升过程需要大约 64个时钟,之后的10个时钟是用来与SD卡同步(参考《例说STM32》)。参考代 码: for(count = 0;count 15;count++) SPI_WriteReadByte(0xff); //产生74个以上的脉冲 SD卡默认是SD模式,现在用STM32去操作,切换为SPI模式后更好操作。所以 while(1)世界 STM32学习笔记 在片选为低时发送CMD0,此时卡进入IDLE状态,因为CMD0回应的命令是R1, 根据上面R1的回应格式可以看出我们自需要检查最低位就知道是否处于 IDLE 状态。参考代码: do { tmp = SD_WriteCommand(CMD0,0,0X95); //发送SD count++; }while((tmp != 0x01) (count DISPLAY_COUNT)); 第二步操作发送CMD8来分辨卡的类型,是V2.0卡还是V1.0卡或MMC卡,还可 以检测CMD8响应返回的数据判断是否支持给定的工作电压范围。 根据流程图可以看出。 1.如果SD卡支持当前的电压就会返回R7,并包含CMD8的参数部分,其中包括: Check voltage和check pattern。 2.如果SD卡不支持当前的工作电压则不会返回任何响应信息,继续处在 IDLE 状态。如果是V1.0x的SD卡也不会有响应。 3.在PLV2.0(physical layer
显示全部
相似文档