首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

基于ARM9和μC/OS-II的SD卡文件系统设计与实现

基于ARM9和μC/OS-II的SD卡文件系统设计与实现

摘要:主要针对货车动态称重系统中大量实时载重数据存取的需求而做的设计。该设计基于ARM9和μC/OS-II相结合的软硬件平台,实现了一种SD卡文件系统。SD卡的接口电路采用SD总线模式连接,软件设计基于嵌入式操作系μC/OS-II,文件系统的实现参照FAT32规范。实际应用表明,该设计能够满足大量数据的存取效率以及文件管理的技术指标。
关键词:ARM9;SD卡文件系统;数据存取,μC/OS-II;文件管理

    随着嵌入式式技术的不断发展,ARM处理器凭借其高性能、廉价、耗能低的优质特性而得到广泛应用。文中主要针对货车动态称重系统中大量实时载重数据存取的需求,在ARM9嵌入式处理器和μC/OS-II操作系统基础上,设计实现了一种SD卡文件系统。该系统具有实时性强、存取速率高、易维护,易移植等特点。

1 硬件接口电路设计
    本系统硬件开发平台处理器为S3C2440A,是三星公司推出的16/32位RISC微处理器,ARM920T内核,主频400 MHz,最高可达533 MHz,内部具有丰富的系统外围控制器和多种通信接口。SD卡支持SPI和SD两种通信模式,S3C2440A具有SD卡接口,支持SD总线模式,所以不再像低端的ARM处理器那样采用SPI模式,而是采用SD总线模式,这样可以大大提高SD卡的读写速度。S3C2440A与SD卡读写器的接口电路如图1所示。


    SD卡的DAT0~DAT3、CLK(时钟线)和CMD(命令线)分别连接到S3C2440A的SDDATA0~SDDATA3、SDCLK和SDCMD引脚。SD卡支持单线和宽总线的数据传输,宽总线数据一次传4位,数度更快,因此,此设计采用宽总线方式。

2 SD卡文件系统的设计与实现
    μC/OS-II是一种可移植的,可植入ROM的,可裁剪的,抢占式的,实时多任务小型的嵌入式操作系统,它采用可剥离式内核实施任务调度,实时性很强,而且每个任务具有唯一的优先级,能够保证就续表中任务优先级最高的任务优先执行。μC/OS-II大部分代码是用移植性很高的C语言编写的,只极少部分与处理器密切相关的部分代码用汇编语言编写,因此只需要做很少的工作就可以很方便地将它移植到各种不同构架的微处理器上。


    为了增强软件的可移植性,易维护性,程序设计时采用层次化,模块化设计。模块化结构如图2所示,除了用来进行管理的操作系统外,共分为4个模块,包括SD卡底层驱动,文件系统,API接口,用户应用程序。底层驱动完成SD卡初始化,以及实质上的读写功能;文件系统采用PC机普遍支持的FAT32文件系统规范来设计,完成文件的创建,读写,删除功能;API接口封装文件系统提供的函数,供上层应用使用;用户应用程序通过调用文件系统提供的API函数,完成相应的功能。各个模块的具体实现下面会做以说明。
2.1 底层驱动设计
2.1.1 SD卡初始化
    SD卡读写操作都是基于命令的,通过向SD卡发送命令并读取命令的响应来实现对SD卡的控制。在SD卡读写之前,首先要进行初始化操作。这是确保SD卡能进行正常数据读写的前提,SD卡初始化完成了SD卡上电,确认,设置逻辑地址,使其进入传输状态以及设置总线带宽几大主要工作。需要注意的是,在发送使SD卡空闲命令CMD0之前至少等待74个时钟,确保SD卡进入SD总线模式。SD卡初始化代码编写如下:


2.1.2 SD卡读写实现
    初始化完戚之后,就可对SD卡进行读写操作,通过设置SDI数据控制寄存器SDIDCON来确定SD卡的读写长度,读操作时数据长度作没有明确限制,写操作时,每次写的长度必须为BLOCK的倍数。SD卡的读写可以一次性读写单块数据,也可以一次性读写多块数据,多块数据的读写结束时,要发送CMD12结束指令。主要实现函数:Write_Card_Block()-写入单块数据;Write_Card_Data()-写入多块数据;Read_Card_Block()-读多块数据;Read_Card-Data()-读多块数据。
2.2 文件系统设计
2.2.1 FAT32文件系统概述
    Windows95 OSR2和Windows 98开始支持FAT32文件系统,它是对早期DOS的FAT文件系统的增强,由于文件系统的核心一文件分配表FAT扩充为32位,所以称为FAT32文件系统。FAT32包含DBR、保留扇区、FAT1、FAT2(第一个FAT的备份)、根目录、数据区5部分。DBR(Dos Boot Rec ord)是操作系统引导记录区;保留扇区是为了对DBR作备份或留待以后升级时用;文件分配表区共保存了两个相同的FAT表,文件所占用的存储空间(簇链)及空闲空间的管理都是通过FAT实现的;FAT32根目录区(ROOT区)不再是固定区域、固定大小,可看作是数据区的一部分;数据区用来存放真正要记录的文件数据,本系统定义的一簇为4K个字节。
2.2.2 文件系统初始化
    文件系统初始主要是读取SD卡的DBR扇区(0扇区),并分析该扇区内容,从而获取每扇区字节数,每簇扇区数,FAT开始扇区号,根目录开始扇区号等关键信息,为文件的创建,读写等操作做准备,文件系统初始化函数代码如下:
继承事业,薪火相传
返回列表