SD卡的SPI模式的初始化顺序
2015-01-10 02:13
246 查看
2.清晰明了的MMC卡时序图(虽然这个是MMC卡的,但是在初始化的时候CMD0的时序是一样的)
电路:我用的SD卡的电路其实很简单,参考SD卡的官方资料中的电路链接就可以的。
供电问题:由于SD卡的电压是3.3V,所以你的CPU必须支持3.3V的IO端口输出。
再来说一说鸡毛蒜皮的细节:
1.为了使SD卡初始化进入SPI模式,我们需要使用的命令有3个:CMD0,ACMD41,CMD55(使用ACMD类的指令前应先发CMD55,CMD55起到一个切换到ACMD类命令的作用)。
2.为什么在使用CMD0以后不使用CMD1?CMD1是MMC卡使用的指令,虽然本文并不想讨论MMC卡的问题,但是我还是要说:为了实现兼容性,上电或者发送CMD0后,应该首先发送CMD55+ACMD41确认是否有回应,如果有回应则为SD卡,如果等回应超时,则可能是MMC卡,再发CMD1确认。
3.正确的回应内容应该是:
CMD0——0x01(SD卡处于in-idle-state)
CMD55——0x01(SD卡处于in-idle-state)
ACMD41——0x00(SD卡跳出in-idle-state,完成初始化准备接受下一条指令)
这里要说的是如果最后的回应内容还是0x01的话,可以循环发送CMD55+ACMD41,直到回应的内容0x00。
4.在所有的指令中,唯独CMD0特殊,在向SD卡发送以前需要向SD卡发送74+个时钟。那么为什么要74个CLK呢?因为在上电初期,电压的上升过程据SD卡组织的计算约合64个CLK周期才能到达SD卡的正常工作电压他们管这个叫做Supplyramp uptime,其后的10个CLK是为了与SD卡同步,之后开始CMD0的操作,严格按照此项操作,一定没有问题。
5.关于SD卡的SPI总线,在读入数据时SD卡的SPI是CLK的上升沿输入锁存,输出数据也是在上升沿。
6.向SD卡写入一个CMD或者ACMD指令的过程是这样的:
首先使CS为低电平,SD卡使能;其次在SD卡的Din写入指令;写入指令后还要附加8个填充时钟,是SD卡完成内部操作;之后在SD卡的Dout上接受回应;回应接受完毕使CS为低电平,再附加8个填充时钟。
7.在SD卡的Din没有数据写入时,应使Din保持高电平。
SD卡要点及心得:
写入一个CMD命令时,首先将CS拉低,在SD卡的DIN引脚输入命令及相应的参数和校验码后,再附加8个CLK,此处写即是为了读,必须有时钟才能读数据的,现在就可以从接受缓冲寄存器里面读数据了,因为写入的是无效的指令,所以SD卡不会给予反应,在此期间SD卡的片选都应该是低电平,这样才能正确的读出数据。
SD卡的初始化,需要先给予至少74个CLK后,再发送CMD0,因为CMD0没有参数,后面发出3个字节的0即可,再加上校验码0x95,共六个字节,发送完之后就可以读取SD卡的回应码,返回1即表明SD卡进入空闲状态,接着发送CMD41,同样没有参数发送0即可,校验码为0xff,SD卡即跳出空闲状态,可以接受命令了
要点:SPI模式下,SD卡只能读或写1个扇区。
SD卡读一个块:
发送一个读命令,后面的参数是读取的块的首地址和0xff,SD会以R1回应,如果地址正确,回应应该为0。接着是SD卡发送数据,以令牌0xfe为起始,后面是要读取的数据,最后是2个字节的校验码。
SD卡写一个块:
发送一个写命令和地址参数,后跟校验码,不采用校验码,发送0xff即可,SD卡会以R1回应,如果SD卡接受命令,返回0,接着发送0xfe起始令牌码,要写入的已知长度的数据,和两个字节的0xff。
当要写入的数据书写完毕,SD卡此时处于忙状态,此时SD卡的D0脚被拉低以表示忙状态,主机可以读取D0上的数据以判断SD卡的状态。当主机此时释放CS线时,D0脚也会被同时释放
相关文章推荐
- SD卡的SPI模式的初始化顺序(转)
- 初学56F8366之SD卡读写(基于SPI模式)
- Static变量在Debug和Release模式下的初始化顺序偶有差异
- SD卡学习(SDIO和SPI模式)
- SD卡的SPI模式的调试
- sd卡tf卡进入spi模式
- SD卡 SPI模式读写要点
- JAVA基础学习(六)---面向对象二---static,类的初始化和调用顺序、单例模式
- MSP430的SPI通信例程(SD卡初始化-理论解说)
- Static变量在Debug和Release模式下的初始化顺序偶有差异
- STM32开发板入门教程(十三) - SPI模式读写SD卡
- SD卡的SPI驱动顺序
- 基础学习day06---面向对象二---static,类的初始化和调用顺序、单例模式
- 基于SPI模式的SD卡驱动
- .初学56F8366之SD卡读写(基于SPI模式)(2)
- SD卡对应SD模式和SPI模式的引脚定义
- SD卡SPI模式下FatFs与znFat文件系统速度比较
- SPI模式下MCU对SD卡的控制及操作命令(转)
- 转——SDHC之初始化CMD命令详解(SPI模式)
- spi模式sd卡的linux设备驱动移植