基于文件系统的嵌入式数据库的设计和实现 |
2012-08-06 10:50 作者:尉士华 来源:硅谷网 HV: 编辑: 【搜索试试】
|
|
硅谷网8月6日消息 《硅谷》杂志2012年第12期刊文称,嵌入式操作系统异于PC中的操作系统,在嵌入技术中,嵌入式式操作系统决定嵌入式文件系统格式与要求,在极端物理条件下,嵌入式文件系统代码不能有冗余,其可以进行按照需要进行配置,文件系统在运行时要求不能增加系统开销。同时由于文件系统必须脱离底层物理硬件,具有自己的独立结构,应该要具有很强的移植性。同时嵌入式要求具有可扩展性,要求其文件系统进行按组件模块进行管理与配置,用户对是否加载其中模块具有可自行配置要求。
随着计算机功能的普及尤其是硬件体系的发展,使得现代嵌入式的设计硬件体积缩小,功耗降低,并且计算机软件的发展也加速了嵌入式体系的发展,计算机网络的全面普及令现代互联网技术产品的发展已经普及了人们生活的各个角落,但是随着这一发展,千古事系统的安全问题同样也变得比较严峻,操作系统是嵌入式的核心系统,所以操作系统的安全,是整个系统的安全保证,以及对于整个系统的应用系统的安全性保证,不能有任何的马虎。当今的嵌入式设计队伍处于高度分化状态中,有着多得让人眼花缭乱的实现目标和工具,winCE是一个开放的、可升级的32位嵌入式操作系统,是基于掌上型电脑类的电子设备操作系统。其区别于桌面操作系统的最本质的特点,一是可裁减性,二是可移植性。winCE具有可靠性好、实时性高、内核体积小的特点,被广泛应用于各种嵌入式智能设备的开发中,从手持电脑到专门的工业控制器及消费电子产品中等。
嵌入式文件系统它提供了基本的硬件连接函数,这样它可以在任何媒介上使用。嵌入式文件系统在RAM、ROM的存储器利用率,速度、易用性方面有非常好的表现;可使用ANSIC编写,适用于任何CPU;与MS-DOS/MS-WINDOWS兼容,支持FAT12,FAT16,FAT32文件系统;支持多种设备驱动,可以在一个文件系统下连接不同类型的硬件;支持多种媒介,一个设备驱动允许你同时直接连接不同的媒介;可集成于任何操作系统,并在多线程环境中进行文件操作。
API层:API层是介于嵌入式文件系统和用户应用程序之间的接口。它包括一个ANSIC的库,涵盖了基本文件操作函数,比如FS_fopen,FS_fwrite等。ANSICstdio.h是用户应用程序的API。应用程序通过标准C的I/O库导入并使用嵌入式文件系统。API层将应用程序产生的调用转移到文件系统层,系统层只能是FAT格式的,然而API层可以同时处理不同文件系统的文件。
文件系统层:该层主要是将文件操作转化为逻辑块操作。进行完这个转换,逻辑块层就可以找到对应驱动程序驱动设备。
设备驱动程序:设备驱动程序仅仅是对硬件工作的简单定义,文件系统的主要功能就是管理各种的硬件。如果要使用新的硬件,就必须添加这个设备的驱动程序。设备驱动包括连接硬件的基本I/O函数和一个存放各种函数指针的列表。
2基于文件系统的嵌入式数据库的设计
硬件电路搭建好后,开始需要考虑软件平台搭建,通过软件系统实现稳定、可靠的运行平台,并实现播发器各项功能。在软件系统中,本论文主要考虑两个部分:启动代码部分和应用程序部分。
启动代码是指硬件设备启动时候需要运行一段代码,该代码主要是对硬件设备进行初始化,例如:设置CPU模式、初始化运行环境变量等,此部分是基与硬件的代码,所以一般通过汇编来实现该部分功能,且编写的代码根据处理器的结构的不同而不同。代码部分主要有两部分组成,一个是ARM7TDMI内核相关汇编代码初始化,以及堆栈参数设置,初始化中主要用到RW、ZD、Main函数。第二个部分代码主要是基于外部是设备的初始化,例如USB控制器等设备基本参数的初始化。由于这个部分主要考虑外设,所以在初始化主要是与外设控制器通信的初始化。
3EDB的实现
首先要对SD卡进行初始化,初始化所需要做的操作是进行SD卡的SPI模式,进入的方法是:首先通过CS置低进行CMDO卡复位操作,通过复位操作实现卡内部激活与初始化处理,最终实现卡退出空闲状态,在卡空闲状态条件发起命令数据,通过命令进行对卡读写操作,以及卡容量等属性数据搜集与记录。这些操作都是在卡初始化时实现与完成。
具体来说,初始化函数主要完成以下工作:
1)进行卡复位操作,使卡进入SPI模式,并通过卡初始化操作;
2)对卡相关属性进行搜集与整理,例如检查卡容量、卡可用块以及卡所能支持的外部电压:
3)初始化SPI时钟频率,检查卡时钟频率可以达到的最大值,一般情况下小于25MHz;
4)根据编译选项使能通信CRC校验;
5)设置读写卡数据传输单位长度;
6)初始化卡的全局变量,包括卡的空闲块数量、卡擦除、卡读写锁需要的最大时间以及卡的块长度。
7)SD卡读操作有两种模式:读单块和读多块。读单块主要是根据卡初始化中设置的卡的长度(512字节)读取卡中的块数。
EFSL函数层包含三层:系统应用接口层、文件系统函数层、底层驱动层。底层启动层和底层硬件紧密相连,该层次主要是直接调用硬件提供的接口函数(LPC2148汇编语言提供的函数,接口函数保存在lpc2148_spi.C中),在底层驱动程序中,驱动启动文件"sd.c"文件中就包含SD卡初始所需要所有函数以及参数变量设置,其具体内容包括:SD卡初始化、SD卡读写一个扇区函数。
在lpc2148_spi.C函数主要有基本的if_spilnit、if_spiSend两个LPC2148调用硬件模版指令函数,其中if_spilnit()函数主要用来初始化MCU芯片的SSP总线控制器,且只是在硬件加点初始化时才调用一次。
前面我们提到说SD卡有两种模式:一个是SD卡模式,一个是SPI模式,两者不仅在协议上不一致,同时在引脚上也不一致,在SD模式中的底册协议比较复杂,不过它可以实现并行传输,效率高;而在SPI模式下底层协议就很简单,只是效率低。SPI总线协议只是一个简单命令与应答协议,且是有主机主动发起,根据命令的不同,响应也不同,按照响应类型我们可以分为:
1)命令响应令牌,包括:R1,R1B,R2和R3四种类型。
2)命令响应令牌+数据块令牌+数据。在接收到命令响应令牌后,自动加了一个数据块令牌,该1个字节的数据块令牌表示,标示了命令响应令牌后的运行状态:开始数据传输还是是否存在异常。若是正常,则开始LPC2148芯片进行数据传送。
命令格式:
SPI模式下,主机发送的命令长度为6字节,命令格式如表l所列。
由表1可见,“01”(命令中字节1的最高2位)为命令的起始位,“1”-(命令中字节6的最低位)为命令的结束位。其它位的含义为:
表1SPI总线协议命令格式
字节1 字节2-字节5(命令参数) 字节6
0 1 命令号 参数(高位在前) CRC 1
命令号:占用6位,需要执行命令的数字代号。
命令参数:长度为4字节,根据不同的命令,命令参数有不同的取值。
CRC:前面5字节的CRC7校验码。
在SPI总线协议中,我们可以对CRC7这个属性进行随意值设置,只有在复位命令时才需要对CRC7属性强制设置为0x95。
EFSL文件系统在SD卡中移植完毕后,对移植结果进行测试,通过file_fopen()、file_read()、file_fclose()、分别进行文件打开,文件读取与文件关闭操作,看是否能正常执行。同样,可以对EFSL文件系统中的其它函数进行测试,其使用方法和ANSIC的文件系统函数用法相同。通过对EFSL文件系统的函数调用测试结果最终核定EFSL文件系统移植到SD卡是否成功。(原文载于《硅谷》杂志2012年第12期,硅谷网及《硅谷》杂志版权所有,未经允许禁止转载)
|
|
|
|
【对“基于文件系统的嵌入式数据库的设计和实现”发布评论】 |
版权及免责声明:
① 本网站部分投稿来源于“网友”,涉及投资、理财、消费等内容,请亲们反复甄别,切勿轻信。本网站部分由赞助商提供的内容属于【广告】性质,仅供阅读,不构成具体实施建议,请谨慎对待。据此操作,风险自担。
② 内容来源注明“硅谷网”及其相关称谓的文字、图片和音视频,版权均属本网站所有,任何媒体、网站或个人需经本网站许可方可复制或转载,并在使用时必须注明来源【硅谷网】或对应来源,违者本网站将依法追究责任。
③ 注明来源为各大报纸、杂志、网站及其他媒体的文章,文章原作者享有著作权,本网站转载其他媒体稿件是为传播更多的信息,并不代表赞同其观点和对其真实性负责,本网站不承担此类稿件侵权行为的连带责任。
④ 本网站不对非自身发布内容的真实性、合法性、准确性作担保。若硅谷网因为自身和转载内容,涉及到侵权、违法等问题,请有关单位或个人速与本网站取得联系(联系电话:01057255600),我们将第一时间核实处理。
|
|
|
|