历史上的今天
返回首页

历史上的今天

今天是:2025年02月16日(星期日)

正在发生

2018年02月16日 | 基于ARM9和μC/OS-II的SD卡文件系统的实现

2018-02-16 来源:eefocus

    随着嵌入式式技术的不断发展,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卡上,便于文件的统一管理。


推荐阅读

史海拾趣

Fong Ya Enterprise Co Ltd公司的发展小趣事

Fong Ya Enterprise Co., Ltd在电子行业中的发展故事

故事一:初创与基础奠定

Fong Ya Enterprise Co., Ltd(以下简称“丰雅企业”)成立于某个时期(具体年份可能因资料限制而未知),自那时起便致力于电子元件领域,特别是电阻器的研发与生产。初期,公司面临着市场竞争激烈、技术壁垒高等挑战,但凭借对电子技术的深刻理解和对市场需求的敏锐洞察,丰雅企业逐步确立了自身的产品定位,即专注于高品质、高性能的电阻器产品。通过不断优化生产工艺和提升产品质量,丰雅企业在电子行业逐渐站稳了脚跟。

故事二:技术创新与产品研发

随着电子行业的快速发展,丰雅企业深刻认识到技术创新的重要性。公司加大了对研发的投入,引进了一批高素质的技术人才,并建立了完善的研发体系。通过不断的技术创新,丰雅企业成功开发出了一系列具有自主知识产权的新型电阻器产品,这些产品不仅性能优越,而且满足了市场对电子元器件日益多样化的需求。同时,公司还积极与国内外知名高校和科研机构开展合作,共同推动电子元件技术的进步。

故事三:市场拓展与国际化战略

在稳固国内市场的同时,丰雅企业积极实施国际化战略,将目光投向了更广阔的国际市场。公司参加了多个国际性的电子展会,与全球各地的客户建立了良好的合作关系。通过提供优质的产品和服务,丰雅企业在国际市场上赢得了良好的口碑和信誉。此外,公司还根据不同国家和地区的市场特点,制定了差异化的营销策略,进一步扩大了市场份额。

故事四:供应链管理优化

为了提高生产效率和降低成本,丰雅企业不断优化供应链管理。公司与多家优质供应商建立了长期稳定的合作关系,确保原材料的质量和供应的稳定性。同时,公司还引入了先进的供应链管理系统,实现了对生产、采购、库存等各个环节的精细化管理。通过优化供应链管理,丰雅企业不仅提高了生产效率,还降低了运营成本,为企业的可持续发展奠定了坚实的基础。

故事五:品牌建设与企业文化

在多年的发展过程中,丰雅企业始终注重品牌建设和企业文化建设。公司坚持“质量第一、客户至上”的经营理念,致力于为客户提供优质的产品和服务。同时,公司还注重培养员工的创新精神和团队协作精神,营造了积极向上的企业文化氛围。通过品牌建设和企业文化的推动,丰雅企业在电子行业中的知名度和影响力不断提升,为企业的长远发展注入了强大的动力。

需要注意的是,由于具体年份和详细数据的限制,以上故事在描述时可能存在一定的概括性。然而,这些故事都基于丰雅企业在电子行业中的实际发展情况而构建,旨在展现其在技术创新、市场拓展、供应链管理和品牌建设等方面的努力和成就。

EIC [EIC discrete Semiconductors]公司的发展小趣事

EIC公司非常重视人才培养和团队建设。公司注重员工的技能培训和职业发展规划,为员工提供了广阔的发展空间和良好的职业前景。同时,EIC还积极引进国内外优秀人才,打造了一支高素质、专业化的研发团队和管理团队。这些人才为公司的发展提供了强有力的智力支持,也为公司的持续创新提供了源源不断的动力。

B&F;公司的发展小趣事

随着航空技术的不断发展,B&F公司开始积极探索与其他行业的跨界合作。例如,公司与一家知名电子公司合作,共同研发了一款新型飞行控制系统。这款系统采用了最先进的电子技术和算法,大大提高了飞机的操控性能和飞行效率。通过这种跨界合作,B&F公司不仅拓展了业务领域,还为公司带来了更多的发展机遇。

ABC [ABC Taiwan Electronics Corp]公司的发展小趣事

近年来,随着环保意识的日益增强,ABC Taiwan Electronics Corp积极响应绿色生产的号召。公司引入了环保材料和节能技术,降低了生产过程中的能耗和排放。同时,公司还加强了废弃物的处理和回收利用,实现了资源的循环利用。此外,ABC还积极参与社会公益活动,支持教育事业和环保事业,履行了企业的社会责任。

这五个故事展示了ABC Taiwan Electronics Corp从创业初期的艰难起步到逐步成长为国际知名电子零件供应商的发展历程。通过技术突破、国际化战略、产业升级和绿色生产等方面的努力,ABC不断应对市场的变化和挑战,实现了稳健的发展。

Daburn公司的发展小趣事

在追求企业发展的同时,Daburn公司也积极履行社会责任。公司注重环保和可持续发展,通过采用环保材料和节能设备、优化生产流程等方式降低对环境的影响。此外,Daburn还积极参与公益事业和社会活动,为社会做出积极贡献。这种社会责任感让Daburn在行业中树立了良好的形象。

ARRA Inc公司的发展小趣事

在Daburn公司的发展历程中,质量控制一直是重中之重。公司建立了严格的质量管理体系,从原材料采购到生产流程再到成品检验,每一个环节都严格把控。此外,Daburn还注重持续改进,通过引入先进的生产设备和工艺,不断提高产品的质量和性能。这种对质量的执着追求让Daburn赢得了客户的信任和好评。

问答坊 | AI 解惑

无聊,大家一起休闲下~~

http://www.hougong.info/?fromuid=92961…

查看全部问答>

关于如何学习嵌入式 高手 们进

大家好,我是一名大三的学生,学的是嵌入式方向的,但我们现在才学嵌入式操作系统,都TMD还是理论,学了等于没学,就上学期还学了个汇编,现在一学期都快过完了,感觉什么关于嵌入式方面的都没学到,如果靠下学期再来学点东西,以后出去就别想混了 ...…

查看全部问答>

播放器在wince5.0中,无法准确的定位播放位置

先详细解释一下标题的意思。    我的播放器运行在wince5.0中,我编写了各种各样的播放器,有使用WMP的,有使用TCPMP的,有使用用DSHOW的,都会有这么个情况:    我要跳转到视频的某个位置,比如说10s,不能准确的设置到10s,而 ...…

查看全部问答>

wince+S3C2440功耗问题

用核心板做一款机器,最后做电源管理才发现PWREN给悬空了,且VDDi,VDDiarm和VDDalive一起供电,休眠省电基本不用想了,现在我想仅靠降低CLOCK时钟降低功耗,比如进入SLOW模式,能将2440电流降低到多少?哪位试验过? 另外在wince系统运行时候转换n ...…

查看全部问答>

100分 关于一个程序流程的问题

请教各位帮忙单步跟踪一下下面这个程序 #include   \"stdafx.h\"      #include         #include         using   namespace  &n ...…

查看全部问答>

***IPCamera嵌入式开发合作,有意向者请进***

本公司(知名国企)正在寻求IPCamera(网络摄像机)的技术合作,包括嵌入式开发+硬件设计、中心 管理平台开发。有特色的产品,可提供整机、主板,或者能提供优秀的硬件方案的亦可。     合作方式多种,可技术转让、兼职或者全职。 &nb ...…

查看全部问答>

谁有STM单片机的中文汇编资料,请分享一下

                                 在官方网上找到了一个英文的,看的真累,那位大虾翻译一下,分享出来.…

查看全部问答>

USB口防真器程序编译的问题

程序先前一直没问题,后来改程序又加了几条语句,在编译过程中就有一个错误:Code size limit exceeded(4096 code bytes)for this version of the compiler 4212bytes of CODE memory 10bytes of CONST memory(+4bytes shared) 544bytes of DATA me ...…

查看全部问答>