<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
一、概述
在智林STM32开发板上有采用SPI方式的SD卡接口,我手上有一块<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />512M的SD卡,所以接下来就开始SD卡的读写程序设计,学习完了,就可以开始文件系统的移植学习了#####。
二、程序框架设计
1、在shell里增加两个命令:sdwr,和sdrd。
2、sdwr在SD卡设定的扇区写入输入数据。Sdrd是将刚刚写入的数据读出来。
3、sdwr命令输入后,内部执行uartcmdsdwrite()函数。调用SD_WriteBlock()函数,将缓冲字符数组写入。而sdrd命令执行UartCmdSDRead()函数,调用SD_ReadBlock()函数,读入一个扇区,并用十六进制的方式在串口中断上显示。
4、SD的驱动分为三层:应用层、命令层、和驱动层。分别用sddrive.c,sdcmd.c,和spi.c三个文件来实现。
三、SPI接口的SD卡
1、SPI接口
SPI是一种全双工、同步串行通信方式接口,这里用到了四个IO口:分别是时钟线SCK、输出口MOSI、输入口MISO、模式从机选择线NSS。
2、SPI接口与SD卡
STM32与采用SPI接口的SD卡,就像两个CPU通信一样,STM32处理器通过SPI接口发出命令,SD卡执行命令后返回相应的状态。命令有读写命令、也有参数设置命令。
3、SD卡的内部结构:几个重要寄存器
(1)OCR寄存器:保存着卡的供电允许范围,位31表示卡上电后的状态,1表示空闲。
(2)CSD寄存器:总共128位,表示了卡的大部分配置信息。
(3)状态寄存器:命令响应的状态。
4、常用的SPI模式命令
(1)命令由六个字节组成:01-六位命令号-四个字节的命令参数-7位校验码-结束位1。
(2)命令分为10个类:
SPI支持:类0基本控制的(0复位、1激活初始化、9读CSD寄存器、10读CID寄存器、12多块过程中停止传输、13读状态寄存器),
类2块读的(16设置块长度、17读一个数据块、18读多个数据块,直到发命令12);
类4块写的(24写块、25写多个块、27写CSD的可编程为);
类5擦除的(32设置擦除块的起始地址、33设置终止块地址、38擦除先前选择的所有块);
块6写保护的(可选28设置写保护、29清除写保护、30读写保护状态);
类7的锁卡命令(可选42上锁或者解锁);
类8的指定应用(55通知SD卡下个是特殊应用命令、56获取或写入一个数据块)。
5、SPI命令的响应状态
(1)有R1(1个字节)、R1B(1个字节)、R2(两个字节)、R3(五个字节),大部分命令的响应是R1。读取状态寄存器响应R2、读取OCR响应R3、R1B跟R1接近(有些命令只需要0或非0反馈,就用R1B,比如停止传输、擦除等命令)
(2)每一个命令都有对应的响应长度,故发送命令函数要经过特殊的处理。
用户377235 2012-5-21 21:03
用户377235 2012-5-21 21:03
用户1593293 2009-12-3 10:19