用户应用程序通常以文件的形式访问SD卡,并以文件的形式存取数据;文件系统层是通过调用SD卡物理层的有关函数来实现的,所以要想以文件系统的形式访问SD卡,则必须先驱动SD。SD卡的读写操作都是基于命令的,通过向SD卡发送相应的命令并读取相应的响应控制SD卡。在对SD卡读写前,首先要进行初始化操作。这是确保SD卡能在SPI模式下正常读写数据的前提。SD卡上电复位后,默认是SD模式。为了使SD卡进入SPI模式,必须将CS置低(至少延迟74个时钟)并通过SPI总线发送CMDn,使SD卡复位,同时激活,并进行内部初始化处理,使SD卡退出空闲状态。

SD卡初始化流程图如图4所示。

利用LPC2148的SD卡实现系统升级的模块设计

SD卡中SPI模块的读操作包括读单块和读多块两种。该系统仅实现了读单块功能。初始化的长度为512字节。函数的实现分为4个步骤:①LPC2148向SD卡发送读单块命令(CMD17),SD卡响应(Rl格式);②等待SD卡发送读起始令牌;③判断收到的令牌是否为0xFE;④从SD卡中读取数据。

4.2 SD卡文件系统

SD卡完成底层驱动后,可按照FAT32文件系统格式对SD卡上的数据进行操作,进而在SD卡上实现读写文件等操作。FAT32文件系统是微软FAT类文件系统中的最高版本.是现今Windows下最常用的硬盘文件系统。

当读取SD卡中的文件时,首先要根据文件名查找该文件的信息结构体。根据文件信息结构体中的起始簇号即可找到数据区第1簇的内容,也可在FAT表中找到第2个簇号。根据第2个簇号又能找到第2簇的内容和FAT表中的第3个簇号,直至遇到文件结束标志。这样,就可根据FAT表中的簇号读取到全部文件数据。以图5为例,说明读取SD卡文件的具体步骤: