电脑桌面
添加盘古文库-分享文档发现价值到电脑桌面
安装后可以在桌面快捷访问

ARM嵌入式系统分析

来源:莲生三十二作者:开心麻花2025-11-191

ARM嵌入式系统分析(精选12篇)

ARM嵌入式系统分析 第1篇

由Boot Loader和固化在固件(firmware)中的Boot代码(可选)共同组成一个嵌入式系统的引导加载程序。它的作用和功能就像固化到计算机内主板上的一个ROM芯片程序BIOS(basic input output system)。但是它一般不配置像BIOS那样的固件程序,这是因为要考虑经济方面的原因,因此必须自己完成这方面的工作。Boot Loader可以初始化硬件设备,建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。它的实现严重地依赖于硬件,特别是在嵌入式系统中,即使基于同一个CPU的Boot Loader,对于不同的板子,也有很大的不同[1]。

1 Boot Loader分析

系统加电,然后复位后,基本上所有的CPU都是从复位地址上取得指令的。以微处理器为核心的嵌入式系统中,通常都有某种类型的固态存储设备(FLASH,E2PROM等),这个固态存储设备被映射到一个预先设置好的地址上。在系统加电复位后,一开始处理器就会去执行存放在复位地址处的程序,而且通过开发环境可以将 Boot Loader 定位在复位地址一开始的存储空间上,因此 Boot Loader 是系统加电后,在操作系统内核或者一些应用程序被运行之前,首先会运行的程序。对于嵌入式系统来说,比较复杂的或者为了方便后期开发大的应用程序,有的使用操作系统,也有很多的情况下,因功能简单,或仅包括应用程序的系统不使用操作系统,但是不论有无操作系统在启动时都必须执行Boot Loader,为的是准备好软硬件运行环境。

以微处理器为核心的嵌入式系统中,一般都有某种类型的固态存储设备(FLASH,E2PROM等),这个固态存储设备被映射到一个预先设置好的地址上。在系统加电复位后,一开始处理器就会去执行存放在复位地址处的程序。而且通过开发环境可以将 Boot Loader 定位在复位地址一开始的存储空间上,因此 Boot Loader 是系统加电后,在操作系统内核或者一些应用程序被运行之前,首先会运行的程序。对于Linux系统,它的主要任务有以下7个方面。

(1) 初始化处理器及外设的硬件资源配置。一般嵌入式系统的处理器在上电复位后,外部的I/O引脚都处于输入状态,处理器的片内和片外设备资源都需要配置。

(2) 建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的环境,这样就能为最终启动操作系统的内核提供最好条件。

(3) 把操作装载到映射的内存中,这也是所有任务当中最重要的一个,只有完成这个任务,操作系统才能被装载到内存当中去,Boot Loader一般会提供串口和网络装载两种方式。

(4) 为了把操作系统的映像保存在FLASH中,以便以后启动,可以直接装载FLASH的数据,而不用重新下载程序,但需要对FLASH进行编程。

(5) 运行操作系统。设置相关的寄存器和资源,跳转到操作系统的所在空间,进行相关的引导,这就是Boot Loader。

(6) 在Linux系统启动时,传递系统的启动参数,可以给内核传递命令行等参数,通过命令行可以选择控制系统的启动模式。

(7) 命令行的解析和输入/输出控制。为了开发的方便,多数的Boot Loader都采用串口作为终端的控制方式[2]。

Boot Loader的启动过程可分为两个重要阶段。第一阶段:由于 Boot Loader的实现依赖于 CPU的体系结构,所以设备代码的初始化等功能都在该阶段完成。而且,为了达到缩短代码的目的,通常用汇编语言来编写。在这一阶段的执行过程中,又可分为几个方面。

① 硬件设备的初始化。在该阶段的执行过程中,首先需要对硬件设备进行初始化,其目的主要是为第二阶段的执行以及随后Kernel的调用准备基本的硬件环境。

② 为加载 Boot Loader的第二阶段准备RAM空间。为了获得更快的执行速度,通常把第二阶段加载到 RAM 空 间 中 来 执 行。因 此, 必 须 为 加 载Boot Loader准备好一段可用的 RAM空间范围。

③ 设置堆栈指针。设置堆栈是为了执行 C语言代码作好准备。

④ 跳转到第二阶段的C入口点。当程序执行到这个位置时,可以通过修改 PC寄存器的值,使其跳转到第二阶段。

第二阶段阶段的启动流程分析:为了便于实现复杂的功能和获得更好的代码可读性和可移植性,通常第二阶段的代码用C语言来实现。但是,与普通 C语言的不同之处是,这里使用了“ 弹簧床 ” 的概念,即先用汇编语言写一段小程序,并将这段小程序作为第二阶段可执行映像的执行入口点,然后在汇编程序中用 CPU跳转指令跳入main ( )函数中去执行,当 main ( )函数返回时,CPU执行路径再次返回到汇编程序中第二阶段,包括初始化本阶段要使用的硬件设备,检测系统内存映射,会将Kernel映像和根文件系统映像从FLASH中读到RAM空间中,为内核设置启动参数调用内核。

2 Boot Loader的设计

2.1 中断向量表(二级)的设计与建立

如果有中断或者异常发生时,处理器便会强制性地把PC指针指向向量表中它所对应的中断类型地址值。为了提高中断响应速度,FLASH的0x0地址存放能跳转到 0x33FFFF00地址处中断向量的跳转指令,也就是会在在RAM中建立一个二级中断向量表,起始地址为0x33FFFF00。除了复位外,所有的异常入口地址都由FLASH跳转得到,代码如下:

#define _ISR_STARTADDRESS (SDRAM_END- 0x100) //0x33FFFF00

definepISR_RESET (* (unsigned *)(_ISR_STARTADDRESS+0x0)) // x33FFFF00

#define pISR_UNDEF (* (unsigned *)(_ISR_STARTAD-DRESS+0x4)) // x33FFFF04

2.2 第二阶段拷贝到 RAM

把第二阶段Stage2拷贝到 RAM地址的最顶大小为1 MB的开始空间, RAM的起始地址为0x30000000。代码如下所示[3]:

/* 计算在FLASH中的位置, 假设该映像不超过64K,可修改该值*/

Adr r0,_start

Add r2,r0,#(64*1024)

Add r0,ro,#0x1000

Ldr r1,BLOB_START

/* 开始复制stage2 到 RAM,R0=源起始地址,R1=目的地址,R2源结束地址 */

copy_loop:

ldmia r0!,{r3- r10}

stmia r1!,{r3- r10}

cmp r0,r2

ble copy_loop

ldr r0,BLOB_START

2.3 堆栈指针的设置

用户使用哪些中断决定了系统堆栈的初始化, 以及系统需要处理的哪些错误类型。一般情况下,堆栈设置是必须, 而且是由管理者自己设置的。如果需要使用IRQ中断, 那么IRQ堆栈的设置也是必须的,下面是IRQ堆栈的设置[4]:

IRQMode //堆栈

orr r1,r0,#IRQMODE|NOINT

msr cpsr_cxsf,r1; IRQMode

ldr sp,IRQStack

3 Stage2的设计

3.1 可执行映像 Stage2 的入口

由于Glibc 库支持的函数不能用于编译和链接 Boot Loader 这样用C语言编写的程序,因此把main()函数的起始地址作为第二阶段的入口点是最直接的想法。可以用汇编编写一段Trampoline小程序,用 CPU跳转指令跳到main()函数去执行,当函数返回时会再次回到Trampoline 程序[5],代码如下:

ldr sp DW_STACK_START @setup stack pointer

mov fp,#0 @no previous frame,so fp=0

mov a2, #0 @set argv to NULL

bl main @call main

mov pc,#FLASH_BASE @otherwise,reboot

程序顺利时就不会再回到开始的Trampoline 程序,不然就会回到最后的语句,系统就会重新启动。

3.2 内存影射

一般S3C2410上配置的SDRSAM大小为64 MB, 该SDRAM的物理地址范围是0x30000000~0x33FFFFFF(属于Bank 6)。由Section的大小可知,该物理空间可被分成64个物理段。因为ARM体系结构中数据缓冲必须通过 MMU开启,因此Boot Loader效率不是很高,但是MMU可以通过平板映射(虚拟地址和物理地址相同)方式被开启,这样使用内存空间Dcache,从而使Boot Loader的运行速度得到有效的提高[6]。映射关系代码如下[7,8]:

void mem_mapping_linear(void)

{ unsigned long descriptor_index, section_base, sdram_base,

sdram_size;

sdram_base=0x30000000;

sdram_size=0x4000000;

for (section_base =sdram_base,descriptor_index =

sec-tion_base>>20;Ssection_base<sdram_base+

sdram_size; rdescrip-tor_index+=1;section_base +=0x100000)

{* (mmu_tlb_base +(descriptor_index)) =(section_base >>20) |

MMU_OTHER_SECDESC;}

}

3.3 装载内核映像和根文件系统映像

像 ARM这样的嵌入式 CPU 通常都是在统一的内存地址空间中寻址FLASH等固态存储设备的,因此从 Flash 上读取数据与从 RAM单元中读取数据一样,用一个简单的循环就可以完成从FLASH设备上拷贝映像的工作:其中 count 为根文件系统映像的大小或内核映像的大小[9]。

While(count)

{ *dest++=*src++;//src为FLASH中的地址, dest为 RAM中的地址

count-=4;

}

3.4 内核的启动参数的设置

内核启动可以从 NAND FLASH(NOR FLASH)中启动运行Linux,需要修改启动命令如下[10]:

#ifdef CONFIG_S3C2410_NAND_BOOTChar Linux_

cmd[]=“ noinit root=/dev/bon/2 init=/Linuxrc console=

tty0 console=ttys0” ;

#else

CharLinux_cmd[]=“CharLinux_cmd[]=” noinit root=

/dev/bon/3init =/Linuxrc console=tty0 console=ttys0” ;

LCD启动参数一般都包括root,init和console。noinitrd不使用ramdisk。root根文件系统在MTD分区。Init 内核运行入口命令文件。consol内核信息控制台,ttys0表示串行口0[11];tty0表示虚拟终端。

4 结 语

通过对Boot Loader的分析可以看出,设计一个性能优良的 Boot Loader 可以提高系统的稳定性及实时性,它是嵌入式开发中不可或缺的一部分。只有设计出一个稳定的Boot Loader,才能进行下一步的系统开发工作,直至完成整个嵌入式系统的开发。设计Boot Loader是一项很复杂的工作,需要对硬件资源和所用的操作系统有很深的理解。在实际开发中可以根据需要简化设计,去除不必要的系统功能,这样可以大大提高程序执行的效率和稳定性。这里给出的 Boot Loader 已经顺利通过了调试,可以正常加载操作系统。

参考文献

[1]马忠梅.ARM嵌入式处理器结构与应用基础[M].北京:北京航空航天大学出版社,2003.

[2]李驹光.ARM应用系统开发详解:基于S3C4510B的系统设计[M].北京:清华大学出版社,2003.

[3]曹程远.U-Boot在S3C2410上的移植[J].微型电脑应用,2005,21(7):48-50.

[4]郭志,江秀臣,曾奕.一个嵌入式系统的启动分析[J].微计算机信息,2005,21(32):28-30.

[5]陈海军,申卫昌,史颖.嵌入式系统引导程序详探[J].计算机技术与发展,2006,16(1):123-125,128.

[6]Microsoft Corporation.Microsoft extensible firmware initia-tive FAT32 file system specification[M].1st ed.[S.l.]:[s.n.],2000.

[7]SanDisk Corporation.Sandisk secure digital card productmanual[M].2nd ed.[S.l.]:[s.n.],2004.

[8]Sumsung Electronics.S3C2410X 32 b risc microprocessoruser′s manual[M].[S.l.]:[s.n.],2003.

[9]霍拉鲍夫.嵌入式Linux:硬件、软件与接口[M].陈雷,译.北京:电子工业出版社,2003.

[10]徐睿,黄健,徐辰.基于ARM的嵌入式系统开发与应用[M].北京:人民邮电出版社,2004.

嵌入式系统ARM实验报告 第2篇

实验报告

实验名称:实验一基于ADS开发环境的设计

实验二嵌入式Linux交叉开发环境的建立 实验三嵌入式Linux环境下的程序设计

课程名称嵌入式系统B

班级学号B13010711 姓名马俊民

开课时间 2015/2016学年第1学期

实验一基于ADS开发环境的程序设计

一、实验目的

1、学习ADS开发环境的使用;

2、学习和掌握ADS环境下的汇编语言及C语言程序设计;

3、学习和掌握汇编语言及C语言的混合编程方法。

二、实验内容

1、编写和调试汇编语言程序;

2、编写和调试C语言程序;

3、编写和调试汇编语言及C语言的混合程序;

4、编写程序测试多寄存器传送指令的用法。

三、实验原理

ADS全称为ARM Developer Suite,是ARM公司推出的新一代ARM集成开发工具。现在常用的ADS版本是ADS1.2,它取代了早期的ADS1.1和ADS1.0。

ADS用于无操作系统的ARM系统开发,是对裸机(可理解成一个高级单片机)的开发。ADS具有极佳的测试环境和良好的侦错功能,它可使硬件开发工作者更深入地从底层去理解ARM处理器的工作原理和操作方法,为日后自行设计打基础,为BootLoader的编写和调试打基础。

1.ADS软件的组成

ADS由命令行开发工具、ARM运行时库、GUI开发环境(CodeWarrior和AXD)、实用程序、支持软件等组成。

2.GUI开发环境

ADS GUI开发环境包含CodeWarrior和AXD两种,其中Code Warrior是集成开发工具,而AXD是调试工具。

使用汇编语言进行编程简单、方便,适用于初始化硬件代码、启动代码等。汇编语言具有一些相同的基本特征:

1.一条指令一行。

2.使用标号(label)给内存单元提供名称,从第一列开始书写。3.指令必须从第二列或能区分标号的地方开始书写。4.注释必须跟在指定的注释字符后面,一直书写到行尾。

在ARM汇编程序中,每个段必须以AREA作为段的开始,以碰到下一个AREA作为该段的结束,段名必须唯一。程序的开始和结束需以ENTRY和END来标识。嵌入式C语言设计是利用基本的C语言知识,面向嵌入式工程实际应用进行程序设计。为了使单独编译的C语言程序和汇编程序之间能够相互调用,必须为子程序之间的调用规定一定的规则。ATPCS就是ARM程序和Thumb程序中子程序调用的基本规则。

四、实验过程与关键代码分析

1.创建项目工程

在File菜单中选择New命令,打开一个新建工程对话框。在Project选项卡下,选择ARM Executable Image, 然后在Project name文本框里输入项目名称,点击确定。弹出工程窗口。

选择File菜单中的New命令,选择File标签页,在File name文本框中输入要创建的文件名。汇编程序以.s结尾,c程序以.c结尾。在Location文本框中指定文件的存放位置,选中Add to Project,在Targets中选中DebugRel,单击确定关闭窗口。

2.用汇编语言设计程序实现10的阶乘

AREA EXAMPLE, CODE, READONLY ENTRY start MOV R0, #10 MOV R1, #1 LOOP MUL R0, R0, R1 SUB R0, R0, 1 CMP R0, #1 BHI LOOP END 在这个程序中,我们首先对R0和R1赋值,将R0作为一个变量,而R1作为一个存贮阶乘值的寄存器。在每进行一次乘法之后,将R0减1。同时在做完减法后进行判断,如果此时R0大于1,则返回继续乘法,否则结束程序,输出结果。

3.用调用子程序的方法实现1!+2!+3!+„+10!,代码如下: asmp.s

AREA JC, CODE, READONLY

EXPORT JCP

ENTRY JCP

ADD R3, R0, #1

MOV R2, #1

MOV R1, #1 LOOP MUL R0, R1, R2

MOV R1, R0

ADD R2, R2, #1

CMP R2, R3

BNE LOOP

NOP

NOP

MOV PC, LR

END

PROGC.c #include Extern int JCP(int N)

int main(){ int res=0;int m=10;int i;for(i=1;i<=m;i++)

res=res+JCP(i);printf(“The result =%dn”,res);return 0;} 在这个程序中,主程序由c语言完成作求和,子程序由汇编语言写成作阶乘。

5.实现字符串的逆序复制TEXT1=“HELLO”=>TEXT2=“OLLEH”

AREA invstring, CODE, READONLY start

ADR R1,TEXT1

ADR R2,TEXT2

MOV R3, #0 LOOP

LDRB R0,[R1], #1

ADD R3,R3,#1

CMP R0,#0

BNE LOOP

SUB R1,R1,#2

LOOP1

LDRB R0,[R1], #-1

STRB R0,[R2], #1

SUB R3,R3, #1

CMP R3,#1

BNE LOOP1

MOV R5,#&55

TEXT1

TEXT2 NOP =“HELLO”,0 ALIGN =“OELLH” END

五、实验小结

在这次实验中,学会了如何使用汇编程序进行编程。对汇编程序编程一些基本的要求有了一定的了解,学习了C语言的语法和在其中调用汇编程序的方法。学会了利用CodeWarrior IDE开发C和ARM汇编代码。学会了在AXD中进行代码调试的方法和过程,对AXD的调试有初步的了解。,实验二嵌入式Linux交叉开发环境的建立

一、实验目的

1、掌握嵌入式Linux交叉开发环境的建立方法

2、学习和掌握Linux常用命令

3、学习和掌握vi编辑器的使用

二、实验内容

1、搭建嵌入式Linux交叉开发环境

2、熟悉Linux的常用命令

3、熟悉vi编辑器的常用命令

三、实验原理

Linux系统是UNIX系统的分支,是UNIX的微机版。Linux具有异常丰富的驱动程序资源,支持各种主流的硬件设备与技术。Linux包含了现代的UNIX操作系统的所有功能特性,这些功能包括多任务、虚拟内存、虚拟文件系统、进程间通信、对称所处理器、多用户支持等。

Vi编辑器是所有UNIX和Linux下的标准编辑器。它包含3种工作模式。嵌入式系统是专用的计算机系统,它对系统的功能、可靠性、成本、体积、功耗等有严格的要求。大部分嵌入式系统没有大容量存储设备,一般不能安装大型开发软件,系统的开发需要采用交叉开发模式。

四、实验过程与关键代码分析

实验用的是UP-NetARM2410-S试验箱,里面配有三星的芯片S3c2410X。打开电脑上VMWare软件,在Windows系统下启动虚拟机里的Linux系统。接着需要

1.宿主机的环境搭建

下载并运行VMWare,根据向导创建一台新虚拟机并选择Linux作为客户操作系统,再根据向导安装RedHat Linux 9.0。

2.虚拟机中启动Linux操作系统

使用root登陆,用户名为root,密码为123456。之后对共享文件设置进行调整:打开settings界面,打开shared folders功能,同时将路径设置到有课前下载的软件的目录下。

3.开发工具软件的安装(1)安装gcc 打开Linux后,打开终端窗口,在共享的目录下找到install.sh并运行,命令如下: ls./ install.sh 安装程序将自动建立/arm2410s目录,并将所有的开发软件包安装到/arm2410s 目录下,同时自动配置编译环境,建立合适的符号链接。安装完成后在目录/opt/host/armv4l/bin/下应该能看到主编译器。(2)配置PATH路径

vi.bash.profile 将里面PATH变量改为PATH=$PATH:$HOME/bin:/opt/host/armv41/bin/;存盘后执行

source.bash_profile 以后armv4l-unknown-linux-gcc将被自动搜索到

4.宿主机上的开发环境配置(1)配置IP地址

ifconfig eth0 192.168.0.121 命令配置了宿主机的IP地址。然后打开网络配置窗口,重新探测MAC地址。重新激活。(2)关闭防火墙

单击“Red”菜单→“系统设置”→“安全级别”→打开“安全级别配置”窗口,选择“无防火墙选项。”(3)配置NFS。

单击“Red”菜单→“系统设置”→“服务器设置”→“服务”,在“服务配置”窗口中勾选nfs,单击“开始”(4)NFS设置

单击“Red”菜单→“系统设置”→“服务器设置”→“NFS服务器”,打开“NFS服务器配置”窗口,设置NFS共享。

然后在NFS服务器中增加主机IP地址的链接许可和目录。完成配置。

5.目标机的信息输出

Windows系统下,“开始”→“所有程序”→“附件”→“通讯”→“超级终端”,新建一个通信终端。区号、电话号码随意输入。设置每秒位数为“115200”,数据位为“8”,无奇偶校验,停止位为“1”,无数据流控制。单击“确定”。

6.程序的运行

打开超级终端,启动Linux,屏幕显示:

[/mnt/yaffs] 在超级终端上执行挂载命令:

[/mnt] mount –t nfs 192.168.0.121:/arm2410s /mnt/nfs 挂载成功后可执行程序。

五、实验小结

在这次实验中,学会建立Linux交叉开发环境,学会了ls和vi,cd等常用的Linux命令,并掌握了Vi编辑器的使用方法。同时知道了如何在搭建失败时寻找错误进行排错。

实验三嵌入式Linux环境下的程序设计

一、实验目的

1、掌握嵌入式Linux环境下的程序设计方法

2、学会编写Makefile文件

二、实验内容

1、熟悉嵌入式教学实验箱的使用

2、编写C程序和Makefile文件

3、编译程序产生可执行程序

4、完成主机的挂载和程序的执行

三、实验原理

在嵌入式Linux环境下的程序设计方法有一下几个步骤:

1.编写源程序

2.编写Makefile文件 3.编译程序

4.运行和调试程序

5.将生产的可执行文件加入文件系统。

前三个步骤在宿主机上完成,后面的步骤在目标机上完成。

四、实验过程与关键代码分析

1.建立工作目录

mkdir hello cd hello

2.编写源程序

用vi编辑器编辑Hello.c文件

vi Hello.c 在Vi中输入源程序如下:

#include main(){

printf(“hello world n”);}

3.编写Makefile文件

vi Makefile 在vi中编辑Makefile文件如下:

CC= armv4l-unknown-linux-gcc EXEC = hello OBJS = hello.o CFLAGS += LDFLAGS+=-static all: $(EXEC)$(EXEC):(OBJS)$(CC)$(LDFLAGS)–o $@ $(OBJS)clean:

-rm –f $(EXEC)*.elf *.gdb *.o

4.编译程序

在hello目录下运行“make”来编译程序。

make clean

make 编译成功后,生成可执行文件Hello.o。

5.下载调试

在宿主机上启动nfs服务,并将/arms2410s设置为共享目录。接下来启动超级终端,建立通讯,挂载。

[/mnt] mount –t nfs 192.168.0.121:/arm2410s /mnt/nfs 挂载成功后,进入/mnt/nfs,再进入/mnt/nfs/hello,直接运行刚刚编译生成的可执行文件Hello.o,查看运行结果

cd hello./hello 可以看见“Hello world”

只需要挂载一次便可,只要实验箱没有重启,就可以一直保持连接。反复修改、编译、调试,直至程序调试通过。

6.可执行文件加入文件系统

程序调试通过后,可以把可执行文件拖放到usr/bin目录下,然后使用mkcramfs制作工具生成新的文件系统。当系统启动后,就可以在相应目录下执行可执行程序hello.五、实验小结 在这次实验中,学会了在嵌入式Linux环境下设计程序。同时知道了如何对目标机进行挂载。以及如何在发现挂载不成功寻找错误进行修改。另外在编译文件时需要注意的也都有所了解。

实验四多线程程序设计

一、实验目的1、2、二、实验内容1、2、3、4、三、实验原理

四、实验过程与关键代码分析

五、实验小结

ARM嵌入式系统分析 第3篇

关键词:ARM;嵌入式系统;硬件;嵌入指纹识别

中图分类号:TP311.52 文献标识码:A 文章编号:1007-9599 (2012) 09-0000-02

一、前言

随着现代化通讯技术以及互联网技术的迅猛发展,信息家电以及信息工业也取得长足发展,嵌入式系统的重要性逐渐引起关注,在今后一段时间内,其功能也必定会有很大程度的提升,最终发展成为具有数字处理、管理、控制以及通讯等功能的系统。嵌入式系统是建立在计算机技术基础之上的,应用是其中心内容,系统的硬件及软件具有可裁剪性,可以满足专用计算机系统对功能、成本、功能以及体积等方面的要求。嵌入式系统最突出的优势在于可以从用户的现实需求出发,对系统的硬件及软件进行相应的裁剪,有效提升集成度、降低功耗及体积,对于系统的智能化水平以及网络化程度等具有重要意义。当前,技术较为成熟的指纹识别系统主要依托于PC平台,从而在很大程度上对指纹识别设备的广泛应用形成了阻碍,同时也导致系统成本上升;此外,还有不少的嵌入式系统选择的是51系列单片机充当系统的中央处理器,这样的系统只能向用户提供较为简单的人机界面,并且性能不够优越,完善的空间也极为有限。ARM处理器成本低、性能优越、体积有限并且功耗较低,鉴于其上述优点,深入分析和研究基于ARM嵌入式指纹识别系统具有重要的现实指导意义和价值。

二、理论概述

(一) ARM

ARM架构,过去称作进阶精简指令集机器,更早称作Acorn RISC Machine。是一个32位元精简指令集中央处理器架构,基于ARM架构的主要产品为低功耗且质优价廉的RISC处理器、相关技术及软件,被广泛应用于教育多媒体、DSP、嵌入式控制以及移动式应用等领域。ARM32为体系结构是当前处于业内领先水平的32位嵌入式RISC微处理器结构,被全部ARM处理器共享。由于具有较强的节能特性,ARM处理器非常适用于移动通讯领域,符合其主要设计目标为低耗電的特性。

(二)嵌入式系统

嵌入式系统主要有处理器、存储器、输入输出以及相关软件等部分构成。其中,嵌入式处理器时系统最关键的部件。当前全球共有千余种具备嵌入式处理器,每种处理器都具有自身的功能及优势,对于嵌入式系统应用而言,基本特点高性能、低能耗以及低成本;作为嵌入式系统另一重要组成部分的存储器,需要与所使用的处理器相配套,然而在功能方面,还需要关注存储器的稳定性以及容量的大小;至于系统的其他外围设备,在选择时则需要对现实需求以及处理器等情况予以全面考虑。

三、基于ARM嵌入式系统的设计及其应用

(一)硬件设计

在硬件设计方面,从用户的实际情况出发,出于有效控制成本以及降低开发难度的考虑,笔者选择了飞利浦公司研发的32位嵌入式处理器LPC2104芯片,其具有体积小、功耗低以及性能强等优势,系统结构详见下图所示。

图1 基于ARM嵌入式系统结构示意图

在实践中,比较常见的调试方式就是非插入式的JTAG调试,作为标准测试接口,借助JTAG边界扫描便可以实现与ARM CPU的通信;调试主机作用在于编译ARM程序,并借助调试程序进行调试;蜂鸣器的主要作用是报警以及反馈指纹识别系统工作情况;LPC2104的电源有两组,分别为I/O口供电电源及内核供电电源,二者的电压分别是3.3V和1.8V,因此需要选择输入电源为5V的电源芯片;利用I2C总线可以确保看门狗时钟电路与处理器之间通讯的实现,该系统选择X1228芯片,一旦芯片的电压超出或低于正常值,可以及时进行复位,并对重要数据进行保存;键盘采取扫描方式,包括六个功能性按键,可以执行上、下、左、右移动以及进入和退出等操作;该系统选择的是SMG12864B点阵型LED液晶,要先进行初始化才可以正常使用,其主要作用是对ID号、姓名、时间以及其他信息等进行显示,控制器中设置了数据地址页指针以及数据地址列指针各一个,以便用户对内部的512字节RAM进行访问;Flash存储器具有易于操作、读写可靠性高、成本低廉以及可擦写等优势,在嵌入式系统中得到普遍应用。在此次系统设计方案中笔者选择三星公司研发的K9F6408u0b芯片,其主要作用是对指纹库数据、用户信息以及出入记录等进行保存。本次系统设计方案的重点之一就是通讯模块,LPC2104具备两个UART,二者的寄存器的区别不大,分别负责与上位机PC的通讯以及与指纹识别模块的通信。因为所选择的是RS232协议,所以要选择相应的电平转换电路。LPC2104数据处理操作并不面向存储器,其唯一针对的对象就是寄存器中的相关内容,这样就在很大程度上降低了操作的难度,只需要在发送缓冲区中写入相关数据便可以完成数据发送任务。系统选择FIQ中断进行数据接收,在数据达到接收缓冲区的时候,便会出现中断,随即相应的中断程序被执行。

本系统设计方案所选择的RS232电平转换芯片MAX3232的RS232电平转换共有两组,这样便可以保证和两个串口开展有效通信。将MAX3232芯片的TTL/CMOS输入及输出信号连接到LPC2104的UART的输入及输出上,同时将MAX3232的输入输出口连接到串口9针连接器。具体的连接方式详见下图所示。在需要应用UART0的场合,首先要对TXD0以及RXD0管脚连接进行设置,在此基础上对串口波特率以及工作模式进行相应的设置,完成上述设置之后便可以正常的开展发送及接受数据的操作。

图2 LPC2104与串口连接示意图

(二)嵌入指纹识别模块及软件设计

在完成嵌入式系统的硬件设计的基础上,借助UART0串口嵌入指纹识别模块便可以实现正常的系统通信。在此次设计方案中,笔者选择的是中正公司研发的主要应用于功耗较低场合的SM-60指纹识别模块。笔者所选择的指纹识别模块具有光学指纹传感器,包括性能优越的DSP处理器以及Flash等芯片,其主要功能包括处理指纹图像、提取模板、匹配模板、保存模板以及搜索指纹等,不仅如此,相关指令只需加以整合还可以实现复杂程度更高的功能。

系統程序是由通讯及管理两大内容构成的,以指纹识别模块相关协议为主要依据进行编写。一方面是对指令帧进行发送,对相关数据进行接收和校验,另一方面是在数据库中添加用户信息,同时对诸如用户姓名、ID号以及开启时间等门禁开启记录进行保存。利用键盘以及LCD液晶显示,可以实现对现场的控制操作以及显示,此外还可以在液晶屏菜单中进行选择,对指纹库进行增加或删除,或者是对个人信息进行修改,除此之外,依据LPC2104单片机的指示,还可以执行录入指纹、处理图像、提取特征、生成及保存模板、对比指纹以及搜索指纹等操作。只需按下相应的按键便可以执行与该键盘相对应的程序。

四、结语

本文首先对ARM及嵌入式系统整体设计方案进行简单介绍,之后分别从硬件平台设计、嵌入指纹识别模块以及软件等方面对基于ARM嵌入式系统设计进行全面阐述。选用ARM公司所研发的ADS软件,可以仿真实现指纹识别设备自身所具备的一系列的功能。除此之外,在LPC2104的Flash芯片中对相关程序进行固化,还可以取得脱机工作效果,所以,依托于ARM嵌入式系统的指纹识别系统,可以确保用户对系统性能、成本、功耗以及体积等方面的要求的实现,从一定意义上讲,未来指纹识别设备的发展将会朝着小型化和嵌入式趋势发展。笔者在此次的设计方案中对指纹识别技术以及嵌入式技术进行了有效的融合,系统的成本得到了有效控制,在生活小区物业管理、政府以及军事等领域的身份甄别等方面将会有极大的应用空间。

参考文献:

[1]胡振国.基于ARM的嵌入式软硬件系统设计与实现.电子科技大学,2010,04,01

[2]陆巍.嵌入式数控系统人机界面及系统软件研究与开发.浙江大学,2006,01,01

[3]李澎,吴云洁.基于ARM的嵌入式系统的设计及在转台控制系统中的应用.仪器仪表用户,2007,03

[4]郭朗.基于ARM的嵌入式系统设计.电子科技大学,2007,04,01

[5]高文青.基于ARM9的嵌入式视频采集系统的研究与应用.武汉理工大学,发表时间,2008,04,01

[6]何宝宏.IP虚拟专用技术[M].北京:人民邮电出版社,2002

[7]戴宗坤,唐三平. VPN与网络安全[M]. 北京:电子工业出版社, 2002.5-14

ARM嵌入式系统分析 第4篇

1 嵌入式系统简介

嵌入式系统是以具体应用为中心, 以计算机技术为基础, 采用可裁减的软硬件, 适用于对功能、可靠性、成本、体积和功耗等有严格要求的专用计算机系统。

XScale体系结构是采用Intel Pentium技术实现的ARM兼容的嵌入式微处理器架构, 并对ARM体系结构进行了增强, 具有业界领先的高性能和低功耗特性。Intel XScale PXA270就是一款得到了ARM公司授权的、使用ARM微处理器核, 经过Intel优化过的嵌入式CPU。XScale 处理器是Intel目前主要推广的一款ARM微处理器。而且针对嵌入式系统, XScale架构引入了Pentium处理器工艺和系统结构技术, 实现了Pentium微处理器体系结构的一系列高性能技术, 达到了高性能、低功耗和小体积等嵌入式系统要求的特征。

PXA270-EP (Experiment Platfom) 就是一款基于Intel Xscale PXA270处理器, 针对高校嵌入式教学和实验及科研的平台。这款设备主要包括核心板与底板两个部分, 核心板主要集成了高速的PXA270 CPU , 配套的存储器, 网卡等设备。底板主要是各种类型的接口与扩展口。

2 嵌入式系统的启动过程

嵌入式Linux系统从软件的角度看通常可以分4个层次:引导加载程序、内核、文件系统和用户应用程序。简单的说, Bootloader就是在操作系统内核运行之前运行的一段小程序。通过这段小程序, 可以完成初始化硬件设备、建立系统参数表, 从而将系统的软硬件环境配置成一个合适的状态, 以便为最终调用操作系统内核准备好正确的环境。启动引导程序就象PC机中的BIOS程序, 主要负责初始化系统的最基本设备, 通常主要包括CPU、网络和串行接口等。当基本部分初始化成功后, 会把操作系统的镜象文件装载到内存中, 最后把CPU的控制权交给内核程序。

通常Bootloader是严格依赖于硬件的。特别是在嵌入式系统中, 建立一个通用的Bootloader几乎是不可能的, 这就使得常见的Bootloader有多种。如BLOB、VIVI、U-BOOT等。虽然Bootloader有多种, 但是基本的功能都非常相似。主要是初始化基本硬件:CPU, FLASH, SRAM及网卡;使用CPU的串口0作为通信终端, 与用户进行交互;实现简单的网络协议, 大部分情况下是TFTP服务;通过网络下载内核, 或下载文件系统;烧写Flash;提供基本的系统参数。

2.1 Bootloader的启动过程详细分析

Bootloader的启动流程一般分两个阶段:阶段1和阶段2。

2.1.1 Bootloader的阶段1

在本阶段, Bootloader主要完成以下的工作:基本硬件的初始化, 包括屏蔽所有的中断、设置CPU的速度和时钟频率、RAM初始化、初始化LED, 关闭CPU内部指令和数据Cache灯;为加载阶段2准备RAM空间;拷贝阶段2到RAM中, 在这里确定两点:①阶段2的可执行映像在固态存储设备的存放的起始地址和终止地址;②RAM空间的起始地址;设置堆栈指针SP, 这是为执行阶段2的C语言代码做好准备。

2.1.2 Bootloader的阶段2

在本阶段, Bootloader主要完成以下的工作:用汇编语言跳转到main入口函数;初始化本阶段要使用的硬件设备, 包括初始化串口、初始化计时器等;检测系统的内存映射;加载内核映像和根文件系统映像, 这里包括规划内存占用的布局和从Flash上拷贝的数据;及设置内核的启动参数。

本系统采用BLOB boot。文件是汇编与C代码混合编写的。它保存在 /PXA270_linux/blob_ours中, 其中较重要的文件有:

2.2 BLOB boot代码分析

../src/blob/start.S 系统启动从这儿开始 , 汇编语言格式。

../src/blob/trampoline.S 把需要运行的C代码装到内存里, 汇编语言格式

../src/blob/xlli/mainstone/start.s 硬件的基本初始化, 主要程序的流程与框架

../src/blob/xlli/mainstone/xlli_Lowlev_Init.s 硬件的基本初始化, 具体函数的实现

../src/blob/main.c 绝大部分调用的文件都以C文件格式出现

2.2.1 文件../src/blob/start.S

系统的启动从里开始, 当系统上电后, CPU程序指针会指在地址0x00000000 (Flash) 上, 这里存储的软件就是指向这个文件, 从_start:处开始运行。其中部分关键代码如图1所示。

其中从undefined_instruction到fiq的具体实现较简单, 大部分情况就是点亮外部的led灯, 告之用户若出错了, 并且使CPU停下, 真正有意义的, 各系统差别较大的部分都在reset。start.S这部分代码的流程如图2所示。

2.2.2 文件../src/blob/xlli/mainstone/start.s & xlli_Lowlev_Init.s

这两个汇编程序主要实现了硬件的基本初始化, start.s是主要程序的流程和框架, xlli_Lowlev_Init.s是具体的函数的实现。它们全部由汇编代码写成, 是系统启动的最核心部分, 代码落去。start.s程序流程如图3所示。

2.2.3 文件../src/blob/trampoline.S

这部分代码是汇编代码与C代码的结合点, 通过这个程序, 把需要运行的C代码装载到内存里。设置堆栈, 并把程序指针指向C代码实现的程序。主要完成的工作是:清空一部分SDRAM, 为装载后面的程序做准备;设置堆栈指针;跳转至main.c中的main () 函数。

2.2.4 ../src/blob/main.c

从这个文件开始, 绝大部分的文件都以C文件格式出现。主要功能包括初始化串口和网络, 加载内核镜像文件, 在BLOB命令模式下实现用户交互。

3 结语

Bootloader是嵌入式系统的基本部分, 也是很重要的部分, 负责了系统的启动与初始化, 熟悉并理解它的工作过程与编译是进入嵌入式世界的前提。掌握了PXA270 的Blob启动流程, 为项目的后续的开发奠定良好的基础, 了解其启动过程, 也是进行开发工程的首要步骤。

摘要:介绍了ARM & Linux嵌入式系统的特点, 以及PXA270微处理器的结构特点和性能。详细地分析了PXA270 & Linux嵌入式系统的启动过程, 只有熟悉和掌握其工作过程, 才能为项目的后续开发奠定良好的基础。

关键词:嵌入式系统,ARM,Linux,Bootloader

参考文献

[1]杜春雷.ARM体系结构与编程[M].清华大学出版社, 2007.

[2]孙琼.嵌入式L inux应用程序开发祥解[M].人民邮电出版社, 2007.

[3]李亚锋, 欧文盛.ARM嵌入式Linux系统开发从入门到精通[M].清华大学出版社, 2007.

ARM嵌入式系统分析 第5篇

摘要:在介绍基于ARM体系的嵌入式系统启动流程的基础上,结合编程实例,详细、系统地叙述了BSP(板级支持包)程序的各个组成部分及其具体设计方案,并就实际程序设计中的几个难点问题做了说明。

关键词:ARMBSP嵌入式系统微处理器

ARM公司在32位RISC的CPU开发领域不断取得突破,其结构已经从V3发展到V6。

BSP(BoardSupportPackage)板级支持包介于主板硬件和操作系统之间,其功能与PC机上的BIOS相类似,主要完成硬件初始化并切换到相应的操作系统。BSP是相对于操作系统而言的,不同的操作系统对应于不同定义形式的BSP,例如VxWorks的BSP和Linux的BSP相对于某一CPU来说,尽管实现的功能一样,可是写法和接口定义是完全不同的。另外,仔细研究所用的芯片资料也十分重要,例如尽管ARM在内核上兼容,但每家芯片都有自己的特色。所以这就要求BSP程序员对硬件、软件和操作系统都要有一定的了解。

本文介绍基于ARM体系的嵌入式应用系统初始化部分BSP的程序设计。本文引用的源码全部是基于HMS320C7202芯片设计,并已成功运行。

1初始化过程

尽管各种嵌入式应用系统的结构及功能差别很大,但其系统初始化部分完成的操作有很大一部分是相似的。嵌入式系统的启动流程如图1所示。

1.1设置入口指针

启动程序首先必须定义指针,而且整个应用程序只有一个入口指针。一般地,程序在编译链接时将异常中断向量表链接在0地址处,并且作为整个程序入口点。入口点代码如下:

ENTRY(_start);开始

1.2设置异常中断向量表

ARM要求中断向量表必须放置在从0开始、连续84字节的空间内。各异常中断向量地址以及中断的算是优先级如表1:

表1各异常中断的中断向量地址以及中断的处理优先级

中断向量地址异常中断类型异常中断模式优先级(6最低)0x0复位特权模式(SVC)10x4未定义中断未定义指令中止模式(Undef)60x8软件中断(SWI)特权模式(SVC)60x0c指令预取中止中止模式50x10数据访问中止中止模式20x14保留未使用未使用0x18外部中断请求(IRQ)外部中断(IRQ)模式40x1c快速中断请求(FIQ)快速中断(FIQ)模式3

每当一个中断发生后,ARM处理器便强制把程序计数器(PC)指针置为向量表中对应中断类型的地址值。因为每个中断向量仅占据放置1条ARM指令的空间,所以通常放置1条跳转指令或向程序计数器(PC)寄存器赋值的数据访问指令,使程序跳转到相应的异常中断处理程序执行。如果异常中断处理程序起始地址小于32MB,使用B跳转指令;如果跳转范围大于32MB,使用LDR指令。

另外,对于各未用中断,可使其指向一个只含返回指令的哑函数,以防止错误中断引起系统的混乱。

1.3初始化存储系统

初始化存储系统的编程对象是系统的存储器控制器,一个系统可能存在多种存储器类型的接口,不同的存储系统的设计不尽相同。Flash和SRAM同属于静态存储器类型,可以合用一个存储器端口;而DRAM因为有动态刷新和地址线复用等特性,通常配有专用的存储器端口。其中,SDRAM必须在初始化阶段进行设置,因为大部分的程序代码和数据都要在SDRAM中运行。

在HMS30C7202中,与SDRAM配置有关的寄存器有4个:配置寄存器、刷新定时寄存器、写缓冲写回寄存器和等待驱动寄存器,需要根据实际的系统设计对此分别加以正确配置。

SDRAM的初始化过程如下:加电延迟10ms(各具体SDRAM器件延时时间可能不同)设置配置寄存器参数延时写刷新定时寄存器,设置刷新周期延时使能自动刷新延时设置模式寄存器(位于SDRAM内部)。

1.4存储器地址分布重映射(remap)和MMU

系统一上电,程序将自动从0地址处开始执行。因此,必须保证在0地址处存在正确的代码,即要求0地址开始入是非易失性的ROM或Flash等。但是因为ROM或Flash的访问速度相对较慢,每次中断响应发生后,都要从读取ROM或Flash上面的向量表开始,影响了中断响应速度。一般程序执行后将SDRAM映射为地址0,并把系统程序加载到SDRAM中运行,其具体步骤可以采用以下的方案:

(1)上电后,从0地址的ROM开始往下执行;

(2)根据映射前的地址,对SDRAM进行必要的代码和数据拷贝;

(3)拷贝完成后,进行重映射操作;

(4)因为RAM在重映射前准备好了内容,使得PC指针能继续在RAM里取得正确的指令。

在这种地址映射的变化过程中,程序员需要仔细考虑的是:程序的执行流程不能被这种变化所打断,注意保证程序流程在重映射前后的承接关系。

存储器的地址分配是很灵活的,可以将I/O操作映射成内存操作,也可以通过映射对某些不可访问的地址空间进行保护等。进行存储器初始化设计时,一定要根据应用程序的具体要求来完成地址分配。对地址管理通过MMU即存储器管理单元实现。

在ARM系统中,MMU通过页式虚拟存储管理,将虚拟空间和物理空间分别分成一个个固定大小的页,并建立两者之间的映射关系,从而实现虚拟地址到物理地址的转换。MMU还可完成存储器访问权限的控制和虚拟存储器空间缓冲特性的设置。

以下是实现MMU的部分代码:

for=(i=1;i<0x1000;i++){

pagetable[i]=(i<<20)|MMU_SECDESC;

}//建立页表,每页大小为1MB,页表偏移序号是物理地址的高12位;

for(addr=SDRAM_BASE;addr<(SDRAM_BASE+SDRAM_SIZE/2);addr+=SIZE_1M)

pagetable[addr>>20]=addr|MMU_SECDESE|

MMU_CACHEABLE|MMU_BUFFERABLE;

//将SDRAM_BASE至(SDRAM_BASE+SDRAM_SIZE/2)空间的设置为不可CACHE和不可BUFFER的

for(addr=SDRAM_BASE+SDRAM_SIZE/2;addr<(SDRAM_BASE+SDRAM_SIZE);addr+=SIZE_1M)

pagetable[addr>>20]=(addr+0x1000000)|

MMU_SECDESC|MMU_CACHEABLE|MMU_BUFFERABLE;

//将这段空间的地址映射关系设置为VA(虚拟地址)=PA(物理地址)+0x1000000

pagetable[0]=(0x42f00000)|MMU_SECDESC|MMU_CACHEABLE|MMU_BUFFERABLE;

//将SDRAM的虚拟地址0x42f00000映射到0处

1.5初始化各模式下的堆栈指针

因为ARM处理器有7种执行状态,每一种状态的堆栈指针寄存器(SP)都是独立的(System和User三项式使用相同SP寄存器)。因此,对程序中需要用到的每一种模式都要给SP寄存器定义一个堆栈地址。方法是改变状态寄存器(CPSR)内的状态位,使处理器切换到不同的状态,然后给SP赋值。这里列出的代码定义了三种模式的SP指针,其中,I_Bit表示IRQ的中断禁止位;F_Bit表示FIQ的`中断禁止位:

@;SetupSVCstacktobe4Kontopofzero-initdata

LDRr1,=installStack

ADDsp,r1,#2048

@;SetupIRQandFIQstacks

MOVr0,#(Mode_IRQ32|I_Bit)

MSRcpsr,r0

MOVr0,r0

ADDsp,r1,#2048*2

MOVr0,#(Mode_FIQ32|I_Bit|F_Bit)

MSRcpsr,r0

MOVr0,r0

ADDsp,r1,#2048*3

一般堆栈的大小要根据需要而定,但是要尽可能给堆栈分配快速和高带宽的存储器。堆栈性能的提高对系统性能的影响是非常明显的。

1.6初始化有特殊要求的端口、设备

有些关键的I/O部件必须在使能IRQ和FIQ之前进行初始化。因为如果在使能IRQ和FIQ之前没有进行初始化,可以产生假的异常中断信号。程序中初始化了HMS30C7202的串口1用来调试程序与其它设备通信。串口1是一个通用全双工异步接收/发送器(UART),它支持16C550的大部分功能。UART有接收缓冲/发送保持寄存器、波特率除数锁存器、中断允许寄存器等9个寄存器。对串口1的初始化主要是对各寄存器的设置,其实现代码如下所示:

_outb(ser_base+0x30,1);

_outw(0x8002301c,0xffff9f9f);GPIOPORTAEnable

Register

_outw(0x800230A4,0x6060);GPIOPORTAMultiFunctionelect-Register

serial_outb(SERIAL_LCR,0x80);

serial_outb(SERIAL_LCR,0x80);

serial_outb(SERIAL_DLL,baud_data[cur_baud]);

serial_outb(SERIAL_DLM,0x0);

serial_outb(SERIAL_LCR,0x03);

seial_outb(SERIAL_FCR,0x01);

serial_outb(SERIAL_IER,0x00);

serial_outb(SERIAL_MCR,0x03);

1.7切换处理器模式,开中断

最后转换到应用程序运行所需的最终模式,一般是User模式。不要过早切换到User模式进行User模式的堆栈设备。因为进入User模式后就不能再操作CPRS回到别的模式了,可能会对接下去的程序执行造成影响。

这时才使能异常中断,通过清除CPRS寄存器中的中断禁止位实现。如果过早地开中断,在系统初始化之前就触发了有效中断,会导致系统的死机。

1.8呼叫主应用程序

当所有的系统初始化工作完成后,就需要把程序流程转入主应用程序。

图2

2技术难点分析

2.1多种语言的混合编程

ARM有两种汇编指令集:16位THUMB指令集和32位ARM指令集。使用16位的寄存器可以降低成本,而且16位THUMB指令集整体执行速度比ARM32位指令集快,提高了代码密度。为了满足ARM子程序和Thumb子程序互相调用,必须保证编写的代码遵循ATPCS。ATPCS规定了子程序调用的基本规则。

ARM系统结构也支持C、C++以及汇编语言的混合编程。汇编语言和C/C++语言的混合编程,在一个追求效率的程序中比较常见。许多人认为像BSP这样底层的程序应该用纯汇编语言编写,其实不然。用汇编语言编写的程序可读性不高,而且不宜维护,不便于向其它类型的CPU移植,而这些方面却是C语言程序的优势。BSP能否用纯C语言去写呢?也不行。因为某些操作是用C实现不了的。例如操作特殊寄存器的指令、CP15寄存器的指令、中断使能及堆栈地址的设定等。在汇编和C/C++之间的函数调用时,也要遵循ATPCS的定义,还要注意的是用C语言编写嵌入式程序时,要避免使用不能被固化到ROM中的库函数。

混合编程情况下的程序编译及链接后的输出代码与没有混合编程时是不同的。所以当多个源文件如果使用了不同的设置进行编译,相互之间的调用可能产生兼容性问题,对此一定要加以仔细考虑。编译时,要告诉编译器和链接器足够的信息,一方面,让编译器能够使用正确的指令码进行编译;另一方面,在不同的状态之间发生函数调用时,链接器将插入一段链接代码(veneers)来实现状态转换。

2.2MMU的实现过程

页表是实现MMU的重要手段。页表存放在内存中,从虚拟地址到物理地址的变换过程其实就是查询页表的过程。大小为1MB的存储块通常被称为段,图2说明了如何查表进行段式寻址的全过程:32位的虚拟地址可分为12位的一级页表序号和20位的段内地址偏移。12位的一级页表序号和CP15寄存器的C2中的18位变换表基址合并成一级描述符地址查表找出相应的一级描述符;然后,段对应的物理基地址与段内地址偏移量合并成为真正的存储器存取地址即物理地址,读出相应数据。

ARM嵌入式系统分析 第6篇

关键词:智能家居;Linux系统;arm9;以太网

中图分类号:TP273.5

随着计算机与嵌入式技术的生活化,各种智能化、信息化的消费电子产品不断涌现。这些家用电器在方便人们的生活,提高人们的生活质量的同时,也提出了一个问题,如何对家庭中越来越多的信息家电进行有效的控制。智能家居是由欧美等发达国家提出的一种概念,旨在将家庭中离散的信息设备连接到一个家庭智能化系统上进行集中的或异地的监视控制和家庭事务的管理。随着网络技术和通信技术的不断发展和人们对生活要求的不断提高,实现家庭智能远程控制成为一种趋势,追求精神内涵、安全舒适、便捷智能化和自动化为理想目标。为此,本文提出了一种基于arm9处理器S3C2440的智能家居远程控制系统的设计方法。

1 系统设计

本系统通过多个不同的模块,包括处理器模块、显示模块、存储模块、家电控制模块、安防控制模块、摄像头模块、GPRS模块、蓝牙模块以及以太网接口等[1]。通过这些模块,系统实现了以下与智能家居相关的功能:

(1)家居监控。系统可使用户实时查看家中的温湿度、PM2.5等环境指数。当这些环境指数超出设定的阈值时,系统通过GPRS模块,向用户手机发出短信报警。

(2)远程控制。系统通过家电控制模块,可以让用户对家中的一些家具电器进行控制。

(3)安防功能。可在网络页面上开启视频监控功能,进行实时视频监控,并实现视频存储及移动监测报警,达到安防作用。

(4)门禁功能。可以启用RFID门禁功能作为辅助工具,实现家居的门禁效果。

系统硬件框图如图1所示。

由于篇幅有限,接下来介绍主要功能模块。

1.1 主处理器模块

该模块是整个系统的核心,完成所以接口的调度和事件的处理。主模块选用三星公司开发的一款基于arm920t内核和0.18umCMOS工艺的16/32位RISC微处理器,主频可达500多MHz。具有成本低,功耗低,性能高,接口众多,且其稳定性于可靠性经多年市场的实践,方案成熟,技术支持好。众多的接口令其能轻松完美地驱动系统的各项外设,较高的主频及优秀的CPU及豐富的RAM能令其完美的运行linux系统,完成整体系统的要求。

1.2 通信模

本系统采用以太网接口,GPRS模块,Zigbee模块,蓝牙模块等方式与外界通信。

以太网接口选用DM9000A芯片,与主处理器以16位总线接口相连,可根据需要以单工或全双工模式运行。通过其内部操作时序,可实现系统与以太网的相接。[2-3]

GPRS模块、zigbee模块和蓝牙模块则采用市场上较为成熟的sim900a,cc2530,cc2540等解决方案。这些方案久经市场考验,极为成熟。

1.3 家居外设

本系统采用多项智能家居的外设,如家居控制,环境监控,视频监控等模块。外设与处理器通过can总线,spi总线,USB接口等方式通信[4]。

家居控制模块包括电灯,窗帘,空调等的控制。电灯由继电器控制,服务器记录状态;为了最小程度改变空调结构,系统通过架设红外发射管模拟遥控器。窗帘通过步进电机所转过的角度来控制开闭程度。

环境监控模块则由一系列的传感器构成,如PM2.5传感器,温湿度传感器等。数据一方面上传服务器,可供用户登录查看。另一方面通过阈值监控报警功能,实现安防作用。

视频监控模块采用专用的带USB接口的集成摄像头模块。主机接上大容量的sd卡,能够在用户需要时储存特定时间段的视频,便于日后查看。

2 系统软件设计

整个系统由引导装载程序(U-Boot),设备驱动,嵌入式linux内核以及应用程序组成。这也符合一般嵌入式系统的软件构成[5-6]。

其中,操作系统使用Linux2.6系统内核,应用程序主要包括二个部分:一是是智能家居系统的主应用程序;二是以太网与图形应用界面。

第一部分的主要功能的实现,主要是应用程序的编写,程序流程图如图2所示。

第二部分是图形界面的相关设计。本系统采用qt3软件进行具体界面的设计与移植。

本设计中,先设置好主窗口,在主窗口上添加与控制主题相关的按钮图片。在用户按下按钮时,显示相应界面。在各个外设的界面上,同样用按钮表示相应的操作。这些功能通过qt3的添加控件可以实现。

3 整机效果

在实验室智能家居实验房间内装备相应的系统,通过手机登陆网络,连接服务器ip地址后,通过用户名与密码登陆系统,能够完成相应的操作,并在环境参数超过阈值的时候发送手机短信报警。

4 结束语

通过实验室中的模拟家居环境测试,各项家居外设控制正常,各项监控安防装置能够正常工作,用户能够通过以太网对系统进行智能操控,达到了初期的设计目标。测试结果表明,该系统设计合理,可靠性强,成本低,可操作性好,适合大面积推广。

参考文献:

[1]戴刚,高洋,陈煌华.基于ARM的智能家居远程控制系统的硬件设计[J].世界电子元器件,2007(08).

[2]严厉平.嵌入式智能家庭网关的研究与设计[J].微计算机信息,2005(02):14-16.

[3]刘霞辉,段承先.基于TCP/IP协议的网络家电控制器[J].机械工程与自动化,2009(02):170-172.

[4]徐锋,刘欣,方加宝.智能家居远程控制系统设计[J].低压电器,2009(04):21-24.

[5]孙弋.基于S3C2440的嵌入式Linux开发实例[M].西安:西安电子科技大学出版社,2010.

[6](英)马修.Linux程序设计[M].北京:人民邮电出版社,2010.

作者简介:林昊然(1994.07-),男,本科在读,研究方向:电子电路。

作者单位:中国计量学院,杭州 310018

ARM嵌入式系统的应用及发展 第7篇

1 嵌入式系统与ARM

嵌入式系统是指嵌入式计算机和嵌入式计算机的应用系统, 该计算机系统被嵌入到各种设备和产品的内部, 具有控制信号的功能。嵌入式系统结构紧凑、占用体积小, 可以以部件的形式安装在所控制的装置内部, 并为用户提供设备信号输出、输入控制以及设备监控功能, 实现了应用系统的高智能性, 极大地提高了设备和产品的性价比。例如在一个MP3设备其实就是一个嵌入式系统, 另外还有PC104的微型工业控制计算机而是一个典型的嵌入系统应用。那么是不是只要嵌入着微处理器就叫嵌入式系统呢, 例如电脑鼠标中的单片机。其实嵌入式系统从上世纪70年代出现到现在已经有几十年的发展历史, 该技术在不断的发展和完善中也形成了自己的标准定义:“嵌入式系统是控制、监视或者辅助装置、机器和设备运行的装置”, 这就进一步明确了嵌入式系统是一个软件和硬件的综合体, 另外也涉及到涵盖机械等附属装置。如今嵌入式系统在我们的生活和工作中无处不在, 它的核心在于处理器, 嵌入式微处理器就是嵌入式系统用到的多种处理器中的一种。嵌入式微处理器有包括4位 (相关产品:电话机、计算器、玩具、充电器等) 、8位 (相关产品:电视、空调、马达控制器等) 、16位 (相关产品:多媒体应用;手机;摄影机等) 以及32位微处理器 (电脑笔记本、路由器、汽车电子、数码相机、彩色传真等) , 不同等级的处理器有着不同的应用方向。

随着电子设备的发展和产品人性化设计理念的渗透, 设备软件设计越来越复杂, 对设备硬件方面的要求也不断提高。例如家庭使用的空调、电视等设备都需要有单独的遥控器, 那么能不能将它们合在一起呢, 这样不就更加方便了吗, 而要实现这一点就需要设备硬件方面具备功能更强大、功耗更低、性价比更高的处理器, 而32位的ARM处理器正好可以解决以上几个问题。RM处理器具有体积小、低功耗、低成本、高性能等多方面优点, 是一个32位元精简指令集 (RISC) 处理器架构, 被广泛应用于各个领域的嵌入式系统设计中, 例如消费类多媒体、教育类多媒体、嵌入控制、移动式应用以及DSP等。ARM技术被授权于读个技术厂家, 每个厂家都有各种特有的ARM技术和服务。经过近年来的发展, ARM很快成为世界性RISC标准的缔造者、引领者, 并在嵌入式系统处理器领域中稳坐霸主地位。

2 ARM产品以及相关应用

ARM的所有相关产品都采用统一的产品体系, 所以从理论上讲, 相同的ARM软件可以在所有的产品中运行。目前ARM嵌入式系统相关产品有ARM7系列产品、ARM9系列产品、ARM9E系列产品、ARM10系列产品、ARM710系列产品、ARM11系列产品等。 (1) A R M 7系列产品具有体积小、耗能低、性能高等优点, 主要有ARM7TDMI、ARM7TDMI-S以及ARM7EJ-S等产品, 多应用于移动通信。 (2) ARM9系列产品主要包括ARM9TDMI、ARM920T、A R M 9 4 0 T等产品, 其中A R M 9 T D M I的性能远远超过了ARM7TDMI, 因为它不仅配置了Thumb扩展、调试, 同时还配置了Harvard总线, 该产品多用于连网和顶置盒。ARM940T配置了内存管理和写缓冲, 具有性能高、价格低廉、耗能低等特点, 多应用于保安系统、高档打印机、笔记本、高级引擎管理等。 (3) ARM10系列产品主要有ARM1020E, 该产品具有极强的整型和浮点运算能力, 多用于高性能打印机和游戏机。 (4) ARM9E系列产品主要有ARM926EJ-S、ARM966E-S等, 该系列产品属于一种综合处理器, 具有极强的数字信号处理能力。 (5) ARM710系列产品具有价格低廉、耗能低等优点, 主要包括ARM710、ARM710T以及ARM720T等, 其配置有内部管理、JTAG以及写缓冲, 多应用于消费类多媒体、笔记本电脑以及数据通信等。 (6) ARM11系列产品是一种高性能、高效率的CPU处理器, 主要产品有ARM1176JZ (F) -S、ARM11 MPCore等, 目前该系列产品在国内的开发和应用较少。

3 ARM嵌入式系统的发展要求和趋势

如今嵌入式系统已经渗透到人们生活和工作中的任何角落, 而ARM凭借其各种优势逐渐成为嵌入式技术的代名词。随着信息技术和网络技术的快速发展, 嵌入式技术有着非常广阔的市场发展前景。嵌入式技术自从上世纪九十年代末便开始推广应用, 并在通信领域和消费品领域取得了巨大成果。信息时代的到来为嵌入式技术提供了巨大的发展契机, 同时也为各个厂家提出了挑战。首先, 嵌入式技术不仅要提供相应的软件和硬件, 还要提供软件包支持和硬件开发工具。其次, 随着电子产品结构的复杂化以及性能的不断提高, 要嵌入式技术产品也要进行功能升级。再次, 嵌入式系统经常要在极其恶劣的环境中运行, 很容易受到温度、湿度等因素的影响, 所以有必要增设防振、防水以及防电磁干扰等功能。另外, 需要通过技术优化进一步提高系统可靠性和系统执行速度。

4 结语

嵌入式系统是一个精简计算机系统, 该技术以计算机技术为依托, 强调体积、功耗以及成本等多方面因素的综合考虑。ARM是一种32位嵌入式微处理器, 具有体积小、耗能低、价格低廉、功能强等优点, 是应用于嵌入式系统的主导技术, 有着广阔的市场发展前景。

参考文献

[1]孙延岭, 赵雪飞, 张红芳, 等.基于ARM嵌入式系统的微型智能可编程控制器[J].电力系统自动化, 2010, 34 (10) :101-104.

[2]唐颖, 李玉林.基于ARM技术的新型低压电动机保护控制器设计[J].电力系统保护与控制, 2010, 38 (15) :119-122.

基于ARM的嵌入式系统平台的构建 第8篇

随着计算机技术的信息化、数字化、网络化、智能化的飞速发展, 嵌入式系统在多媒体通信、无人工作区、医疗救助、交通控制等各个领域里得到了广泛的应用, 嵌入式技术在此也得到了极大的发展, Linux操作系统以其高稳定性, 高可靠性, 剪裁方便, 开源代码, 绝大版权免费等优点, 已成为引领嵌入式领域的砥柱力量, 具有相当大的市场潜力和商业价值。但是嵌入式处理器种类繁多, 要做好Linux嵌入式系统得到广泛的应用, 就必须把Linux嵌入式系统移植到相应的各种处理器平台上, 特别是运用到当前主流平台上, 并应用于实际的产品中去。ARM平台是当前应用广泛的处理器体系结构之一, 是Linux嵌入式系统移植的一个重点目标。但各种嵌入式系统的相关的新的产品不断涌现, 势必引起人们对嵌入式系统越来越多的关注。构建了一个Linux嵌入式操作系统, 将它嵌入到ARM平台的内核系统中, 在此基础上对开发各种应用程序和了解嵌入式系统有了更深的研究和学习。

1 系统硬件

ARM (Advance RISC Machine) 公司作为一个典型的IP设计公司, 主要依靠转让设计来让合作伙伴完成各种各具特色的芯片的生产。ARM处理器就是其代表产品, 之所以选定ARM处理器为设计对象, 是因为16/32位嵌入式RISC处理器内核, 以其体积小, 低功耗, 低成本, 高性能, 多系列, 数据传输和处理速度快的特点而成为各种数字移动通讯终端以及各种网络产品的首选目标[1]。系统硬件平台主要是由嵌入式处理器、FLASH、SDRAM、以太网接口、USB接口、UART接口、JTAG接口、I/O接口、IIC、电源、复位开关等组成。系统硬件结构图如图1所示。

2 嵌入式Linux开发环境的构建

由于开发板上的嵌入式系统的资源是很有限, 因此如果直接在嵌入式硬件平台上编写软件代码基本是不可能的事。但是采用在PC机上编写程序, 然后通过编译生成能在目标平台上运行的二进制代码, 最后下载到目标板上特定位置上运行。通常采用宿主机/目标板模式, 如图2所示。目标板分别通过串口和以太网接口与宿主机PC连接, 这两个接口是用于终端开发的必须通道。

2.1 Linux与Windows文件共享

实现Windows与VMware Workstation6.0.2下的Linux文件共享方法其实有很多种, 例如:samba、vsftpd等。详细介绍一种常用的用VMware Tools实现Windows和Linux文件共享方法。

2.1.1 共享预备工作

打开VMware Workstation, 并启动Red Hat Linux选择菜单“虚拟机”选择“安装VMware Tools”将安装文件载入Linux的/mnt/cdrom, 然后在Linux系统下进入/mnt/cdrom, 里面出现VMware Tools-6.0.2-59824.tar.gz软件包。

2.1.2 安装共享软件包

打开终端, 在命令行中通过命令tar xzvf VMware Tools-6.0.2-59824.tar.gz解压软件包进行安装。

a.将软件包拷贝到自定义文件夹。 (见程序1)

b.进入#cd/home/dandy文件夹并解压此软件。 (见程序2)

解压完毕后dandy目录下会出现一个vmware-tools-distrib的文件夹。

c.进入#cd vmware-tools-distrib文件夹并且安装软件。直接键入命令#./vmware-install.pl, 在执行过程中会出现很多可供选择的项, 一般是不用给予选择的, 可以一直回车即可。另外文件夹里面有一个IN-STALL文件, 这个文件是介绍并提示如何安装次软件包的文件, 如果是对安装不太懂可以用vi编辑器打开学习一下。 (见程序3)

安装成功之后终端会显示:EnjoytheVMware team。 (见程序4)

经过验证安装此软件包在图形界面下就会报错, 只有在字符界面下可以完整的安装。

2.1.3 共享文件夹

软件包安装好以后, 需要在Windows下建立一个共享文件夹以便在Linux下可以访问。选择菜单虚拟机的设置选项, 在弹出的虚拟机设置对话框中选择Options属性页, 在中选择Shared Folders来设置共享文件夹, 然后选定“Enable”。然后再次进入/mnt, 此时你会发现目录下多了一个hgfs的文件夹, 在这个文件夹下就是Linux和Windows的共享文件夹地址。

2.2 嵌入式开发环境的构建

在完成Windows和Linux文件共享后, 就可以在Linux下安装在Windows系统硬盘里的安装文件了。作为超级用户root登录到Linux下, 进入#cd/usr/local目录, 新建arm目录。#mkdir/usr/local/arm。将Windows下的工具包复制到Linux下并对软件包进行解压。操作见程序5。

然后修改PATH变量, 增加:

如果在终端直接用此方法添加环境变量后, 在掉电以后就会丢失。因此, 可以在“#vi/etc/bashrc”的最后一行添加以上命令。查看该路径是否已被添加到环境变量中可以使用命令:#echo$PATH。此时, Linux系统就有了ARM体系结构的编译器、链接器、调试器以及应用程序了。

3 软件的设计

软件开发过程包括Boot Loader的设计、uCLinux的编译和移植、u CLinux下的网络编程以及应用程序的开发等。主要介绍Boot Loader的设计。

3.1 Boot Loader的设计与实现

Bootloader是在操作系统内核运行之前的一段小程序, 也是嵌入式操作系统运行的第一个程序, 其作用是初始化系统硬件、建立内存空间的映射图、将系统软硬件环境带入一个合适的运行状态, 为调用Linux内核做好准备[2]。在嵌入式系统中, Boot Loader的作用其实与PC机上的BIOS相似, Boot Loader可以完成系统板上主要部件的初始化, 也可以下载文件到系统板上对CPU、存储器等, 通过串行口对Flash进行擦除与编程。Boot Loader作为系统复位或者加电后首先运行的代码, 一般应写入Flash中并从起始物理地址0x00000000开始。Boot Loader的设计步骤如下:

Boot Loader包含两种不同的操作模式[3]:启动加载模式和下载模式, 这种模式的区别仅对于开发人员才有意义。从最终的用户角度看来, Boot Loader的作用就是用来加载操作系统, 而并不存在所谓的两种模式的区别。在启动加载模式下, Boot Loader从Flash中将操作系统加载到SDRAM中运行;而在下载模式下, Boot Loader将通过串口或者USB设备接口从主机上下载内核映像和根文件系统映像等, 从主机下载的文件通常首先被Boot Loader保存到目标机的RAM中, 然后再被Boot Loader写入目标机上的FLASH。

Boot Loader的启动过程分为两个阶段。

第1阶段依赖于CPU体系结构的代码, 主要任务是初始化硬件 (CPU、内存、存储器等) 、拷贝到第2阶段的内存空间中等, 而且用汇编语言来实现, 运行效率比较高。这个阶段完成的任务一般如下:

a.硬件设备初始化 (屏蔽所有的中断、关闭处理器内部的指令/数据cache) ;

b.为第2阶段准备RAM空间;

c.复制Boot Loader的第2阶段代码到RAM空间中;

d.设置好堆栈并跳转到第2阶段的C程序入口点。

而第2阶段则是加载内核和文件系统, 并且内核设置适合的参数用来调用内核, 通常用C语言来实现, 这样可以实现复杂的功能, 而且增加代码的可读性和可移植性。这个阶段主要任务有:

a.初始化本阶段要使用的硬件设备;

b.检测系统内存映射;

c.将内核映像和根文件系统从FLASH读到RAM中;

d.为内核设置启动参数;

e.调用内核文件运行。 (见图3)

4 结论

嵌入式系统是以应用为中心、以计算机技术为基础、软硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统[4]。嵌入式系统已经在各个领域得到了广泛的应用, 如远程监控、无人工作区、交通控制等。随着嵌入式系统软硬件技术的飞速发展, 应用领域的不断广阔, 对嵌入式系统的研究将会有非常广泛的应用前景。在分析了ARM和Linux的特点的基础上, 介绍了其硬件结构, 分析了嵌入式Linux开发环境及开发工具, 对Boot Loader的启动流程有了比较详细的说明。另外修改Boot Loader中与硬件相关的代码, 很容易将其Boot Loader移植到其它体系结构的处理器上。

摘要:鉴于当前嵌入式产品的大量应用以及Linux系统的优势, 嵌入式Linux系统的研究和开发已经成为焦点。介绍了ARM处理器和Linux系统的特点, 并且结合VMware Workstation软件在windows PC上虚拟一个Linux系统作为宿主机, 介绍一种基于ARM的嵌入式系统的设计方法。首先简要介绍了嵌入式硬件设计方案, 对硬件结构、开发环境进行了分析, 然后阐述了BootLoader程序的设计。

关键词:嵌入式系统,Linux,ARM,BootLoader

参考文献

[1]王陈赜.ARM嵌入式技术实践教程[M].北京:航空航天大学出版社, 2005.

[2]杜春蕾.ARM体系结构与编程[M].北京:清华大学出版社, 2003.

[3]白伟平, 包启亮.基于ARM的嵌入式Boot-Loader浅析[J].微计算机信息, 2006, 22 (4-2) :99-l00.

基于ARM嵌入式软硬件系统设计 第9篇

关键词:ARM,嵌入式软硬件系统,设计

随着计算机技术和信息处理技术的飞速发展, 嵌入式软硬件系统在社会各个领域的应用越来越广泛。基于ARM的嵌入式软硬件系统是一种比较特殊的计算机系统, 具有系统精炼简洁、针对性强、功能强大、程序质量高、系统可靠性强等特点, 能极大的提高系统处理效率。

1 基于ARM嵌入式软硬件系统的理论概述

1.1 ARM架构

ARM是一种精简的指令集机器, 基于ARM架构的产品具有功耗小、质量优越、价格低廉的特点, 如RISC处理器, 在教育多媒体、嵌入式控制、DSP等领域中有十分广泛的应用。基于ARM体系结构的32位嵌入式RISC微处理器结构具有良好的节能效果, 特别适合移动通讯领域设计。

1.2 嵌入式系统

嵌入式系统主要由输入软件、处理器、存储器、输出软件等构成, 其中处理器是嵌入式系统的关键部位, 目前, 全球共有上千种嵌入式处理器, 并且每种处理器都有自身的优势及不足。对嵌入式系统而言, 处理器的关键特性是性能高、能耗小、成本低;存储器是嵌入式系统的另一大重要部分, 其稳定性及容量大小对嵌入式系统的正常运行有很大的影响, 因此, 在进行嵌入式系统设计时, 要选择与嵌入式系统处理器相匹配的存储器, 从而确保嵌入式系统的正常运行。

2 基于ARM的嵌入式软硬件系统设计

在嵌入式系统中, 系统硬件是系统软件和程序运行、操作的基础, 只有确保硬件设计的合理性, 才能为嵌入式系统的正常运行提供保障, 下面就嵌入式系统硬件设计及软件设计进行分析。

2.1 硬件设计

2.1.1 处理器设计

ARM嵌入式处理器具有体积小、消耗资源少、质量好等特点, 因此, 在各种网络产品以及数字产品中有十分广泛的应用。处理器是嵌入式系统正常运行的关键部分, 在进行嵌入式系统出处理器设计时, 必须确保其综合性能以及质量符合相关规定, 并且要将处理器冗余部分去除, 从而有效地提高系统的运行性能。

2.1.2 外围接口设计

在进行嵌入式处理系统硬件设计时, 要选择合理的器件, 确保各个器件之间的良好连接, 为各器件之间的良好配合提供保障, 提高系统硬件的有效性。在进行嵌入式系统外围接口设计时, 要保证外围接口的灵活多变, 并且外围接口要符合嵌入式系统小型化的特点, 只有这样才能为系统的灵活性、稳定性、可靠性提供保障。对于嵌入式系统, 要实现外围接口和处理器之间的无缝连接, 并简化外围电路, 这样不仅能减小整个系统的体积, 还能有效地降低系统的设计成本。

2.1.3 针对性设计

在进行嵌入式系统设计时, 需要根据项目的实际情况以及用户的实际需求进行, 因此, 整个设计过程要针对其设计目标开展, 只有这样才能为嵌入式系统的设计提供指导。由于系统设计是一个长期性工作, 因此, 在设计过程中, 设计人员要对软件更新、系统升级等因素进行充分考虑, 并在针对性设计前, 对相应的程序进行仿真运行, 在不断调试中, 确保嵌入式系统能满足用户的需求。

2.2 嵌入指纹识别模块及软件设计

在嵌入式系统设计过程中, 要在硬件设计的基础上, 通过串口嵌入指纹识别模块, 从而为系统的正常通信提供保障。选用的指纹识别模块需要具有良好的光学传感功能, 如Flash芯片、DSP处理器等, 指纹识别模块的主要功能有指纹图像处理、模板匹配、模板提取、模板保持、指纹搜索等。嵌入式系统程序主要由管理和通讯两大部分组成, 以指纹识别模块的相关协议为主, 对其进行编写, 不仅能接收、校验相关数据, 还能在数据库中添加用户信息。通过LCD液晶显示和键盘, 能对现场情况进行直接控制, 从而确保系统的持续运行。

2.3 嵌入式系统的软、硬件协同设计

在进行嵌入式系统设计时, 需要对系统的硬件、软件进行详细的分析和设计, 一般情况下, 在设计过程中, 需要将系统的硬件和软件看成一个整体, 但在初期设计过程中, 需要对系统的硬件功能和软件功能进行详细的划分, 并将其相应功能区域固定好, 这样才能确保嵌入式系统硬件和软件的良好组合, 才能充分发挥整个系统的功效。在这个过程中, 还需要进行嵌入式系统的硬件和软件的协同设计, 从而确保系统硬件和软件获得最佳效益。

3 结语

嵌入式系统设计一项复杂的工程, 基于ARM嵌入式系统的软硬件设计和整个系统的设计有很大的关联, 随着信息技术的持续发展, 嵌入式系统结构的应用将会越来越广泛, 因此, 做好嵌入式系统的设计工作是十分重要的。

参考文献

[1]李登科.基于ARM的嵌入式系统硬件设计探究[J].中国电子商务, 2011 (3) :259.

[2]刘芳宇.基于ARM嵌入式系统的设计及其应用[J].计算机光盘软件与应用, 2012 (9) :173-174.

ARM嵌入式系统分析 第10篇

关键词:LED图文显示ARM核,FLASH区域控制算法

1、LED显示屏存在的问题

LED显示屏近几年得到了飞速的发展,但在技术上也存在着诸多的问题厄待解决。

1.1 字库问题

LED显示系统中, 要涉及到字符和图像的显示, 其中包括西文、符号及汉字显示。对于传统的单片系统汉字显示, 一般的做法是用一片ROM来做一个字模库, 通过对字模库的检索来取得所需汉字的点阵信息, 或者对于英文字符或少量汉字的系统, 直接将字符点阵信息写入程序中。而对于某些应用, 如新闻信息显示和图像显示, 其特点是与上位PC机通信, 所需字符可能包括汉字、符号或英文字母, 且字符数量、字形和字体都不固定, 用上述做法就显得字体单一, 字符量太少[1]。

1.2 传输速度问题

图像显示作为LED现实内容变得越来越多,如果目前采用的都是显示屏与上位机同步通信的方式,由上位机发送数据,控制器接受数据,然后送到驱动电路进行显示。图像的数据量大,实时性要求高,一般视频图像都要求大于等于25帧/秒,这样数据量就非常的大,用传统的RS232接口很显然满足不了要求。

1.3 通信方式问题

目LED条屏由于数据量小,采用的通信方式大都为485总线异步通信,及在控制器中设计有存储器,上位机将数据下传后,存到控制器的存储器中,这样上位机关机后显示屏还能继续工作。然而在全彩的通信当中,由于数据量,目前采用的都是视频卡同步通信,及上位机一边送数据,显示屏一边显示,这样的话,如果上位机出现问题,显示屏则不能进行显示。

1.4 远距离分布式系统问题

目前的电子显示屏的应场合越来越多,很多场所涉及到分布式的显示,例如医院,车站等单位,显示屏分布在各个出入口,要想进行统一的管理目前做起来几乎是不可能的,因为每个显示屏都是由一台单独的电脑来进行控制,要想联动控制要在控制技术上做很大的努力,系统也容易出现问题。

1.5 布线问题

随着LED显示的广泛应用,其布线也成为一个难题,例如在交通路口挂一个显示屏,电源线不成问题,可是数据线的布线就非常的麻烦了,现有的做法是在就近设上位机。这样的话,每个路口都要有电脑,非常的浪费资源。

1.6 屏幕大小随意可变问题

各个工程由于客户需求和现场尺寸的问题,对显示屏的大小的要求各不相同,目前大部分的做法是在设计显示屏的时候需要对软件进行定制,也就是需要修改底层软件来达到要求,。这样的话就显得费时费力。

2、基于ARM嵌入式系统的LED图文显示系统设计

2.1 硬件设计

为了解决上述的几个问题,从问题的根源着手,对传统的LED显示屏控制系统进行了如下的改进。

A、随着大容量存储器的价格的降低,在控制器中设置大容量存储器变得非常的经济。考虑到实用性,为控制器配上128M的内存和8G的FLASH存储器,数据只要一次性传输,就可以满足连续4小时不同内容的视频内容的播放。这样就解决了数据库容量不足和依赖上位机的问题。

B、在传统的RS485接口的基础上增加10M/100M自适应网络接口,控制器可以方便的介入局域网和互联网,实现远程控制。这样可以方便的解决传输速度问题,和分布式传输问题和布线的问题。

C、有上面的两个设想之后,控制器的选择就尤为重要了,在处理速度上要足够的快,满足对图像数据的处理,同时性价比要高,ARM芯片的高性价比成了首选,综合考虑选择AM1808-456作为主控制器[2]。

2.2 控制器软件设计

用户需求的LED显示器点阵规格是不确定的, 如何驱动不同点阵的LED显示器这是开发通用控制器卡着重要解决的问题之一。下面以设计最大点阵范围为1024×1024点阵双基色 (红色和绿色) 的LED大屏幕显示器控制器卡为例。

在存放显示数据的A体和B体里, 红色数据存储在由00000H到1FFFFH的地址里, 绿色数据存储在由20000H到3FFFFH地址里,蓝色数据存储在由40000H到5FFFFH地址里。一个地址里的数据即一个字节数据可以代表8个象素点, 所以横向128byte数据可表示1024个象素点。显示存储器红色数据对应显示屏的位置如图2所示, 数字表示红色数据的存储地址, 对绿色数据来说, 数据从20000H开始存储, 所以显示存储器20000H、40000H和00000H地址里存放的数据在显示屏显示的位置是相同的, 20001H、40001H里的数据在图2中1位置显示, 20002H、40002H里的数据在图2中2位置显示。图2阴影部分表示LED大屏幕显示器实际大小, 所以只要在图中阴影部分显示屏对应的显示存储数据存上显示数据, 阴影部分对应大小的显示屏就能完整地显示了。换个思维方式:一块正常显示的1024x1024点阵的LED大屏幕显示器, 由于显示屏是一块块的单元板拼接而成的, 只需要把图中非阴影部分的单元板拆去就得到用户想要的显示屏大小, 而拆去部分单元板对应的显示数据存储地址是无效数据[3]。

基于上述思考, 要使所设计的控制器能够驱动各种点阵的LED显示器, 关键在于正确存储显示数据。

控制器接收到数据, 都要根据显示屏的点阵多少来推算显示数据的存储位置。假设显示屏控制机传过来的点阵规格参数是M×8N, 则显示屏的第m行, 第n个8列存放红色数据的存储地址为[4]:

同一位置绿色数据的存储地址为:

同一位置蓝色数据的存储地址为:

2.3 上位机软件设计

上位机软件采用VC++6.0进行设计, 通过调用库函数、插件实现多元化的功能, 支持文本文件、WORD文件、所有图片文件 (BMP/JPG/GIF/PCX...) 、所有的动画文件 (MPG/MPEG/MPV/MPA/AVI/VCD/SWF/RM/RA/RMJ/ASF...) 等的显示。如下为控制卡的基本信息设置程序和显示屏显示区域控制程序[5]]:

3. 通用LED图文显示系统的应用

本通用控制显示系统的布线方式标准化,接口标准化,灵活性非常的强,目前已经实现批量化生产,能够很好的满足交通诱导,高速公路信息牌、医院信息板、学校信息板等各种场合的应用,可以实现显示屏的群控,远程控制,信息联动。

同时由于进行了智能化软件设计,控制器不再受到各种不同规格的显示尺寸的局限,所有参数在上位机设置即可实现,真正做到一卡通用,大大的减少了后续维修维护工作。

4. 结论

本文所设计的通用LED图文显示系统改变传统的显示控制系统的设计思路, 采用高速ARM处理器, 引入了标准化的互联网络接口, 设置了大容量的存储器, 并在软件上采用智能化显示区域控制算法, 一举解决了目前存在的字库少, 传输速度慢, 通信方式不灵活, 远距离控制难、多屏群控不易实现, 布线复杂, 控制卡不通用等问题。目前系统已经得到了很好的应用, 为LED显示屏的发展具有积极的意义。

参考文献

[1]熊雨凯, 吴光敏.嵌入式大屏幕LED显示屏的设计与实现.现代电子技术, 2006, 237 (22) :43-45

[2]Texas Instruments Incorporated.am1808 arm microprocessor.Pdf[Z].www.ti.com.cn

[3]叶树江, 韩喜春, 徐泽清.基于LPC2292和FPGA的LED显示屏设计.黑龙江工程学院学报, 2007, 21 (2) :1-3

[4]邓春健、肖传武等.基于FPGA和ARM-μClinux的LED大屏幕显示器通用脱机控制卡的设计和应用[J].电子器件, 2005, 28 (4) :710-714

ARM嵌入式系统分析 第11篇

【关键词】ARM;嵌入式通信控制器;设计;应用

目前,随着先进的微控制器技术、计算机技术和通信技术的发展,采用如下接入方式正逐渐发展起来:微控制器+局部专用网络+局部通信控制器(网关)。采用专用网络,如 RS-232、 RS-485,CANBus、BlueTooth 等方式,将多个微控制器连接在一起,然后将该专用网络连接到一个通信控制器(过去一般采用桌面计算机实现),该控制器负责将室内专用网络上的信息转换为 TCP/IP 协议数据包,然后发到以太网上实现信息的传输,适合于将小到一户家庭、一幢大楼、大到一个工厂内部的微控制器网络接入以太网。本控制器依据目前楼宇自动化和信息家电的要求,针对前者实现方式的缺点,结合目前先进的微控制器产品、计算机技术和通信技术,实现了高性能、低成本、低功耗、小体积的先进嵌入式通信控制器。

一、ARM 微处理器

ARM 公司于 1990年 9 月在英国成立。ARM 公司在32位RISC CPU开发领域不断取得突破,其结构已经从 V3 发展到 V6。由于 ARM 公司自成立以来,一直以 IPIntelligence Property提供者的身份向各大半导体制造商出售知识产权,而本身不介入芯片的生产销售, 加上其设计的芯核具有功耗低、成本低和功能强等显著优点,因此获得众多的半导体厂家和整机厂商的大力支持,在 32 位嵌入式应用领域获得了巨大的成功,目前已经占有75%以上的32位 RISC 嵌入式产品市场,几乎成为了事实上的标准。在所有 ARM 微处理器系列中, ARM7 微处理器系列应用最广,采用 ARM7 微处理器作为内核生产芯片的公司最多。本文所讨论的嵌入式通信控制器的硬件核心 LPC2214 微处理器就是一款由 Philips 公司生产的 ARM7TDMI微处理器。

二、硬件平台设计

(一)LPC2214

LPC2214是基于一个支持实时仿真和跟踪的16/32位ARM7TDMICPU的微控制器,并带有16K字节片内静态RAM和256 KB嵌入的高速Flash存储器。 128位宽度的存储器接口和独特的加速结构使32位代码能够在最大时钟速率下运行。对代码规模有严格控制的应用可使用16 位Thumb模式将代码规模降低超过30%,而性能的损失却很小。 由于LPC2214较小的144脚封装、极低的功耗、多个32位定时器、8路10位ADC(64脚和144脚封装)以及多达9个外部中断使它们特别适用于工业控制、医疗系统、访问控制和POS机。可使用的GPIO高达76(使用了外部存储器)~112个(单片应用)。由于内置了宽范围的串行通信接口,它们也非常适合于通信网关、协议转换器、嵌入式软modern以及其它各种类型的应用。

(二)系统存储器

作为32位的微处理器,LPC2214支持8位、16位和32位寻址方式,具有较强的寻址能力, 可方便的构建较大的存储空间。由于芯片自身带有256KB的高速FLASH,对于采用uc/os-II和 ZLG/IP设计嵌入式通信控制器已经足够,无需再在外部挂接FLASH存储器。系统选用 IS61LV25616AL作为SRAM存储器,用于满足嵌入式操作系统及通信控制器中的内存块拷贝运行要求。

(三)调试接口

LPC2214 支持 JTAG协议,JTAGJoint Test Action Group,联合测试行动小组是一种国际标准测试协议,主要用于芯片内部测试及对系统进行仿真、调试,通过 JTAG接口,可对芯片内部的所有部件进行访问,因而是开发调试嵌入式系统的一种简洁高效的手段。目前 JTAG接口的连接有两种标准,即14针接口和20针接口,笔者选用的是20 针的接口。

(四)外设

LPC2214 内部集成了两个 UART 通道,我们通过电平转换芯片 MAX3232 实现了一个 RS-232 串口接口;利用 MAX489 实现了RS-422 通信接口,以便于接受远距离下位机传过来的数据。 利用 RTL8019AS芯片和 RJ-45网络接口, 实现了以太网模块的硬件单元。LPC2214 提供了多达 76 个可编程的 I/O端口,由片内的相关寄存器控制。在该系统的设计中, P0.23 和 P0.24 外接两个 LED 指示灯,用作程序运行状态的显示,其它数据总线和地址总线及部分 GPIO在系统板上引出,以供扩展之用。

三、软件平台设计及其在考勤系统中的应用

(一)软件平台设计

软件平台上采取了源代码开放的嵌入式实时操作系统μC/OS-II和周立功公司的TCP/IP 协议栈ZLG/IP(其本身基于μC/OS-II)。 μC/OS-II是一个完整的、可移植、固化、裁剪的占先式实时多任务内核。μC/OS-II最大的特点就是它的源代码开放,这是其它商业实时内核无法比拟的。它是针对嵌入式应用而设计的,而且,在设计之初就充分考虑到了它的可移植性,它的大部分源代码都是用高可移植性的ANSIC编写的。目前,μC/OS-II已经应用在很多领域,比如医疗设备,发动机控制,网络设备,自动提款机及工业机器人等。ZLG/IP 提 供实现Internet 网络上IP 接点的功能,是个高性能的嵌入式TCP/IP 协议栈软件。它使用μC/OS-II 实时操作系统的信号机制来实现一个多任务并行并可重入的协议栈,完全使用 ANSIC 进行编写,可以像μC/OS-II 那样支持多种CPU,ZLG/IP带有 Socket API接口函数, 方便使用者进行应用层协议的开发。ZLG/IP 还具有层次清晰,易于升级和修改等特点。

(二)在校园考勤系统中的应用

在校园考勤系统中,需要有一个嵌入式通信控制器完成如下功能:将教务处发下来的数据和命令信息传送给下面各个教学楼的考勤机终端,然后将考勤机终端存储的考勤数据传送到教务处的服务器。采用我们设计的控制器在教学楼内采用 RS-422 通信方式,一主多从, 一台通信控制器对多台考勤终端,在教学楼和教务处之间采用TCP 通信方式,几乎没有了距离的限制,能很好地解决远距离可靠的通信传输问题。

总之,由于ARM微处理器的优越性能和软件的可移植性,该控制器可以很容易的嵌入到其他系统中,能够应用于楼宇自动化和信息家电等诸多领域。

参考文献:

[1]贾祥正.ARM嵌入式系统的LCD驱动设计[J]. 中国高新技术企业. 2010(27).

ARM嵌入式系统分析 第12篇

关键词:智能家居,ARM9,嵌入式

0前言

在经济快速发展的今天, 人类的生活质量有了质的飞跃, 而家居安防也得到了越来越多人的重视。视频监控被运用在更多更广的领域, 而在视频监控技术的实际操作中资源占用、浪费现象和难以掌握的操作系统等情况时有发生。简便稳定的Linux嵌入智能家居系统中成为目前视频监控的主流。

1 智能家居系统的设计

智能家居视频监控是通过计算机网络以及一些终端设备来实现将家居子系统的连接, 凭着这些技术将达到统一控制智能家居的目的, 使家居生活更加舒适与安全。以智能家居系统的功能性来看在内容上主要包括客户端、视频、服务器等等。一般的运行模式是由客户端发出指令传递至服务器并在服务器内进行分析, 最后由视频监控达到监控的目的。植入性的系统贯穿整个智能家居视频监控, 在这个智能家居系统设计中最重要的硬件设备就是GX-ARM9-2410EP以及摄像头驱动。软件主要是为Linux服务, 负责操作系统的整合与移动。为了达到视频监控的目的, 此时还需要ARM处理器植入Linux的系统内核和智能家居系统的用户中, 由浏览器来实现服务数据的获取与监控, 详细结构如图1所示:

2 智能家居系统的详细设计

2.1 智能家居系统硬件设计

常用于智能家居安防系统的主要硬件有外部储存器及传感器, 以系统开发的实质要求来看采用Samsung公司的S3C2410嵌入式智能家居安防系统处理器效果最好, 这款硬件在一定程度上符合智能家居安防系统的需求, 外部并有ROM和SRAM端口, 在整个安防系统中以DM9000的网络芯片转网卡接口, DM9000型号的网络芯片具有耗能低、性价比高的有点。采用V2000型号摄像头用于CPU与USB摄像头的连接。最后。传感器是选用了具备30万像素的互补金属氧化物半导体图像, 它具有清晰度高、安装简便、实用性高的特点, 只需要连接USB就可以马上试用。

2.2 智能家居系统软件设计

开启Linux的宿主机程序后注意链接工具及编制时只能在目标机上采用二进制代码工作, 随即将二进制的文件进行下单处理, 保证其在目标机的正常运作, 最终完成最初的效用。通过Windows系统完成计算机虚拟机的安装工作, 同时在计算机虚拟机上接入Redhat Enterprise Linux 5。实际上如果在宿主机的智商建立满足交叉编译的效果, 但这个开发环境必须安装在多重软件模块的共同作用下才能得以实现。除此之外, 还可通过驱动光盘来实现程序的安装。

3智能家居系统的实现

智能家居安防系统的实现是在嵌入式服务器的原理上来设计的, 用户可通过网络设备或者电话来实现视频监控的过程, 但要真正实现网络来达到视频监控, 设计架构应采用Browser/Server结构, 简单的来说就是在嵌入系统的基础之上实现CGI功能的服务器的使用, 由此来实现完整的动态画面。所以, 在这个过程中用户只需要在用户端设置一个网页浏览器就可实现对嵌入式设备的统一运行及管理功能。

实际上, 网页浏览器设置的主要目的是为目录浏览器运行而产生的, 通过超文本的传输来读取网络服务器上的内容。客户端与服务器之间本就是相互传递信息的工具, 二者以请求和应答的当时在HTTP中保留相互的定义。所以在Web浏览器和服务器同时请求传送文件时, 服务器将会把请求传达至浏览器, 具体传送流程如图2所示:

4总结

由此可见, 基于嵌入式技术为核心的视频监控技术包括了信息化科技、网络科学技术等等现代化的科学领域技术, 将嵌入式系统ARM9作为智能家居安防系统的设计为广泛的为智能家居系统用户开放了一个方便快捷的平台, 通过接入网页服务器及视频服务器等实现智能家居安防系统的统一管理和视频监控的目标。

参考文献

[1]李永, 黄晶, 马建刚.基于Web Services的嵌入式智能家居系统的研制[J].微计算机应用, 2011, 32 (2) .

ARM嵌入式系统分析

ARM嵌入式系统分析(精选12篇)ARM嵌入式系统分析 第1篇 由Boot Loader和固化在固件(firmware)中的Boot代码(可选)共同组成一个嵌入式系...
点击下载文档文档内容为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

确认删除?
回到顶部