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

发布者:740322lwj最新更新时间:2018-02-16 来源: eefocus关键字:ARM9  μC  OS-II  SD卡文件系统 手机看文章 扫描二维码
随时随地手机看文章

    随着嵌入式式技术的不断发展,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所示。

a.JPG

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

    2 SD卡文件系统的设计与实现

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

b.JPG

    为了增强软件的可移植性,易维护性,程序设计时采用层次化,模块化设计。模块化结构如图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卡初始化代码编写如下:c.JPG
d.JPG

    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开始扇区号,根目录开始扇区号等关键信息,为文件的创建,读写等操作做准备,文件系统初始化函数代码如下:

e.JPG

    2.2.3 文件创建

 

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

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

h.JPG

    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卡上,便于文件的统一管理。


关键字:ARM9  μC  OS-II  SD卡文件系统 引用地址:基于ARM9和μC/OS-II的SD卡文件系统的实现

上一篇:ARM7嵌入式系统在车辆调度系统设计中的应用
下一篇:基于ARM嵌入式电站动态数据监控的一种新设计方案

推荐阅读最新更新时间:2024-03-16 15:55

PIC单片机C语言设计
  前言   学习PIC单片机设计,除了理论学习之外,主要就是依靠实践,离开了实践的学习只能是纸上谈兵。这里我们使用下面的低成本实验器材进行PIC单片机的学习及设计。   1.MPLABIDE集成开发环境。   2.PICCC语言编译器。   3PICDEMO单片机综合试验板。4,ICD2在线调试器/程序下载器。5.5V高稳定专用稳压电源。下面简介一下这些实验工具及器材。   1.MPLABIDE集成开发环境   MPLABIDE是MicroChip公司开发的用于PIC单片机的集成开发环境,包括工程项目管理器、源程序编辑器、汇编器、软件调试器、在线调试器等,并且支持第三方的C语言开发工具。下图为MPLABIDE的工作界面。  
[单片机]
PIC单片机<font color='red'>C</font>语言设计
S3C2440 FLASH 介绍
S3C2440 有27 根地址线ADDR ,8 根片选信号ngcs0-ngcs7,对应bank0-bank7. 当访问BankN(N=0,1,2,...7) 的地址空间,ngcsN(N=0,1,2,...7) 引脚为低电平,选中外设。 每一个Bank容量:2^27=2^7 * 2^10 * 2^10 = 128Mbyte 总共有8个Bank,所以总寻址大小是:8*128Mbyte = 1Gbyte 所以S3C2440 总的寻址空间是1Gbyte。 市面上很少有32 位宽度的单片SDRAM,一般选择2 片16 位SDRAM 扩展得到 32位 SDRAM. 选择的SDARM 是HY57V561620F,4M
[单片机]
S3<font color='red'>C</font>2440 FLASH 介绍
基于C8051F340的开关电源模块并联供电系统设计
近一些年来,随着微电子技术和工艺、磁性材料科学以及烧结加工工艺与其它边沿技术科学的不断改进和快速发展,开关稳压技术也得到了突破性进展。目前,多模块并联供电电源代替单一集中式电源供电已经成为电源系统发展的一个重要方向。并联分布式电源具有可并联式扩展、电源模块的功率密度高,体积、重量小等优点,但同时也存在着由于电源模块直接并联而引起一台或多台模块运行在电流极限值状态的问题。目前,均流控制是实现大功率电源和冗余电源的关键技术。文中设计并制作了一个光伏并网发电模拟装置,实现了双开关电源模块并联供电,提高了系统供电效率,且实现了电流自动分配。 1 设计任务 设计并制作一个由两个额定输出功率均为16 W的8 VDC/DC模块构成的并联供电
[单片机]
基于<font color='red'>C</font>8051F340的开关电源模块并联供电系统设计
浅谈C51内存优化(data idata xdata)
对 51 单片机内存的认识,很多人有误解,最常见的是以下两种 ① 超过变量128后必须使用compact模式编译 实际的情况是只要内存占用量不超过 256.0 就可以用 small 模式编译 ② 128以上的某些地址为特殊寄存器使用,不能给程序用 与 PC 机不同,51 单片机不使用线性编址,特殊寄存器与 RAM 使用重复的重复的地址。但访问时采用不同的指令,所以并不会占用 RAM 空间。 由于内存比较小,一般要进行内存优化,尽量提高内存的使用效率。 以 Keil C 编译器为例,small 模式下未指存储类型的变量默认为data型,即直接寻址,只能访问低 128 个字节,但这 128 个字节也不是全为我们的程序所用,
[单片机]
单片机STC12C5A60S2控制AT24C04的程序(C语言)
/************************************** 主芯片:STC12C5A60S2(1T) 工作频率:12.000MHz **************************************/ #include REG51.H #include INTRINS.H typedefunsignedcharBYTE; typedefunsignedshortWORD; sbitSCL=P3^4;//AT24C04的时钟 sbitSDA=P3^5;//AT24C04的数据 BYTEBUF ;//数据缓存区 BYTEcodeTESTDATA = { 0x00,0x11,0x22,0x33,0x44
[单片机]
51单片机ADC0832电压测量液晶1602显示的C程序与proteus仿真
很早对AD转换感兴趣,也想自己业余做块单片机开发板,让广大的电子设计爱好者学习使用单片机。 今天通过搜索,整理了proteus 7可以仿真通过的基于51单片机+ADC0832电压采集并通过液晶1602显示电压的C程序及电路连接图,希望对大家有所帮助。 程序是谁写的谁修改的并不主要,主要的是学会并使用单片机AD转换,这才是王道。 电路连接图如下: C程序如下: #include reg52.h #include intrins.h #include math.h /**********************************8/ /**********LCD1602接口程序*********
[单片机]
51单片机ADC0832电压测量液晶1602显示的<font color='red'>C</font>程序与proteus仿真
S3C2440如何设置系统时钟
时钟控制逻辑给整个芯片提供3种时钟:FLCK用于CPU核;HCLK用于AHB总线上的设备(如:CPU核、存储控制器、中断控制器、LCD控制器、DMA等);PCLK用于APB总线上的设备(如:WATCHDOG、IIS、I2C、PWM定时器、MMC接口、ADC、UART、GPIO、RTC、SPI等)。 S3C2440 CPU主频可达400MHz,开发板上的外接晶振为12M,通过时钟控制逻辑的PLL(锁相环电路)来倍频这个系统时钟。 SC2440上有两个PLL,分别是MPLL,UPLL,UPLL专用于USB设备,常用频率为48MHz和96MHz;MPLL用于设置FCLK、HCLK、PLCK。 上电时,PLL并没有被启动,F
[单片机]
S3<font color='red'>C</font>2440如何设置系统时钟
C8051F350单片机实现气体流量计检测仪的设计
气体流量计是较为常用的仪表设备。钟罩式气体流量标准装置是以空气作为介质,对气体流量计进行检定、校准和检测的计量标准装置。主要适用于速度式、容积式和差压式等气体流量计的检定、校准和型式评价工作,也可用于气体流量测量的研究工作。本文基于C8051F350单片机,改造现有的钟罩装置,设计一种气体流量计检测仪。 气体流量计检定技术概述 目前,气体流量计的检定方法广义上可分为直接测量和间接测量两种。 直接测量法的是用实际流体进行计量检定,其具体定义为用标准装置(标准流量计或计量器具)与被测流量计串联,通过比较两者测得流体的累积流量值,得出被测流量计测量误差的方法。实流检测法具有检定环境与工况环境一致、流量值准确可靠和真实反映被测流量计计
[单片机]
<font color='red'>C</font>8051F350单片机实现气体流量计检测仪的设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved