ARM7系统中实现CF卡存储的文件系统设计(精选10篇)由网友“duomu”投稿提供,下面给大家分享ARM7系统中实现CF卡存储的文件系统设计,欢迎阅读!
篇1:ARM7系统中实现CF卡存储的文件系统设计
ARM7系统中实现CF卡存储的文件系统设计
摘要:介绍针对ARM7架构的嵌入式系统中,以CF卡作为存储介抽的文件系统的设计,并通过GPS车辆导航系统中地图信息读写的具体应用介绍了其软硬件电路的实现方法。关键词:嵌入式文件系统CF卡ARM7
随着微控制器性能的不断提高,嵌入式应用越来越广泛。但是目前市场上的大型商用嵌入式实时系统,价格昂贵,而且都针对特定的硬件平台。对于中小型系统开发,购买商用实时系统并不划算。
目前我们正着手将嵌入式系统软件应用于汽车卫星导航仪系统的一步开发。传统的嵌入式应用并不包括文件系统,而我们要实现的文件系统需要在车辆导航系统中实现地图数据文件的读写。因此它既要支持与MS-DOS兼容的文件系统也要支持其它类型的文件系统。
另一方面,从数码相机到MP3播放机,从掌上电脑到数码摄像机,CF(CompactFlash)卡由于具有体积小、兼容性强、价格相对低廉等诸多优点,在数码设备上的应用越来越广泛。但若想在CF卡与PC之间传递数据,通常不得不借助于专门的读卡器,这给PC的用户带来了不小的麻烦。CompactFlash卡全称为“标准闪存卡”,简称“CF卡”。CF卡的应用空间比较广,最常见的是在数码照相机中用于照片的存储。由于CF卡内部采用模拟硬盘控制器的设计,使得CF卡可以比较容易地通过IDE接口实现与电脑的连接,一定程度上可以起到移动存储的作用。
一般的嵌入式系统不会提供读写CF卡的接口,所以需要在文件系统中专门设计一个驱动程序。
1基本原理
图1所示的CF卡中,主机系统的控制器接口允许数据从Flash介质读写。CF卡的存取方式有三种:Memory方式、I/O方式以及TrueIDE方式。我们选择的是TrueIDE方式。需要注意的是,当主机电源一直接通时,拔插CF卡将会使其从原来的TrueIDE方式重新配置成PCCardATA方式。所以要让CF卡一直工作在TrueIDE,需要在电源加电启动时将OE输入信号接地。此方式也支持8位存取,但我们选择了16位存取。一次最多存取的扇区数可由命令码Ech中的第47参数字决定。
CF卡跟硬盘的结构相同,如图2所示。在引导区中装有用于启动系统的代码,以及有关文件系统的重要信息,随后是记录所有磁盘空间的表,再下来就是根目录,然后是所有其它的东西。引导扇区在其末尾处包含有分区表。此表包含了用以标示每个分区开始和结束的表项,最多可以有四个分区,每个分区可包含不同的.文件系统。紧随引导区之后的是FAT(文件分配表),用来记录设备中所有的磁盘空间的信息(此表与UNIX中的I-node表和空闲表具有相同的功能)。
设计软件时,同时考虑了通用性及可扩展性,目的在于使该文件系统无需分别修改便能够对CF卡、IDE硬盘、RAMDisk、电子盘、SD等不同的存储介质进行操作;读出这些存储介质中的数据,并且可以将数据输送到不同存储设备上。
为了达到这些目的,我们针对不同CPU的不同处理方法,对硬件操作程序进行分离,将设备有关的底层程序变成与设备无关的上层操作。这样,当系统新增功能之后,不必更改每个子程序,只需要在某些接口文件的数据结构中添加或者更改数据项即可;又考虑到用户对上层操作的透明性,我们采用面向对象的方法,上层结构中存取操作的driver结构(含read、write数据项)是虚拟的,在底层才将它具体化为CF卡的读写扇区命令(操作码为:20h、30h)。
软件程序的主要流程如图3所示。
2系统设计实现
根据上述原理,可完成软件设计,其基本框架如图4所示,分为六个主要部分。
其中,CF卡驱动程序设计的关键是CF卡的存取操作函数所采用的命令码有些不同。另外,我们使用驱动程序对象来代表CF卡设备驱动程序。该驱动程序对象对于用户是部分不透明的,数据项包括读写函数的指针,这些函数由文件系统程序输出(包括两部分函数,用户可见API函数调用和用户不见驱动存取函数)。此对象的数据结构声明如下:
typedefstructCF_XFILE_DRIVER{
BYTEdriver_name;/*介质标示;C
F卡、IDE硬盘、Flash卡、RAMDISK等,删除驱动的话,需要重新记录DRIVER号*/
……/*IRP处理函数*/
}CF_XFILE_DRIVER;
如果有多个CF卡,需要用另外一个特定的数据结构Next_Driver来把它们水平连接在一起。然后,用链表来管理这些数据结构,管理方式类似于WDM(WindowsDriverModel)。
3测试分析
经过调试运行,该文件系统性能良好。与我们之前已经移植过的Nucleus、μC/OS-II、UNIX的操作系统的文件系统相比,本文介绍的文件系统可移植性更强;除了文中着重介绍的CF卡,经过对底层驱动的简单修改就可以应用于其它存储介质如RAMdisk、IDE硬盘、Flash等(其中IDE硬盘和Flash也已经调试成功)。另外,本文介绍的文件系统对硬件平台的配置要求降低,并且对于文件操作的运行速度并未减慢。
篇2:ARM7系统中实现CF卡存储的文件系统设计
ARM7系统中实现CF卡存储的文件系统设计
摘要:介绍针对ARM7架构的嵌入式系统中,以CF卡作为存储介抽的文件系统的设计,并通过GPS车辆导航系统中地图信息读写的具体应用介绍了其软硬件电路的实现方法。关键词:嵌入式文件系统 CF卡 ARM7
随着微控制器性能的不断提高,嵌入式应用越来越广泛。但是目前市场上的大型商用嵌入式实时系统,价格昂贵,而且都针对特定的硬件平台。对于中小型系统开发,购买商用实时系统并不划算。
目前我们正着手将嵌入式系统软件应用于汽车卫星导航仪系统的一步开发。传统的'嵌入式应用并不包括文件系统,而我们要实现的文件系统需要在车辆导航系统中实现地图数据文件的读写。因此它既要支持与MS-DOS兼容的文件系统也要支持其它类型的文件系统。
另一方面,从数码相机到MP3播放机,从掌上电脑到数码摄像机,CF(CompactFlash)卡由于具有体积小、兼容性强、价格相对低廉等诸多优点,在数码设备上的应用越来越广泛。但若想在CF卡与PC之间传递数据,通常不得不借助于专门的读卡器,这给PC的用户带来了不小的麻烦。CompactFlash卡全称为“标准闪存卡”,简称“CF卡”。CF卡的应用空间比较广,最常见的是在数码照相机中用于照片的存储。由于CF卡内部采用模拟硬盘控制器的设计,使得CF卡可以比较容易地通过IDE接口实现与电脑的连接,一定程度上可以起到移动存储的作用。
一般的嵌入式系统不会提供读写CF卡的接口,所以需要在文件系统中专门设计一个驱动程序。
1 基本原理
图1所示的CF卡中,主机系统的控制器接口允许数据从Flash介质读写。CF卡的存取方式有三种:Memory方式、I/O方式以及True IDE方式。我们选择的是True IDE方式。需要注意的是,当主机电源一直接通时,拔插CF卡将会使其从原来的True IDE方式重新配置成PC Card ATA方式。所以要让CF卡一直工作在True IDE,需要在电源加电启动时将OE输入信号接地。此方式也支持8位存取,但我们选择了16位存取。一次最多存取的扇区数可由命令码Ech中的第47参数字决定。
CF卡跟硬盘的结构相同,如图2所示。在引导区中装有用于启动系统的代码,以及有关文件系统的重要信息,随后是记录所有磁盘空间的表,再下来就是根目录,然后是所有其它的东西。引导扇区在其末尾处包含有分区表。此表包含了用以标示每个分区开始和结束的表项,最多可以有四个分区,每个分区可包含不同的文件系统。紧随引导区之后的是FAT(文件分配表),用来记录设备中所有的磁盘空间的信息(此表与UNIX中的I-node表和空闲表具有相同的功能)。
设计软件时,同时考虑了通用性及可扩展性,目的在于使该文件系统无需分别修改便能够对CF卡、IDE硬盘、RAM Disk、电子盘、SD等不同的存储介质进行操作;读出这些存储介质中的数据,并且可以将数据输送到不同存储设备上。
为了达到这些目的,我们针对不同CPU的不同处理方法,对硬件操作程序进行分离,将设备有关的底层
[1] [2]
篇3:单片机实现对CF卡的读写
单片机实现对CF卡的读写
摘要:CF卡是一种包含了控制和大容量Flash存储器的标准器件,具有容量大、体积小、高性能、携带方便等优点,已广泛应用在数据采集系统和许多消息类电子产品中。本文详细介绍CF卡在单片机系统中的硬件接口电路,以及单片机对CF卡进行标准文件读写的实现,且写入的文件能被Windows操作系统读写。关键词:CF卡 单片机 FAT文件格式
引言
由于CF卡(Compact Flash Card)具有容量大、体积小、高性能、携带方便等优点,而且读写速度快,可与多种电脑操作系统平台兼容,因此在数据采集系统中的数据记录或与PC机之间的数据转存多采用CF卡。为了在PC机中能方便地进行数据处理,在下位机端必须采用一种标准的格式组织数据,即将数据按照Windows标准文件格式写入,在PC机端通过读卡器将写入CF的内容以标准文件形式读出。Windows标准文件格式有FAT、FAT32和NTFS。考虑到广泛使用的Windows 98系统的CF卡的容量等因素,通常采用FAT(File Allocation Table)文件系统。单片机系统对CF卡的读写,就是从底层对它进行直接操作,包括寻址、创建文件和读写等。(本网网收集整理)
1 CF卡简介
CF卡内集成了控制器、Flash Memory阵列和读写缓冲区,如图1所示。内置的智能控制器,使外围电路设计大大简化,而且完全符合PC机内存卡的国际联合会PCMCIA(Personal Computer Memory Card International Association)和ATA(Advanced Technology Attachment)接口规范。实际上,控制器起到了一种协议转换的作用,即将对Flash Memory的读写转化成了对控制器的访问,这样不同的CF卡都可以用单一的机构来读写,而不用担心兼容性问题。CF卡的缓冲区结构,使得外部设备与CF卡通信的同时,CF卡的片内控制器可以对Flash进行读写。这种设计可以增加CF卡数据读写的可靠性,同时提高数据传输速率。
CF卡支持多种接口访问模式,有符合PCMCIA规范的Memory Mapped模式、I/O Card模式和符合ATA规范的True IDE模式。上电时,OE(9脚)为低电平,CF卡进入True IDE模式,此时引脚OE也叫ATA SEL;上电时,OE(9脚)为高电平,CF卡进入PCMCIA模式,即Memory Mapped模式或I/O Card模式,此时可通过修改配置选项寄存器进入相应的模式。
配置选项寄存器格式如下:
SRESETLevelREQconf5conf4conf3conf2conf1conf0SRESET―软复位信号;
Level REQ―中断模式选择(电平或边沿触发)。
例如,要加入Memory mapped模式,只需要在上电时保证OE为高电平,因为配置选项寄存器的conf5~conf0位的初始化值为“00000”;而要进入I/O Card模式,除了上电时保证OE为高电平外,还要进一步设置conf5~conf0,如表1所列。但是对于具体型号的CF卡而言,下面三种情况也是被CFA(CF card Association)所允许的:①上电时进入True IDE模式,工作过程中,只要监测到OE变为高,就退出True IDE模式;②允许卡在复位时重新配置;③上电时进入PCMCIA模式,允许过程中,只要监测到OE变为低,就进入True IDE模式。
表1 模式选择
conf5conf4conf3conf2conf1conf0模 式000000Memory map000001I/O Mapped,对应16位系统000010I/O,对应1F0h-1F7h/3F6h-3F3h000011I/O,对应170h-177h/376h-377h2 CF卡与51单片机的接口
CF卡在PC Memory方式与51芯片的接口电路如图2所示。由于采用CF卡上电后自动进入的Memory模式,而且不存在对特性寄存器的读写,故可将REG接高电平。片选信号CE1和CE2组合可选择数据位宽度,如表2所列。图2中CE2接VCC,选用的是8位(D7~D0)数据宽度。
表2 数据宽度选择
8位(D7~D0)8位(D15~D8)16位高 阻 CE10101CE21001为了实现即插即用的功能,CE卡上提供了两个用来检测卡是否存在的引脚(CD1、CD2),由卡内部接地。当主机检测到与其相连的CD1和CD2两个引脚同时为低电平时,可判断出卡与主机相连;否则,卡未与主机相连。
由于I/O口紧张,RDY/BSY引脚悬空不用,通过查询状态寄存器能判断CF卡是否准备就绪。在实际应用中,由于一次至少要读写一个扇区512字节,所以要扩充一块RAM。我们选用的是62256,容量为32KB,这样便可以支持大到2GB的CF卡(参见下文),增加了其扩展性。
3 FAT文件系统
FAT文件系统是基于DOS的文件系统。常说的FAT有12位的FAT12和16位的FAT16,另外就是32位的FAT32。考虑到CF卡的容量有限,宜选用FAT16。这里只对FAT文件系统作一简单介绍,更详细的内容请见参考文献。
磁盘的寻址方式有两种:物理寻址C/H/S(柱面/磁头/扇区)方式和逻辑块LBA(Logical Block Addressing)寻址方式。二者之间的转换关系为:
LBA地址=(柱面号×磁头数+磁头号)×扇区数+扇区数-1
采用LBA寻址方式,没有磁头和磁道的转换操作,在访问连续的扇区时,操作速度比物理寻址方式要快,而且也简化了对磁盘的访问。
硬盘的结构布局分为MBR(主引导扇区)和最多4个逻辑分区(含DOS分区或非DOS分区),而在DOS逻辑分区中的磁盘组织如下:
引导扇区FAT1FAT2根目标区数据区引导扇区DBR(DOS Boot Record):位于LBA 0扇区,包含跳转指令、厂商标识和DOS版本号、BPB(BIOS Parameter Block,BIOS参数块)、DOS引导程序、结束标志字AA55。其中BPB包含每扇区字节数、每簇扇区数、每个FAT扇区数、扇区总线、根目录项数等等参数。
FAT是给每个文件分配磁盘物理空间的表格。FAT16簇数的上限是2 16,即65536个,每簇扇区数的上限是64个,因此其分区空间的上限为2G。FAT1位于逻辑1扇区。FAT簇映射中,0000表示空簇,FFF0~FFF6备用,FFF8~FFFF表示簇链结束,FFF7表示坏簇,其余值表示其后续簇的簇号。图3所示的文件起始簇号为2,结束簇号为4,共占用2、3、4三个簇。
簇是存储文件的最小单位,可以包含多个扇区。当文件本身或文件的最后一簇哪怕只有1个字节,也要占去1簇。这样,当这种文件很多时,空间的浪费是很可观的。
文件目录表FDT(File Directory Table)是操作系统寻找文件的入口,其内容是每一个文件的目录。FDT中的每一个目录项由32个字节组成。前8个字节是文件名,不足时用空格填满。紧跟着的3个字节是文件扩展名,接下来是10个字节的系统保留字。然后是文件产生的时刻和日期占8个字节,再后的2个字节是文件首簇号,最后4个字节是文件大小。FDT的起始扇区可由FAT的大小计算出,而FAT的大小可在DBR中读出。
4 软件实现
按照FAT16方式存储文件,是一个通用的`解决方案。因为这样可以得到现有的DOS和Windows系统的支持,但是代价是浪费一部分空间,也就是说存储效率下降了。为了改善这一情况,采用了改进的存储方法。就是先创建一个空文件,并根据需要为其分配一个大的存储空间,写入动作只是从尾部追加数据。这样就避免了很多小文件的产生,既可以充分利用存储空间,又可以使地址连续。
CF卡的读写是通过卡内的缓冲区进行的,不支持直接读写存储区域。缓冲区为一个FIFO结构,读写顺序进行,不支持随机存取,系统只能一次性地按顺序读完或写完所有一个或多个扇区。
设计时使用LBA方式访问CF卡比较方便,读写时只需要先在相应的寄存器写入LBA地址即可。要设定LBA方式,需访问驱动器/磁头寄存器。内存模式下部分寄存器译码如表3所列。
表3 内存模式下部分寄存器译码
REGA10A9~A4A3~A0offsetOE=0WE=010X00000偶字节读侧字节写10X00011错误寄存器特性寄存器10X00102扇区数扇区数10X00113扇区号(LBA7~0)扇区号(LBA7~0)10X01004低柱面号(LBA15~8)低柱面号(LBA15~8)10X01015高柱面号(LBA23~16高柱面号(LBA23~16)10X01106驱动器/磁头(LBA27~24)驱动器/磁头(LBA27~24)10X01117状态寄存器命令寄存器驱动器/磁头寄存器结构如下:
1LBA1DRVHS3HS2HS1HS0LBA―1为LBA方式,0为C/H/S(柱面/磁头/扇区)方式;DRV―选择驱动器0或驱动器1;HS3~HS0―LBA27~24,或为C/H/S方式的磁头号。
文件创建过程也就是针对FAT和FDT的读写过程。首先在FDT中申请表项,创建文件名称、属性、起始簇号、文件大小等,然后修改FAT,分配数据空间,备份FAT。文件存储就是要先从FDT和FAT中获得文件的起始簇号和簇号链,即LBA地址。然后,将此地址送给寄存器3、4、5、6(表3中的offset3、4、5、6),向扇区数寄存器填写读写数据所占的扇区个数,再向CF卡的命令寄存器写入操作的命令字,写操作30H,读操作20H。当写入命令或写入数据后要查询状态寄存器的状态,以判定CF卡是否准备就绪或写入成功。状态寄存器结构如下:
BUSYRDYDWFDSCDRQCORR0ERR各位的值为1时含义如下:
BUSY―CF卡记,此时不能接受其它命令;
RDY―卡可以接受命令;
DWF―写错误;
DSC―卡准备就绪;
DRQ―CF卡请求数据传送;
CORR―数据错误但被修正,不会终止多扇区读操作;
ERR―在上一命令以某种错误结束,可以在错误寄存器中查看错误类型。
下面以向CF卡写一个扇区数据为例,给出图4所示流程和C程序代码。
bit flag_1,flag_2;
void cfwr
{
unsigned char status;
cfwr_comm(0xe0,0x00,0x00,0x6c);
//写参数命令,指向逻辑6c扇区
do{status=PBYTE[0x07]; //读状态寄存器
if((status & 0x01)==0x01)
flag_1=1; //若ERR=1,置出错标志,做相应处理
while(status!=0x58);
cfwr_dat(); //写入数据
do{status=PBYTE[0x07]; //读状态寄存器
if((status & 0x20)==0x20)
flag_2=1; //若DWF=1时,置出错标志,做相应处理
while(status!=0x50);
}
void cfwr_comm(unsigned char lba27,lba23,la15,lba7) //写参数命令函数
{PBYTE[0x02] 扇区数为1
PBYTE[0x03]=lba7;
PBYTE[0x04]=la15;
PBYTE[0x05]=lba23;
PBYTE[0x06]=lba27; //设定LBA方式
PBYTE[0x07]=0x30; //送写入命令30H
}
void cfwr_dat() //写数据函数
{unsigned int i,temp;
unsigned char xdata dat[512]; //dat[]存放一个扇区的数据
for (i=0;i<512;i++) //连续写512字节
{P1=P1 & 0xf8; //选中外部RAM
temp=dat[i];
P1++; //根据实际电路选择中CF卡
PBYTE[0x00]=temp;}
}
5 结论
笔者在湿度检测仪中,根据本文所介绍的方法,用CF卡向计算机转存数据,可以非常方便地对数据进行维护。
篇4:嵌入式系统中的线性Flash文件系统设计
嵌入式系统中的线性Flash文件系统设计
作者: WuYJ@263.net.cn
摘要:设计一种能够在典型嵌入式环境下应用的线性文件系统,为嵌入式系统Flash空间的管理提供一种非常有效的手段。它包装和通用文件系统类似的API接口,设计的实现独立于实时操作系统(RTOS)和具体的Flash典型,可方便移植到不同的嵌入式应用中。
在嵌入式系统中,为了便于对闪存(Flash)空间进行管理,会采用文件的形式来访问Flash。目前,可以购买到的Flash文件系统一般都是兼容DOS的文件系统(Flash File System,FFS),这对需要一个具有复杂的目录层次,并且DDS文件兼容的系统来说是必要的;但是对大多数的嵌入式应用来说,这种文件系统太过奢侈。笔者在参与嵌入式系统项目的时候,设计了一种线性文件系统,它适用于大多数的嵌入式应用对Flash文件系统的需求。
线性文件系统设计基于三个目标:一是提供给应用程序通过文件名而不是物理地址访问系统Flash的能力;二是文件系统的设计独立于实时操作系统(RTOS),这样可以很容易移植到不同的嵌入式应用中;三是设计统一的底层接口,适应不同的Flash类型。本文设计的线性文件系统为典型的嵌入式系统提供了所需的类文件系统能力。需要注意的是,本文件系统不支持复杂的Flash扇区擦写次数均衡算法,没有目录层次,并且和其它的文件系统不兼容。
1 线性文件系统
线性文件系统的设计思路是这样的:文件分为文件头和文件数据区两个部分,每个文件按照顺序存放在Flash中,以单向链表来链接文件。文件的起始部分是文件头,包含文件的属性、指向下一个文件头的指针、文件头和文件数据区的32位循环冗余校验和(CRC32)等。文件头用一个32位的字来表示文件属性,每位表示一种属性,如数据文件或者是可执行文件,是否已删除的文件等,具体可以根据应用的需要来定义文件的属性;文件头和文件数据区维护独立的CRC32校验,使文件系统能更精确检测文件的完整性。文件的起始地址没有特殊需求,分配给文件系统的Flash大小限制了文件的大小。另外,线性文件系统作为嵌入式系统的一个功能模块,它为应用程序提供与标准文件系统类似的API接口,如:read()、write()、open、close()、stat()和seek()等。对于同时在多片Flash的系统而言,每片Flash相当于一个目标,文件都可存储在任何一片中(当然受物理空间限制),但不能跨片存储。
图1 Flash文件系统空间
在第一个文件创建之前,必须进行初始化,将所有分配给文件系统的`Flash空间擦除。当创建第一个文件时,起始位置从文件系统的起始地址开始,文件头指针指向下一个空文件的起始位置(链表尾部);第二个文件的位置从当前的链表尾部开始,同时文件头中的链表指针指向新的尾部。删除文件时,仅仅是简单地把文件头的标识位中的活动文件标识位置0,表示删除。这样,在经过多次删除之后,就有必要运行碎片整理模块来进行文件系统Flash空间的碎片整理。碎片整理模块还需要在文件系统Flash空间尾部留一个扇区来数据备份,以便当碎片整理被打断时(如下电或者复位)可以恢复文件系统。这个保留的扇区称空闲扇区。它必须放在文件系统空间之后,这样可以保证文件系统的所有文件在所占用的Flash空间是连续的。整个文件空间的分配如图1所示。
阴影部分是文件头,数据结构如下:
struct hdr{
unsigned short hdrsize; /*文件头字节数*/
long filsize; /*文件头版本*/
long filsize; /*文件大小*/
long flags; /*描述文件的标识*/
unsigned long filcrc; /*文件数据的CRC32的值*/
unsigned long hdrcec; /*文件的最后修改时间*/
struct hdr *next; /*指向下一个文件头的指针*/
char name[NAMESIZE]; /*文件名*/
char info[INFOSIZE]; /*文件描述信息*/
};
碎片整个记录区包含两种数据类型:碎片整理文件头信息表defraghdr和文件区扇区整理前后的CRC值备份表sectorcre。具体的地址分配从空闲扇区的起始地址减1开始,往前分配文件系统扇区数乘以4字节作为sectorcrc的空间;从sectorcrc起始地址减1开始,往前分配活动文件个数乘以64字节作为碎片整理文件头信息表。这两个结构定义如下:
struct defraghdr{
struct hdr *ohdr; /*文件头的原始位置指针*/
struct hdr *nextfile; /*指向下一个文件的指针*/
long filsize; /*文件大小*/
unsigned long crc; /*这个头的CRC32值*/
unsigned long ohdrcrc; /*原始文件头CRC32值的拷贝*/
long idx; /*碎片整理表头的索引*/
long nesn; /*新的文件尾的扇区号*/
long neso; /*新的文件尾的扇区偏移量*/
char *nda; /*新的文件起始地址*/
char fname[NAMESIZE]; /*文件名*/
};
struct sectorcrc{
unsigned long precrc; /*碎片整理前扇区数据CRC32的值*/
unsigned long postcrc; /*碎片整理后扇区数据CRC32的值*/
};
从上面介绍可知,除了文件数据之外,文件系统还需要如下4种额外的开销。
①文件头:这是每个文件必须的开销,如果文件名和信息域各24字节,那么整个文件头共76字节。
②碎片整理文件头信息表:每个活动(非删除)的文件在进行碎片整理时在这个表里创建一个表项,每个表项64字节。
③碎片整理前后的扇区CRC32值表:保存文件整理前后的CRC32值,总的字节数约为文件所占扇区数的4倍。
④空闲块:用来在碎片整理过程中备份当前整理扇区数据。它必须不小于文件系统其它所有扇区。
可以用下面方程计算系统开销的总和:
overhead=(FTOT*(HDRSIZE+64))+SPARESIZE+(SECTORCOUNT*8)
其中:
FTOT是总的文件数;
HDRSIZE是文件头字节数(目前为76字节);
SPARESIZE是空闲块的大小;
SECTORCOUNT是分配给文件系统的Flash扇区数,不包括空闲块。
图2 文件碎片整理
2 碎片整理
创建新文件需要占用文件系统空间;但是,由于Flash的底层技术不允许Flash中的任意地址空间被删除,而是按照扇区为单位删除,为此在删除一个文件的时候,暂时没有把整个文件所占的空间删除,仅仅是在文件头的标识里作一个删除标识,并保留在Flash中。这样,被删除文件积累到一定的数量时,就会占用相当大的空间。因此,需要整理文件系统Flash空间,使被删除文件占用的空间重新使用。图2显示了碎片整理过程。文件F1、F2和F5已经被删除,并且在碎片整理之后从Flash中被清除。
进行碎片整理的方法可以有多种。对于嵌入式系统来说,选择哪种方法,衡量的依据是复杂性和功能之间的平衡。下面讨论两种不同的方法:第一种方法相当简单,但是有缺陷;第二种方法功能强大得多,笔者在线性文件实现中即采用这种方法。当然,存在更加复杂的解决办法,但通常的情况是,所添加的复杂性会使整个文件系统的实现更加复杂。目标是保持文件存储的简单和线性,保证所有的文件都是以连续的空间存储在Flash中。
最简单的方法是将活动的文件备份在RAM中,删除分配给文件系统的Flash空间,然后将RAM中备份的所有文件拷贝回Flash。这种方法很简单,并且不需要分配一个扇区作为空闲区;但问题是,需要有一整块和分配给文件系统的空间一样大的RAM来完成这项工作。更糟的是,如果此时系统被复位,或者在删除扇区内容却还没有将文件拷贝回Flash的时候被断电,文件系统将会崩溃。因为RAM中的内容会随之选择,文件内容会被破坏掉。
我们在文件系统实现设计了一种碎片整理方法,可以防止在碎片整理过程中系统复位导致文件崩溃的情况。采用这种方法,不需要大块的RAM,但是需要预选先分配给碎片整理过程一个Flash扇区作为备份区。这个扇区的字节数不小于任何分配给文件系统的扇区。在整个文件系统中,这个扇区位于分配给文件系统最后一个扇区的下一个扇区。因为扇区可能比需要分配给非删除文件的备份的空间要小,所以它必须逐个扇区进行处理,而不是一下就把所有的碎片整理完。采用备份扇区的好处是,在碎片整理过程中,无论断电或者复位都不会破坏文件系统。当下次系统重新恢复时,会根据在碎片整理前记录的每个扇区碎片整理前后CRC值,来判断当前的文件碎片整理状态。如果上次文件整理没有完成,就会继续上次的整理。这种技术的一个缺陷是空闲扇区的擦写次数会较多。这样空闲扇区就可能因为达到擦写寿命而失败。达到这一点的关键依赖于使用的Flash、所分配给文件系
统的扇区数、文件删除和重建的频率。一个可行的解决办法采用电池备份的RAM来替换空闲扇区,可以增加Flash的整体寿命,但是对那些预算紧张的应用来说太过奢移。
具体的碎片整理过程是,首先建立碎片整理区。①为每个扇区建立2个CRC32表项;第一个CRC32是这个扇区在碎片整理前的CRC值;第二个CRC32值是计算出来的碎片整理后的CRC32值。这些CRC是当碎片整理过程被打断时,用来重新恢复整理用的。②创建碎片整理文件头信息表,每个活动的文件占用一个表项。③计算①和②的CRC值,并保存。①~③的数据保存在图1中的碎片整理记录区。第二步是文件重定位;遍历文件系统的每个扇区,处理重新定位后存储空间和该扇区相覆盖的文件。在每个扇区被重写之前,扇区原来的信息被保存在空闲扇区里。第三步,擦除Flash;遍历未使用的扇区,确认所有的扇区被删除。第四步,完整性检测:对新的文件进行检测,保证所有重定位的文件都是完整的。
3 应用分析
Flash的扇区有最大擦写次数。当前的Flash芯片一般支持10万~100万次的擦除。文件系统的应用各不相同,所以这里不能下结论说采用线性文件系统Flash的寿命会有多长。下面解释文件系统访问Flash的方法。这样用户可以根据应用来判断Flash的预期寿命。
我们所设计的线性文件系统并不进行扇区删除次数均衡,以延长Flash的使用寿命。如果所需要的文件系统频繁修改并需要扇区删除次数均衡,可以购买现成的Flash文件系统。扇区删除均衡算法大大增加了底层实现的复杂性,并且超出本文的讨论范围。一般来说,通过文件系统来管理Flash的需求远大于对Flash扇区擦写次数均衡的需求,特别是现在越来越多的Flash扇区都支持100万次的擦写。
如上面所提到的,文件系统本身提供给编程者的接口API与标准OS提供的接口类似。这可能误导开发者认为文件系统可以看作是一个硬盘,以任意的频率进行读写操作。事实并不是这样,线性文件系统碎片整理同制并没有进行擦写次数均衡,这意味着空闲扇区可能会是最早损坏的Flash扇区。因为在碎片整理过程中,空闲扇区被用作其它所有扇区的暂时存放扇区。例如在设计里,有13个扇区Flash用来作线性文件系统区,有1个扇区作为空闲扇区。假设对于最坏情况的碎片整理(13个扇区都影响到),如果每天进行1次碎片整理,对于100 000次擦写次数的Flash而言,可用期能够超过(100 000/13/365=21)。20年是基于每天进行1次碎片整理,并且所有扇区都影响到的情况。碎片整理的频率和整理所影响到的扇区数受应用程序使用文件的限制。用户可以根据文件系统的应用来估算Flash扇区的磨损情况,并作相应的处理。
下面讨论文件系统是如何使用扇区的。Flash扇区仅仅在碎片整理时候才被擦除。当删除文件的时候,只是简单地作一个标识(文件头的一个位)。如果一个存在的文件以写的方式打开,实际的修改步骤是,删除原有的文件,并在当前文件系统的最后一个文件之后重写该文件。最后,这个过程会使文件系统的Flash空间被耗尽,这要就需要运行碎片整理程序。碎片整理程序会使已被删除文件所占用的空间被清除,所有活动的文件在Flash中的位置以连续的方式存放。每个扇区的整理过程是,扇区被拷贝到空闲扇区作备份,然后原来的扇区被删除,计算出该扇区在文件整理后的内容,写入扇区,之后删除空闲扇区的备份。文件系统从头到尾每个扇区重复这样作。在碎片整理时,如果一个扇区不需要进行碎片整理,碎片整理程序就不会动这个扇区因此,受碎片整理程序影响的扇区数目依赖于当前被文件系统占用的Flash扇区数和被删除文件在Flash中的位置。
在一个典型的嵌入式应用里,文件系统中的可执行文件本身就是应用程序。可执行文件一般是最大的文件,也是最不可能经常改变的文件。这意味着执行文件所占用的空间是相对固定的,将会减少空闲扇区因为碎片整理而进行的擦写次数。另外一方面,如果有任何文件需要定期改动,碎片整理将会更加频繁运行。
结语
本文所设计的线性文件系统已经成功应用在笔者参加的嵌入式系统的产品,并且在实践中证明是一种比较有效的管理Flash的方式。当然,线性文件系统不是解决所有嵌入式应用管理Flash空间问题的答案,但是它对于那些不能判断是否要购买现成的Flash文件系统的项目提供了一个非常有用的选择方案。有关线性文件系统实现的C源代码,可以通过E-Mail:WuYJ@263.net.cn直接与笔者联系。
篇5:嵌入式系统中的线性Flash文件系统设计
嵌入式系统中的线性Flash文件系统设计
作者: WuYJ@263.net.cn
摘要:设计一种能够在典型嵌入式环境下应用的线性文件系统,为嵌入式系统Flash空间的管理提供一种非常有效的手段。它包装和通用文件系统类似的API接口,设计的实现独立于实时操作系统(RTOS)和具体的Flash典型,可方便移植到不同的嵌入式应用中。
在嵌入式系统中,为了便于对闪存(Flash)空间进行管理,会采用文件的形式来访问Flash。目前,可以购买到的Flash文件系统一般都是兼容DOS的文件系统(Flash File System,FFS),这对需要一个具有复杂的目录层次,并且DDS文件兼容的系统来说是必要的;但是对大多数的嵌入式应用来说,这种文件系统太过奢侈。笔者在参与嵌入式系统项目的时候,设计了一种线性文件系统,它适用于大多数的嵌入式应用对Flash文件系统的需求。
线性文件系统设计基于三个目标:一是提供给应用程序通过文件名而不是物理地址访问系统Flash的能力;二是文件系统的设计独立于实时操作系统(RTOS),这样可以很容易移植到不同的嵌入式应用中;三是设计统一的底层接口,适应不同的Flash类型。本文设计的`线性文件系统为典型的嵌入式系统提供了所需的类文件系统能力。需要注意的是,本文件系统不支持复杂的Flash扇区擦写次数均衡算法,没有目录层次,并且和其它的文件系统不兼容。
1 线性文件系统
线性文件系统的设计思路是这样的:文件分为文件头和文件数据区两个部分,每个文件按照顺序存放在Flash中,以单向链表来链接文件。文件的起始部分是文件头,包含文件的属性、指向下一个文件头的指针、文件头和文件数据区的32位循环冗余校验和(CRC32)等。文件头用一个32位的字来表示文件属性,每位表示一种属性,如数据文件或者是可执行文件,是否已删除的文件等,具体可以根据应用的需要来定义文件的属性;文件头和文件数据区维护独立的CRC32校验,使文件系统能更精确检测文件的完整性。文件的起始地址没有特殊需求,分配给文件系统的Flash大小限制了文件的大小。另外,线性文件系统作为嵌入式系统的一个功能模块,它为应用程序提供与标准文件系统类似的API接口,如:read、write()、open()、close()、stat()和seek()等。对于同时在多片Flash的系统而言,每片Flash相当于一个目标,文件都可存储在任何一片中(当然受物理空间限制),但不能跨片存储。
图1 Flash文件系统空间
在第一个文件创建之前,必须进行初始化,将所有分配给文件系统的Flash空间擦除。当创建第一个文件时,起
[1] [2] [3]
篇6:基于ARM7的光纤陀螺经纬仪寻北系统设计与实现
基于ARM7的光纤陀螺经纬仪寻北系统设计与实现
针对机械式陀螺经纬仪系统工艺要求高、结构复杂、精度受多方制约的特点,设计了一个陀螺经纬仪寻北系统,采用四位置寻北方案,选用光纤陀螺为测量元件,用高速32位ARM7微控制器作为主控芯片,寻北过程操作完全通过红外控制实现.实验数据表明,系统能很好的实现寻北功能,稳定性好,精度能够达到要求,同时系统结构简单、易于实现,接口灵活、扩展性好.
作 者:孙华 张文乾 张庆 作者单位:哈尔滨工程大学自动化学院,哈尔滨,150001 刊 名:弹箭与制导学报 PKU英文刊名:JOURNAL OF PROJECTILES, ROCKETS, MISSILES AND GUIDANCE 年,卷(期): 30(2) 分类号:V241.5 关键词:ARM7微控制器 光纤陀螺 经纬仪 寻北系统 ARM7 microcontroller fiber optic gyroscope theodolite north-seeking system篇7:基于ARM7核处理器VxWorks系统BSP设计
基于ARM7核处理器VxWorks系统BSP设计
摘要:该文主要介绍了SAMSUNG公司的基于ARM7TDMI核S3C4510B微处理器,并详细介绍了利用该处理器所设计的嵌入式系统以及VxWorks操作系统下BSP(BoardSupportedPackage)的开发。关键词:ARM7TDMIS3C4510BVxWorksBSP
1介绍
S3C4510B是三星公司推出的针对嵌入式应用的16/32位嵌入式处理器,该微控制器专为以太网通信系统的集线器和路由器而设计,具有低成本和高性能的特点,S3C4510B中内置了ARM公司设计的16/32位ARM7TDMI处理器,可以执行32位的ARM指令,也可执行16位的THUMB指令,并集成了多种外围部件,主要有:
●时钟频率50MHz
●内核/IO电压3.3V
●8KB的Cache/SRAM
●一个10/100Mbps以太网控制器,MII接口
●两个HDLC通道,每个通道可支持10Mbps
●两个UART通道
●两个DMA通道
●两个32位定时/计数器
●18个可编程I/O口
●中断控制器,支持21个中断源,包括4个外部中断
●支持SDRAM,EDODRAM,SRAM,Flash等
●具有扩展外部总线
●JTAG接口,支持软件开发,硬件调试
S3C4510B支持目前常用的嵌入式操作系统,如VxWorks、pSoS、ucLinux等,本文将主要介绍VxWorks操作系统下的软件开发。
ARM7TDMI是ARM家族通用的一款32位微处理器,它主要为用户提供了高性能、低价格解决方案。
ARM7TDMI具有三级流水线的32位RISC处理器,处理器结构为冯・诺依曼Load/Store。该CPU具有两种指令集,即ARM和Thumb指令集。ARM指令集是32位,它可以利用CPU最大性能;而Thumb指令集则是16位指令集。
ARM7TDMI内核方块图如图1所示。
2系统硬件图
该系统主要以S3C4510B为核心,外围集成了以太网卡、SDRAM、FLASH、UART以及HDLC等。图2是以S3C4510B为核心的最小系统设计图。
SDRAM选用HY57V653220(8Mbyte)、两片FLASH分别为AM29F040(存放bootrom)和T28F160BT(作为文件系统用)。
3VxWorks操作系统下BSP构建
在完成板上基本硬件的测试后,下面我就开始对vxWorks操作系统下BSP进行开发,开发前需要做一些准备工作,如准备开发工具等。
①开发工具用的是Tornado2.2forARM;
②参考资料有BSPKit、S3C4510BDataSheet;
③参考Tornado2.2forARM下自带的wrSBCArm7BSP;
④烧写程序采用编程器。
通常在开发BSP的时候,我们需要在Tornado原带BSP目录下找一个与我们所用的处理器相同或相近。与BSP相关的文件有:romInit.s、sysAlib.s、bootInit.c、
bootConfig.c、sysLib.c、config.h、configNet.h、makefile以及与我们硬件相关的,如串口sysSerial.c等。由于篇幅所限,具体的文件作用在此就不说了。下面主要根据S3C4510B来阐述一下BSP开发步骤。
(1)拷贝BSP
将wrSBCArm7BSP拷贝一份并命名为4510BSP,接下来的工作就是修改该目录下的文件,从而得到自己的BSP。
(2)修改MakeFile文件
修改4510BSP目录下的makefile文件,修改如下几行:
TARGET_DIR=4510BSP#changedbycaiyang
VENDOR=CAI#changedbycaiyang
BOARD=MyArmBoard#changedbycaiyang
ROM_TEXT_ADRS=01000000#ROMentryaddress
ROM_WARM_ADRS=01000004#ROMwarmentryaddress
ROM_SIZE=00080000#numberofbytesofROMspace
RAM_LOW_ADRS=00006000#RAMtext/dataaddress(bootrom)
RAM_HIGH_ADRS=00486000#RAMtext/dataaddress(bootrom)
MACH_EXTRA=
注解:ROM_TEXT_ADRS:BOOTROM的入口地址。对大多数板来说,这就是ROM地址区的首地址,然而也有的硬件配置使用ROM起始的一部分地址区作为复位向量,因此需要根据此设置偏移量作为它的地址。这个偏移量因CPU结构而定。
ROM_WARM_ADRS:BOOTROM热启动入口地址。它通常位于固定的ROM_TEXT_ADRS+4的地方。当需要热启动时,sysLib.c文件中sysToMonitor函数代码明确的跳转到ROM_WARM_ADRS地址处开始执行。
ROM_SIZE:ROM实际大小。
RAM_LOW_ADRS:装载Vxworks的地址。
RAM_HIGH_ADRS:将BootRomImage拷贝到RAM的`目的地址。
注意:RAM_LOW_ADRS和RAM_HIGH_ADRS都是绝对地址,通常位于DRAM起始地址的偏移量处,该偏移量取决于CPU结构,这需要参考VxWorks内存分布。对于ARM的内存分布请看图3,从图3可以看出RAM_LOW_ADRS在DRAM+0x1000处。这些地址对于S3C4510B来说都应该是重映射后的地址。
(3)修改config.h文件
主要是修改ROM_BASE_ADRS、ROM_TEXT_ADRS、ROM_SIZE、RAM_LOW_ADRS、RAM_HIGH_ADRS和undef掉不需要的部分。注意这些应该和makefile文件中设置的一致。
(4)修改romInit.s文件
CPU一上电就开始执行romInit()函数,因此在romInit.s代码段中它必须是第一个函数。对于热启动,处理器将会执行romInit()加上4后的代码(具体参考sysLib.c中的sysToMonitor()函数)。更多的硬件初始化在sysLib.c中sysHwInit()函数中,romInit()的工作就是做较少的初始化并把控制权交给romStart()(在bootInit.c文件)。
在S3C4510B处理器中,romInit.s文件主要做了以下几个工作:
①禁止CPU中断并切换到SVC32模式;
②禁止中断控制器;
③初始化SYSCFG、EXTDBWTH、ROMCON0、ROMCON1、DRAMCON0等寄存器,同时初始化了FLASH、SDRAM、DM9008等外围设备;
④将FLASH的内容拷贝到SDRAM中;
⑤改变FLASH和SDRAM的基地址,将SDRAM基地址改为0;
⑥初始化堆栈指针;
⑦跳转到C程序romStart()函数中。
在这里,只需要修改SYSCFG、EXTDBWTH、ROMCON0、ROMCON1、DRAMCON0等寄存器来设置FLASH、SDRAM、DM9008的基地址和大小即可。这需要根据板上的配置来修改,修改的内容在wrSbcArm7.h文件中。
BSP基本部分就已经修改完成,至于bootInit.c和bootConfig.c文件,我们一般不需要修改它,只是在调试过程中为了方便调试,可以将他们拷贝到BSP目录下,然后修改makefile文件,在makefile文件中添加如下两句。
BOOTCONFIG=bootConfig.c
BOOTINIT=bootInit.c
(5)利用tsfs(targetserverfilesystem)下载
要利用tsfs下载VxWorks,首先需要配置以下内容:
①在config.h文件中添加如下内容
/*Serialportconfiguration*/
#defineINCLUDE_SERIAL
#undefNUM_TTY
#defineNUM_TTYN_SIO_CHANNELS
#undefCONSOLE_TTY
#defineCONSOLE_TTY0
#undefCONSOLE_BAUD_RATE
#defineCONSOLE_BAUD_RATE38400
/***WDB***/
#ifdefSERIAL_DEBUG
#defineWDB_NO_BAUD_AUTO_CONFIG
#undefWDB_COMM_TYPE
#undefWDB_TTY_BAUD
#undefWDB_TTY_CHANNEL
#undefWDB_TTY_DEV_NAME
#defineWDB_COMM_TYPEWDB_COMM_SERIAL/*WDBinSerialmode*/
#defineWDB_TTY_BAUD38400/*BaudrateforWDBConnection*/
#defineWDB_TTY_CHANNEL1/*COMPORT#2*/
#defineWDB_TTY_DEV_NAME“/tyCo/1”/*defaultTYCODRV_5_2devicename*/
#endif/*SERIAL_DEBUG*/
/*tsfsaddedbycaiyang*/
#defineINCLUDE_TSFS_BOOT
并修改引导行为
#defineDEFAULT_BOOT_LINE\par“tsfs(0,0)host:vxWorksf=8h=169.254.72.67e=169.254.72.68u=caiyangpw=caiyang”
注:串口1用来显示引导信息,相当于PC机中的显示器,串口2用来下载VxWorks和调试。同时串口2波特率不能太高,经测试115200好像不行。
②配置targetserver
启动Tornado开发环境,选择Tool->targetserver菜单。在下拉菜单中选“targetserverfilesystem”并选中EnableFileSystem,然后目录指向Vxworks所在的地方。同时注意要把TornadoRegistry打开,这样配置完后点击Launch按钮即可连接成功,此后就可以通过串口2下载VxWorks和调试。
一般情况下,我们首先调试好BSP,然后在调试网卡。所以在调试网卡前,我们需要用串口来下载VxWorks映像。
至此,我们的BSP就开发完成。
4结论
在没有调试BSP的硬件工具如仿真器的时候,我们只能通过点灯或者串口输出来定位程序执行的正确性。这大大增加了调试
难度和进程。对于BSP开发,一般需要从一个模板来修改。BSP开发的正确性直接影响到VxWorks系统运行的稳定性。
篇8:基于ARM7核处理器VxWorks系统BSP设计
基于ARM7核处理器VxWorks系统BSP设计
摘要:该文主要介绍了SAMSUNG公司的基于ARM7TDMI核S3C4510B微处理器,并详细介绍了利用该处理器所设计的嵌入式系统以及VxWorks操作系统下BSP(Board Supported Package)的开发。关键词:ARM7TDMI S3C4510B VxWorks BSP
1 介绍
S3C4510B是三星公司推出的针对嵌入式应用的16/32 位嵌入式处理器,该微控制器专为以太网通信系统的集线器和路由器而设计,具有低成本和高性能的特点, S3C4510B中内置了ARM公司设计的16/32位ARM7TDMI处理器, 可以执行32位的ARM指令,也可执行16位的.THUMB指令, 并集成了多种外围部件,主要有:
● 时钟频率50MHz
● 内核/IO电压3.3V
● 8KB的Cache/SRAM
● 一个10/100Mbps 以太网控制器,MII接口
● 两个HDLC通道,每个通道可支持10Mbps
● 两个UART通道
● 两个DMA通道
● 两个32位定时/计数器
● 18个可编程I/O口
● 中断控制器,支持21个中断源,包括4个外部中断
● 支持SDRAM,EDO DRAM,SRAM,Flash等
● 具有扩展外部总线
● JTAG接口,支持软件开发 ,硬件调试
S3C4510B支持目前常用的嵌入式操作系统,如VxWorks、pSoS、ucLinux等,本文将主要介绍VxWorks操作系统下的软件开发。
ARM7TDMI是ARM家族通用的一款32位微处理器,它主要为用户提供了高性能、低价格解决方案。
ARM7TDMI具有三级流水线的32位RISC处理器,处理器结构为冯・诺依曼Load/Store。该CPU具有两种指令集,即ARM和Thumb指令集。ARM指令集是32位,它可以利用CPU最大性能;而Thumb指令集则是16位
[1] [2] [3] [4] [5]
篇9:CDMA基站系统中基带分配卡的设计与实现
CDMA基站系统中基带分配卡的设计与实现
摘要:SVRN3G/BTS样机系统的设计要求和IS2000协议,介绍了CDMA2000基站系统中基带分配卡(亦称BDC卡)的设计方案及其具体的硬件实现方法。基带分配卡的实现,可大大简化基站中基带部分的算是功能,使系统结构更加模块化,更易于升级和扩充。关键词:基站 码分多址 基带分配卡 扩频 成型滤波
CDMA是近年来用于数字蜂窝移动通信的一种先进的无线扩频通信技术,它能满足近年来高容量、廉价、高效的移动通信的需要。CDMA2000是北美基于IS-95系统发展而来的第三代无线通信系统,使用宽带CDMA技术以适用IMT-2000的需求。CDMA2000具有较好的后向兼容性,提供了从第二代IS-95系统向3G的平滑过渡,业务供应商可以在有附加容量和高级业务需求的区域内有选择性地建立CDMA2000网络。
本文是根据第三代移动通信的基站收发信机即3G/BTS(Base-station Transceiver System)样机系统的设计要求和IS2000协议对基带分配卡提出的一种设计方案。基带分配卡亦称BDC卡(Baseband Distribution Combiner),处于射频部分的宽带收发信卡(BBX)和基带部分的多信道处理卡(MCC)之间,它的实现可大大简化基带部分的处理功能,并使系统结构更加模块化,更易于升级和扩充。
(本网网收集整理)
1 BDC卡的功能介绍
DBC卡(即其带分配卡)由反向处理模块、前向处理模块以及其它辅助模块组成。其结构框图如图1所示。
BDC卡处理三个扇区(分别为a、b、c)的信号,每个扇区信号通过两个独立的天线实现空间分集接收,送入反向处理模块,同时,将来自前向处理模块的信号送入各扇区的射频及其前端处理。它的主要功能是:
(1)完成后向链路的A/D变换和前向链路的D/A变换;
(2)前向链路各MCC卡的信道单元合并、PN短码扩频、基带成型滤波;
(3)反向链路三个扇区接收的基带信号的分配;
(4)各扇区导频信道产生、16倍1.2288Mb/s时钟信号分配以及2s同步信号分配。
2 BDC卡的设计方案
2.1 反向处理模块
BDC的反向处理模块主要完成A/D转换、低通数字滤波、三扇区6个接收天线的信号分配。
由于受到射频前端模拟滤波器性能的限制,A/D模块输出须6bit以上,才可满足前端动态范围的要求。而MCC卡对反向信道处理单元的要求是I、Q两路输入信号为4bit,因而对A/D输出需要进行低通滤波,同时将8bit数据转化为4bit。转换如图2所示。
滤波器指标:
通带截止频率fp=590kHz,阻带截止频率fs=740kHz,阻带衰减10dB~15dB,输入为8bit数据,输出为4bit数据。
2.2 前向处理模块
根据3G/BTS样机系统的设计要求,为尽量简化多信道处理卡(即MCC卡)的前向处理模块,前向信道处理采用Motorola2450基站的处理办法:将前向成型滤波、短码扩频放到BDC单元。于是BDC的前向处理模块主要实现多个MCC卡信道单元的复接与合并、各扇区导频信道产生、I、Q正交扩频、前向基带成型滤波、D/A转换。
来自MCC卡的'数据经过幅度调整,宽度为12bit。在BDC的前向处理模块中,将一个MCC卡4组数据进行合并,得到一组宽度为14bit的数据,然后进行I、Q正交扩频,最后完成基带成型滤波。前向处理模块如图3所示。
合并模块是BDC与MCC的数据接口。从每个MCC卡送来的数据是12位的串行数据。传送数据的工作时钟都是在16X(X=1.2288Mb/s)系统时钟下工作。首先输出最低有效位进行串行相加,并把相加后的进位与下次送来数据相加,同时,送入奇偶校验作验和,检查奇偶校验是否正确。如果正确,把串行相加的结果送入串行转换;如果错误,则清除此次MCC卡送来的数据,并通过总线接口向GLI报告故障。
当所有前向CDMA信号合并后,串行相加模块输出的串行信号要进行串并转换把串行数据变成并行数据然后从逻辑结构上移N位,加入导频信道,最后输出进行I和Q扩频。其中,导频信道采用全'0'导频信道,I和Q扩频也称四相扩频。扩频序列的长度为2 15(即32768个PN比特片的长度)。在前向信道,每个基站使用不同偏置的序列,而反向信道调制时都使用零偏置的序列,这个序列称为导频PN序列。
在扩频操作后,将I和Q脉冲加至基带滤波器的输入端。基带滤波器的频率响应满足规定的性能要求。基带滤波器的归一化频率响应在通带0≤f≤fp内,应限定在±δ1内,阻带f≥fs,应小于或等于δ2。各参数的数值为δ1=1.5dB,δ2=40dB,fp=590kHz,fs=740kHz。
最后,经过滤波的信号通过D/A转换器转换成模拟信号,送入BBX。
2.3 辅助模块
该模块主要包括时钟产生与分配、同步信号分配、差分驱动与电平转换。
BDC为MCC卡提供所需的时钟信号,同时也为BBX提供A/D和D/A所需要的时钟信号。时钟产生模块的输入为16X(X=1.2288Mb/s),输出为16X、8X、4X、2X和1X信号,分别送往MCC卡和BBX。
同步信号分配将CSM板送来的2s同步信号分发给各MCC卡和BBX。
BDC根据需要对相关信号提供差分驱动以及电平转换。
2.4 BDC备份
设计时,BDC卡考虑备份,主、备两个BDC通过三态门插入背板总线,同一时刻只有一个BDC卡在工作,三态门的控制由AMR根据报警情况来设置完成。当工作中的BDC卡出现故障时,将立即报警,然后AMR通过报警情况,马上改变三态门的设置,启用另一个BDC卡。这种关键部件采用备份设计的思想,可大大提高系统的安全性和可靠性。
3 BDC卡的硬件实现
根据上述设计方案,选择APEX20K100、AD9058、AD9765和AD9632作为该基带分配卡的主要部件。其单个扇区的硬件框图如图4所示。
图4中,APEX20K100是Altera公司推出的一种可编程逻辑器件,它具有规模大、时间可预测性好等优点。AD9058是ADI公司推出的一种双通道、高性能8bit模-数转换器(ADC)。采样时钟频率可达50MSPS,其独特的结构参考电压,能驱动两片ADC。AD9765是一种双端口、高速率、双通道、12bit的CMOS数模转换器(DAC)。它在很小的48路LQFP包中集成了2个高性能的12bit TxDAC和磁心,1个电压参考和数字接口电路,4个扩展引脚。更两路数据。AD9632是一个高速率宽带放大器,它利用电其特有的设计结构结合了电流反馈和电压反馈的最佳优点,展示了异常快速准确的脉冲响应。
3.1 APEX20K100加载方式设计
APEX20K100在运行期间,将加载数据存储到静态存储器(SRAM)单元中。因为SRAM是易失性的,所以每次上电时,SRAM单元必须装入加载数据。当APEX20K100加载好后,其寄存器和I/O引脚都必须初始化,然后设备才进入系统动作的用户模式。考虑到上述特点,APEX20K100采用EPC2/PS联合加载方式加载数据,每次只要一上电,EPC2就自动将数据加载到APEX20K100。图5为EPC2/PS联合加载方式的电路图。
图5中,(4)为一串行同步数据微处理器接口和MasterBlaster通信电缆,通过它将微处理器中的数据加载到EPC2设备,然后通过EPC2的DATA引脚串行输出给APEX20K100。其中:
・MSEL1和MSEL0是APEX20K加载方式设置引脚,两个全为'0',则为EPC2/PS加载方式;
・DCLK是APEX20K的时钟输入引脚,每输入一个时钟,就串行输入一位数据;
・nCONFIG是加载控制输入引脚,低电平时目标设备复位,低电平到高电平的转换过程中开始对设备进行加载数据;
・Vcc与加载设备的供电电压相同,即3.3V;
・VIO是MaterBlaster输出驱动器的参考电压。
3.2 信号流程
反向处理模块:BDC接收来自BBX的模拟信号,一个扇区两副天线以差分形式进入,共8路信号。它们通过AD9632进行差分
合并、前置放大后,送入AD9058进行A/D转换,变成8倍频速率的数字基带信号,其中I、Q两路分别编8位码,2个天线共输出2×16=32位数据;再通过74F374锁存器锁存,利用统一的信号时钟控制,将信号送入APEX20K100进行数字滤波,将8bit数据转化成4bit,再通过APEX20K100的内部时钟控制,利用8路数据划分时输出16位数据,最终送给MCC进行数据处理。
前向处理模块:每个MCC送给BDC卡3路串行数据,每路12bit,分别到三个扇区,则每个扇区分到一路12bit串行数据。而整个系统总共有10块MCC,共30路信号,因此BDC的每个扇区都有10路串行数据输入。MCC将这10路信号送到MPEX20K100,完成串并转换、正交扩频、成型滤波等功能后输出28位并行数据,分I、Q两路,每路14位,到AD9765进行D/A转换。最后,将AD9765的I、Q两路模拟输出信号送至BBX进行射频前端处理并发射。
辅助模块主要由AD580、AD708产生AD9058的两个外部参考电压+VREF、-VREF以及2.5V、3.3V的供电电压。同时由MCC送来的16X(X=1.2288Mb/s)时钟信号,通过APEX20K100产生16X、8X、4X、2X、1X时钟,供给BBX和MCC。
通过测试和软硬件联调,该BDC卡能为BBX和MCC提供正确的数据信号,并且在整个CDMA2000基站样机的系统联调中,BDC卡能正常完成其功能,性能良好,采用热备份,在实际工作中比较稳定可靠。
篇10:CDMA基站系统中基带分配卡的设计与实现
CDMA2000基站系统中基带分配卡的设计与实现
摘要:SVRN3G/BTS样机系统的设计要求和IS2000协议,介绍了CDMA2000基站系统中基带分配卡(亦称BDC卡)的设计方案及其具体的硬件实现方法。基带分配卡的实现,可大大简化基站中基带部分的算是功能,使系统结构更加模块化,更易于升级和扩充。关键词:基站 码分多址 基带分配卡 扩频 成型滤波
CDMA是近年来用于数字蜂窝移动通信的一种先进的无线扩频通信技术,它能满足近年来高容量、廉价、高效的移动通信的需要。CDMA2000是北美基于IS-95系统发展而来的第三代无线通信系统,使用宽带CDMA技术以适用IMT-2000的需求。CDMA2000具有较好的后向兼容性,提供了从第二代IS-95系统向3G的平滑过渡,业务供应商可以在有附加容量和高级业务需求的区域内有选择性地建立CDMA2000网络。
本文是根据第三代移动通信的基站收发信机即3G/BTS(Base-station Transceiver System)样机系统的设计要求和IS2000协议对基带分配卡提出的一种设计方案。基带分配卡亦称BDC卡(Baseband Distribution Combiner),处于射频部分的宽带收发信卡(BBX)和基带部分的多信道处理卡(MCC)之间,它的实现可大大简化基带部分的处理功能,并使系统结构更加模块化,更易于升级和扩充。
1 BDC卡的功能介绍
DBC卡(即其带分配卡)由反向处理模块、前向处理模块以及其它辅助模块组成。其结构框图如图1所示。
BDC卡处理三个扇区(分别为a、b、c)的信号,每个扇区信号通过两个独立的天线实现空间分集接收,送入反向处理模块,同时,将来自前向处理模块的信号送入各扇区的射频及其前端处理。它的主要功能是:
(1)完成后向链路的A/D变换和前向链路的D/A变换;
(2)前向链路各MCC卡的`信道单元合并、PN短码扩频、基带成型滤波;
(3)反向链路三个扇区接收的基带信号的分配;
(4)各扇区导频信道产生、16倍1.2288Mb/s时钟信号分配以及2s同步信号分配。
2 BDC卡的设计方案
2.1 反向处理模块
BDC的反向处理模块主要完成A/D转换、低通数字滤波、三扇区6个接收天线的信号分配。
由于受到射频前端模拟滤波器性能的限制,A/D模块输出须6bit以上,才可满足前端动态范围的要求。而MCC卡对反向信道处理单元的要求是I、Q两路输入信号为4bit,因而对A/D输出需要进行低通滤波,同时将8bit数据转化为4bit。转换如图2所示。
滤波器指标:
[1] [2] [3] [4]
★ 嵌入式实习总结
★ gps论文
★ 计算机统考试题
★ 清点储存卡作文
★ 闪存存储知识细则
【ARM7系统中实现CF卡存储的文件系统设计(精选10篇)】相关文章:
基于ARM体系的嵌入式系统BSP的程序设计2022-05-04
会计电算系统数据接口设计思想与方法论文2022-08-05
如何在8位处理器上运行Linux2022-04-30
系统测试总结2023-02-17
全国物流师第二次统考试题2022-05-27
模具设计实习报告2023-10-02
数码相机和单反相机的区别2023-04-28
模具设计实践报告2023-11-29
大容量NAND?Flash?TC58DVG02A1F2023-08-03
医学翻译词汇十一2022-10-08