当前位置:首页 > 嵌入式 > 嵌入式教程
[导读] 基于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开始扇区号,根目录开始扇区号等关键信息,为文件的创建,读写等操作做准备,文件系统初始化函数代码如下:

2.2.3 文件创建
    SD卡上创建文件或目录的过程就是在文件目录表FDT中申请登记项的过程,为此程序设计时定义了如下结构体:


    在文件目录项FDT中申请登记项动作就是通过对上述结构体的操做来完成的,操作流程,也是文件创建流程如图3所示,当把SD卡插入卡插槽时,系统首先初始化SD卡,即读取SD卡的DBR扇区(0扇区)获取相关信息,接下来打开所要创建文件的路径,如果路径不存在,创建该路径,如果存在,搜寻FAT表,找空闲簇。再接下来把要创建的文件的相关信息(文件名,文件大小,创建时间,属性等)填入上述结构体,把该结构体写入文件目录项FDT,相应的扇区写入数据,最后更新FAT链表。文件创建实现函数为FAT32_Creat_File()。


2.2.4 文件读写
    文件系统对SD卡上文件的管理都是以簇为单位进行的。要读文件,就要首先找到文件,查找文件就是把文件名和文件目录项FDT中的文件名匹配。如果匹配不成功,说明该文件不存,此时就可以利用函数FAT32_Creat_Flie()创建。如果匹配成功读就找到了该文件,在匹配成功的那个目录登记项中找到该文件的起始簇号,知道了该起始簇号,就可以根据FAT表中的簇链关系找到到第2簇,第3簇,直到最后一簇文件结束。写文件时,由于FAT2是FAT1的备份,要保证两者的一致性,就要对它们做同样的写操作。主要的函数有:FAT32_Open_File()-打开文件;FAT32_Read_File()-读文件;FAT32_Write_File()-写文件;FAT32_Close_File()-关闭文件。
2.2.5 文件删除
    FAT32文件系统中所谓的删除实际上只是把文件名称的第一个字母改成一个特殊字符(在文件目录登记项上做一个删除标记),把文件在FAT表中占用的簇标记为空簇,但文件包含的数据仍在磁盘上,下次将新的文件保存到磁盘时,这些簇可能被新的文件使用,从而覆盖原来的数据。因此,只要不保存新的文件,被删除文件的数据实际上仍旧完整无缺地保存在磁盘上。文件删除函数为:FAT32_DeleteFile()。
2.3 API接口设计
    API接口模块要是向用户应用程序提供文件的创建读写删除功能,该模块通过调用文件系统的相关函数来实现。主要的借口函数有:OS_ CreateFile()-创建文件;OS_OpenFile()-打开文件;OS_WriteFile()-文件写入数据;OS_WriteFile()-读文件数据;OS_CloseFile()-关闭文件;OS_DeleteFile-删除文件。
2.4 用户应用程序设计
    该模块通过直接运用文件系统提供的API接口函数完成对称重数据信息的操作,只需要对μC/OS-II操作系统直接负责,并不需要考虑文件系统的具体实现问题以及底层硬件驱动问题。

3 结束语
    本设计作为货车车载动态称重系统的数据存储模块,采用容量大、体积小、性价比高的存储介质SD卡来存储长时间段的测量数据,对FAT32进行了裁剪,并结合SD卡的底层的读写程序,从而实现了嵌入式SD卡文件系统,这样就能很方便通过上位机对SD卡记录货车称重数据进行查询,综合分析以及备份。同时该方法为其它数据采集系统提供了一种非易失性存储器的解决方案,采集到的数据会以标准文件的格式记录到SD卡上,便于文件的统一管理。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

北京 2025年6月9日 /美通社/ -- 2025年6月5日,国家知识产权局官网发布了《关于第二十五届中国专利奖授奖的决定》(国知发运字〔2025〕20号)。同方威视"一种行李物品CT安检系统及其探测器装置...

关键字: BSP 探测器 智能机 系统设计

超市水果识别主要依赖人工,计算机视觉成为一种解决方案。然而目前仍面临部分水果识别精度低、终端设备部署困难、误识别图片难处理等挑战。因此,文章基于深度学习对移动端水果识别进行研究,旨在替代人工识别。首先文章构建了包含49种...

关键字: 水果识别 数据集构建 改进注意力机制 ViT 系统设计 模型权重自更新

新3U服务器支持最多18个GPU,搭载双Intel® Xeon® 6900系列P核处理器 加利福尼亚州圣何塞2024年10月10日 /美通社/ -- Super Micro...

关键字: MICRO SUPER 人工智能 系统设计

经过优化的 EDA 和 IP 全面解决方案为台积公司 N2 和 A16 工艺带来强化的计算性能、功耗和工程生产力 摘要: 由Synopsys.ai赋能、可投入生产的人工智能驱动EDA流程面向N2工艺可实现全球领...

关键字: 人工智能 晶体管 系统设计 芯片

数字可编程变频电源是一种能够根据用户需求调整输出电压和频率的电源设备。它在工业生产和实验室研究等领域中被广泛使用。

关键字: 单片机 可编程电源 系统设计

太阳能供电应用系统的设计需要考虑多个方面,包括太阳能电池板、储能装置、控制模块等。本文将介绍一种基于太阳能供电的应用系统设计方法,并从这几个方面进行详细阐述。

关键字: 太阳能 系统设计

北京2023年8月15日 /美通社/ -- 日前,在第五届OCP China Day 2023(开放计算中国技术峰会)上,浪潮信息正式推出融合架构3.0原型系统,以开创性的系统架构设计实现了计算资源、存储资源、...

关键字: 系统设计 内存 软件定义 数据中心

北京2023年8月7日 /美通社/ -- 随着大模型智能水平的提升,AIGC所需要的算力在不断增长。大模型的参数量超过千亿,甚至突破万亿级别,预计智算中心将迎来更快发展。IDC预测,2022-2026年,全球AI计算市场...

关键字: CHINA 数据中心 AI 系统设计

无论温度怎么变化始终UCQ1=UCQ2,电路以两只管子集电极电位差作为输出,就克服了温漂 当u11=u12(共模信号)T1管和T2管所产生的电流变化相等;因此集电极电位的变化也相等。

关键字: 差分放大器 系统设计 电极电位

大家好,我是鲏。认识我的朋友都知道,我是一个实践派,相比研究枯燥的理论知识,我更喜欢做自己想做的项目,用技术来实现自己的想法的感觉真的很棒。所以从大学期间一直到现在,除了工作中的项目外,我依然保持着自己做项目的习惯,有坚...

关键字: 系统设计 技术选型 需求分析
关闭