嵌入式linux在经济社会中的应用实例GPS系统.docx
《嵌入式linux在经济社会中的应用实例GPS系统.docx》由会员分享,可在线阅读,更多相关《嵌入式linux在经济社会中的应用实例GPS系统.docx(26页珍藏版)》请在冰豆网上搜索。
嵌入式linux在经济社会中的应用实例GPS系统
华东交通大学理工学院
InstituteofTechnology.
EastChinaJiaotongUniversity
课程论文
CourseThesis
题目嵌入式linux在经济社会中的应用实例—GPS系统
分院:
电信分院
专业:
通信工程
班级:
2008-2
学号:
20080210420224
学生姓名:
骆玉春
指导教师:
徐涢基
摘要
本文以S3C2410处理器的GPS手持设备开发过程为例,介绍了嵌入式Linux系统软硬件的设计与开发。
通过本文的实例,可以加深对嵌入式Linux开发流程的概念的理解,了解嵌入式Linux系统开发的基本过程。
随着全球定位系统(GPS,GlobePositioningSystem)的广泛应用,GPS手持终端设备的市场需求越来越大。
首先,分析系统工作原理,再选择合适的参考硬件平台,然后选择合适的操作系统和软件。
Linux对S3C2410处理器支持得相当好,操作系统内核和应用程序都是开放源码的。
因此,Linux可以完全按照自己的需要裁减配置系统,使得尺寸更小,而且Linux操作系统性能比Windows操作系统性能更优越。
关键词:
GPS系统;linux;系统硬件;系统软件;设计;
目录
摘要1
目录2
第一章需求分析3
1.1系统工作原理3
1.2选择参考硬件平台3
1.3选择操作系统和软件4
第二章系统硬件设计5
2.1电源电路设计5
2.2复位电路设计7
2.3时钟电路设计7
2.4SDRAM接口电路设计8
2.5Flash接口电路设计9
2.6JTAG接口电路设计12
2.7USB接口电路设计12
2.8键盘输入接口电路设计13
2.9LCD(触摸屏)接口电路设计13
2.10GPS接口电路设计13
2.11PCB设计制作14
第三章系统软件设计15
3.1U-Boot的移植15
3.2linux内核的移植16
3.3应用程序的开发移植17
第四章系统集成与部署17
参考文献21
第一章需求分析
随着全球定位系统(GPS,GlobePositioningSystem)的广泛应用,GPS手持终端设备的市场需求越来越大。
本项目要设计开发一款手持GPS工程样机。
首先,分析系统工作原理,再选择合适的参考硬件平台,然后选择合适的操作系统和软件。
1.1系统工作原理
系统首先通过GPS模块获得绝对位置数据,并将数据通过UART通信方式传给处理器,经处理器处理后得到当前地图的相对位置,并实时显示到LCD上,使用户随时知道自己的方位;键盘和触摸屏作为人机接口,进行进一步的查询工作;USB用于同微机通信,是可选功能;存储器单元用于存储数据,包括操作系统和应用程序。
1.2选择参考硬件平台
目前半导体供应商提供各种ARM/XSCAE体系结构的处理器,有些ARM926和XSCALE核的处理器都已经用来设计手机等高端移动通信设备,有些则可以用来设计中低端的PDA设备。
考虑价格因素,采用Samsung的S3C2410ARM920T处理器。
S3C2410属于中低端的处理器,适合手持设备并且国内外参考硬件平台很多,系统大部分模块在硬件平台上可以直接测试。
系统包括CPU、GPS模块、存储器单元、LCD模块、触摸屏、键盘、USB接口
等部分组成,功能框图如图1-1所示。
图1-1系统功能框图
根据项目的需求,可以适当调整硬件配置。
例如:
总共需要多少存储空间,使用什么型号的Flash等。
同时也要考虑软件支持的程度,驱动程序能否支持新的接口芯片等。
本项目的硬件参考配置如下:
1、CPU单元(S3C2410X16/32-bitARM920T内核)。
2、存储器单元(2MBNORFlash和32MBNANDFlash,64MBSDRAM)。
3、复位电路(包括上电复位和手段复位,至少保持4个时钟周期的有效低电平,保证系统的可靠复位)。
4、电源电路。
5、时钟电路(外部12MHz时钟输入,经内部PLL倍频至200MHz及32.768KHz的RTC时钟输入)。
6、实时时钟(内部RTC带日历功能)。
7、LCD接口。
8、触摸屏接口。
9、键盘接口。
10、GPS模块。
11、USB接口。
1.3选择操作系统和软件
SamsungS3C2410是最开放的开发设计平台。
它的软件和硬件设计资料可以免费从互联网上获取,并且WindowsCE和Linux两种操作系统都能支持。
在参考板上一般可以直接对WindowsCE和Linux进行测试。
Linux对S3C2410处理器支持得相当好,操作系统内核和应用程序都是开放源码的。
因此,Linux可以完全按照自己的需要裁减配置系统,使得尺寸更小,而且Linux操作系统性能比Windows操作系统性能更优越。
另外,可以避免支付Windows产品的版税。
S3C2410在Linux社区有庞大的用户群,可以获取丰富的开发调试信息。
我们选择Linux作为工程样机的操作系统。
由于图形界面要求并不复杂,可以选择QT/Embedded图形系统。
第二章系统硬件设计
2.1电源电路设计
电源电路的设计是非常重要的,特别是对于手持设备来说,如何减少系统的功耗往往成为工程师最为头疼的问题。
不过本节不会深入研究如何降低功耗,只是用一个最普通的方案实现。
电源框图如图2-1所示。
图2-1电源管理系统功能框图
电源由电池提供的2.4V电压输入,经DC/DC开关电源变换器升压至5V输出,3.3V由低压差线性电压源LDO通过+5V调整输出得到,1.8V则由LDO通过3.3V调整输出得到,这样完成了系统供电。
我们知道电源分开关电源和线性电源,那么在嵌入式系统中我们该如何选择呢?
每种方式都有自己的优点和弱点,表2-1总结了这两种电源的优缺点。
表2-1开关电源和线性电源的优缺点
线性电源通常由一只工作在电网频率的变压器、一个桥式整流器和一只电容器组成。
变压器能够升压也能够降压,同时还与电网隔离。
交流正弦波经过桥式整流器整流后的信号,再用电容器平滑为直流电压,这是未经调节的直流电压。
为了在输出端得到调节性能较好的电压,增加了一只线性电压调节器。
这样,电压的调节性能较好,但是电源的元件数量增多了,成本也提高了,效率通常低于50%。
开关电源输出电压的调节性能很好,频率较高,可以在输入端加上通用范围的电压,而且发热少、尺寸小、重量轻。
开关电源的主要元件有脉冲宽度调制驱动器、MOSFET功率晶体管、一只变压器以及反馈电路。
效率通常高于50%,既省电,元器件的寿命也更长。
根据以上的分析,在输入输出压降幅度大、功耗高,或是要求升压的场合,往往采用开关电源方案;在压降小、功率要求不是很大的时候,使用线性电源为宜。
电源是整个系统中最重要的环节,大多数不稳定的因素或故障都是由于电源方面的设计造成的,因此必须加以重视,否则后患无穷。
本例中使用的DC/DC变换器是ST(意法半导体)公司的L6920,该产品广泛用于手持系统、移动电话、数模照相机等应用领域,原理图如图2-2所示。
L6920管脚说明如表2-2所示。
图2-2L6920电路原理图
表2-2L6920管脚说明
此外,电感电容的选取很重要,直接影响DC/DC的效率和输出波形,电感如COILCRAFTS、COILTRONICS、MURATA等公司的产品性能非常好,不过价格比较贵。
一些我国台湾产的性价比也不错,电容的选取要容易一些。
目前大陆生产的钽电容质量都还可以,如果要求不苛刻的话,完全满足要求。
线性电源LDO的电路就简单得多,这里只列出输出3.3V的电路图,如图2-3所示。
图2-3线性电源LDO的电路原理图
当今有很多优秀的电源管理系统设计厂商,如Linear、TI、ADI、ON-SEMI、ST、Semtech,Intersil、Maxim等,有很大的选择余地。
2.2复位电路设计
复位对于一个系统来说很重要,由于各个单元要进入正常工作状态,都需要可靠的复位。
正常情况下,一般有上电复位和手动复位。
如果电源电压出现波动,系统会非正常复位,这时候会发生复位时间不够从而造成一些错误甚至死机,所以复位监控电路也是必要的复位。
电路原理如图2-4所示。
图2-4复位电路原理图
我们的复位电路使用的芯片是MAX811,管脚说明如表2-3所示。
表2-3MAX811管脚说明
根据其型号的后缀,MAX811的复位电平门限有5种规格(表2-4),例如表中用的是MAX811-T,就表示电压低于3.08V时,产生复位信号。
表2-4MAX811的规格
如系统需要中有与CPU逻辑相反的复位信号,则在nRESET信号后加入非门反相输出。
2.3时钟电路设计
CPU部分需要两路时钟输入,一路是CPU工作时钟输入,另一路提供给RTC电路。
CPU工作时钟是一个有源晶振,无需外部电容,直接输出12MHz时钟信号到CPU,由CPU内部PLL倍频到200MHz,两路时钟输入如图2-5所示。
这两种是最普遍的时钟电路,在后面的CS8900A接口电路中也有时钟电路,做法是一样的。
图2-5时钟电路原理图
2.4SDRAM接口电路设计
SDRAM具有容量大、存取速度快、成本低的特点,因而广泛应用到微机处理系统中。
SDRAM主要用来存放执行代码和变量,是系统启动之后主要进行存取操作的存储器。
由于SDRAM需要定时刷新以保持存储的数据,因而要求微处理器具有刷新控制逻辑,或在系统中另外加入刷新控制逻辑电路。
S3C2410X及其他一些ARM芯片在片内具有独立的SDRAM刷新控制逻辑,可方便的与SDRAM接口。
但某些ARM芯片则没有SDRAM刷新控制逻辑,就不能直接与SDRAM接口,在进行系统设计时应注意这一点。
目前常用的SDRAM为8位/16位的数据宽度,我们可根据系统需求,构建16位或32位的SDRAM存储器系统。
本例中使用的是两片三星K4S561632C-TC75芯片构建32位的SDRAM存储器系统。
每片K4S561632C的存储容量为16组×16M位(32MB),工作电压为3.3V,常见封装为54脚TSOP,兼容LVTTL接口,支持自动刷新(Auto-Refresh)和自刷新(Self-Refresh),16位数据宽度。
其管脚说明如表2-5所示。
表2-5K4S561632C-TC75管脚说明
SDRAM连接原理图如图2-6所示。
图2-6SDRAM电路原理图
2.5Flash接口电路设计
Flash存储器是一种在系统上(In-System)进行电擦写,掉电后信息不丢失的存储器。
它具有低功耗、大容量、擦写速度快、可整片或分扇区在系统编程(烧写)、擦除等特点,并且可由内部嵌入的算法完成对芯片的操作,因而在各种嵌入式系统中得到了广泛的应用。
作为一种非易失性存储器,Flash在系统中通常用于存放程序代码、常量表以及一些在系统掉电后需要保存的用户数据等。
现在市场上两种主要的非易失闪存技术是NOR和NAND。
Intel于1988年首先开发出NORFlash技术,彻底改变了原先由EPROM和EEPROM一统天下的局面。
1989年东芝公司发表了NANDFlash结构,强调降低每比特的成本,更高的性能,并且像磁盘一样可以通过接口轻松升级。
NOR的特点是芯片内执行,这样应用程序可以直接在Flash内运行,不必再把代码读到系统RAM中。
NOR的传输效率很高,在1~4MB的小容量时具有很高的成本效益,但是很低的写入和擦除速度大大影响了它的性能。
NAND结构能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的速度也很快。
应用NAND的困难在于Flash的管理和需要特殊的系统接口。
Flash闪存是非易失存储器,可以对称为块的存储器单元块进行擦写和再编程。
任何Flash器件的写入操作只能在空或已擦除的单元内进行,所以大多数情况下,在进行写入操作之前必须先执行擦除。
NAND器件执行擦除操作是十分简单的,而NOR则要求在进行擦除前先要将目标块内所有的位都写为0。
两者的速度差异如下:
1、NOR的读速度比NAND稍快一些。
2、NAND的写入速度比NOR快很多。
3、NAND的4ms擦除速度远比NOR的5s快。
4、大多数写入操作需要先进行擦除操作。
5、NAND的擦除单元更小,相应的擦除电路更少。
基于以上分析,我们用NORFlash存储Boot代码,NANDFlash存储操作系统和应用程序代码。
前者我们选用ST公司的M29W160(1MB×16),后者用三星的K9F5608B(32MB×8)。
M29W160的单片存储容量为16M位(2MB),工作电压为2.7V~3.6V,采用48脚TSOP封装或48脚FBGA封装,16位数据宽度,可以以8位(字节模式)或16位(字模式)数据宽度的方式工作。
M29W160仅需单3V电压即可完成在系统的编程与擦除操作,通过对其内部的命令寄存器写入标准的命令序列,可对Flash进行编程(烧写)、整片擦除、按扇区擦除以及其他操作。
此外,它还支持任意地址的块写保护,十分方便用户。
M29W160的管脚说明如表2-6所示。
表2-6M29W160的管脚说明
M29W160的实际应用原理图如图2-7所示。
图2-7M29W160电路原理图
三星公司的K9F系列NANDFlash存储器有着容量大、功耗低、成本低、电气性能好等特点是大容量Flash市场的有力竞争者。
K9F5608B的单片存储容量为256Mbit,工作电压为2.7V~3.6V,采用48脚TSOP封装或63脚TBGA封装,8位数据宽度,带有硬件数据保护功能,支持上电自动引导功能,块擦写时间为
2ms,数据存储有效时间达10年以上。
K9F5608B的管脚说明如表2-7所示。
表2-7K9F5608B的管脚说明
K9F5608B的实际应用原理图如图2-8所示。
图2-8K9F5608B的电路原理图
随着嵌入式技术的高速发展,Flash被广泛应用到各个领域,功能越来越强大,电路也日趋复杂。
不过各大存储器生产厂商采用统一的标准进行设计生产,所以常用的型号往往是完全兼容的,可以直接替代。
我们在应用Flash时,只要注意遵循数据手册的指导,按说明进行设计即可,一般不会出现问题。
2.6JTAG接口电路设计
JTAG接口对于开发调试非常重要。
对于产品来说也可以通过JTAG修复或者更新软件,所以最好预留这个接口,至少引出JTAG接口线。
JTAG接口电路原理图如图2-9所示。
图2-9JTAG电路原理图
2.7USB接口电路设计
S3C2410X提供了方便的USB1.1接口,片内包括2个USB控制器,可设置为两个主机或1主机1设备。
USB接口原理图如图2-10所示。
图2-10USB电路原理图
接口说明:
CON14工作在A-TYPE(主机)状态,跳线J35、J36的2、3脚接通时CON16有效,工作在A-TYPE(主机模式)状态,跳线J35、J36的1、2脚接通时,CON17有效,工作在B-TYPE(设备模式)状态。
2.8键盘输入接口电路设计
键盘采用中断方式连接,共6个功能键,占用6个中断源。
当有按键被按下时,会实时产生中断请求信号,通知CPU处理。
电路比较简单,如图2-11所示。
图2-11键盘输入电路原理图
2.9LCD(触摸屏)接口电路设计
S3C2410X支持TFT/STN型的LCD及触摸屏,但是不能直接与LCD相连,需要接口板驱动LCD。
S3C2410X通过50pin的插座作为LCD与触摸屏接口,至于接口板,市场上可以买到,管脚定义都是标准的。
原理图如图2-11所示。
图2-12LCD电路原理图
2.10GPS接口电路设计
本设计选用的GPS模块是HIMARK的AR2010-GM,该产品体积小、功耗低,具备标准GPS功能,技术参数如下:
定位精度5~25mCEPw/oS/A;
速率0.1m/sw/oS/A;
时间±1μsec(卫星时间);
海拔高度max.18000m;
速度max.500m/s;
加速度max.±4g;
端口RS232串口x1,TTLx1;
速率4.8、9.6、19.2和38.4kbit/s(可选择升级至115.2kbit/s);
输出协议NMEA0183:
GGA、GLL、GSV、GSA、RMC、VTG;
电源3VDC~9VDC;
消耗电流小于27mA;
卫星信道12-channel;
工作温度−40℃~85℃;
储存温度−55℃~100℃;
工作适度5%~95%;
AR2010-GM模块通信端口定义如表2-8所示。
表2-8AR2010-GM模块通信端口定义
虽然AR2010-GM模块的功能强大,内部结构复杂,但是与CPU的通信非常简单,采用标准UART方式,只需4根信号线即可,无需任何附加元件就能和S3C2410X连接。
2.11PCB设计制作
随着处理器频率的不断加快,对PCB的布局和走线要求越来越高,早已不是仅仅布通就可以的时代了。
当今的PCB板制造技术向高密度、高精度、细孔径、细导线、细间距、高可靠、多层化、高速传输、轻量、薄型方向发展,在生产上同时向提高生产率、降低成本、减少污染、适应多品种、小批量生产的方向发展。
对于主频高达200MHz的S3C2410X处理器来说,它的PCB设计是硬件工作中的难点,前面所有工作都集中体现在电路板上,因而PCB的设计直接影响整个系统的性能。
掌握好PCB设计的步骤和要点,不仅能加快开发进度,更会增加系统的稳定性,也为软件开发创造更好的条件。
在PCB布板之前,一定要保证原理图的正确性,PCB的电气关系是由原理图的网表生成的,错误的原理图会直接导致错误的PCB板,还要重新返工,这一点相信所有的硬件工程师都有切身体会。
第三章系统软件设计
在样机硬件设计阶段,就可以在参考硬件平台上进行软件开发。
软件开发是一个反复修改编译的过程,交叉开发环境的软件开发流程如图3-1所示。
图3-1程序开发流
当样机电路板做好以后,还需要移植到新的平台上。
因为样机是参照参考板设计的,所以大部分接口(特别是片上的设备接口)都相同。
但是可能增减个别的接口或者替换外围芯片,例如:
Flash由AMD公司的Am29LV800B替换成ST公司的M29W160(1Mbit×16),容量增加了,擦写Flash的指令也要相应修改。
软件移植包括Linux系统的3个组成部分:
U-Boot移植、内核移植和应用程序移植。
样机开发板名称假设为GPS2410,程序移植时将引用这个名称。
3.1U-Boot的移植
S3C2410的参考平台上一般使用vivi作为Linux引导程序。
如果不习惯vivi或者觉得U-Boot好用,那就把U-Boot移植到硬件板上吧。
(1)在顶层Makefile中为开发板添加新的配置选项,添加下面两行:
gps2410_config:
unconfig主机端编辑程序
@./mkconfig$(@:
_config=)armarm920tgps2410NULLs3c24x0
(2)创建一个新目录存放开发板相关的代码,并且添加文件:
board/gps2410/config.mk
board/gps2410/flash.c
board/gps2410/gps2410.c
board/gps2410/Makefile
board/gps2410/memsetup.S
board/gps2410/u-boot.lds
(3)为开发板添加新的配置文件。
可以先复制参考开发板的配置文件,再修改。
例如:
$cpinclude/configs/smdk2410.hinclude/configs/gps2410.h
(4)配置开发板。
$makegps2410_config
(5)编译U-Boot。
执行make命令,编译成功可以得到U-Boot映像。
有些错误是跟配置选项是有关系的,通常打开某些功能选项会带来一些错误。
一开始可以尽量跟参考板配置相同。
(6)添加驱动或者功能选项。
GPS2410开发板的以太网驱动仍然采用常见的CS8900以太网接口芯片。
可能变化的是以太网控制寄存器基地址,只要在include/config/gps2410.h文件中修改即可。
非常幸运,只要改一下基地址,gps2410的以太网接口就能够正常工作了。
因为Flash换成了ST公司的M29W160,所以必须修改Flash的擦写函数。
阅读Flash芯片手册或者擦写例程,确定Flash的扇区大小、块大小、块数和芯片大小,明确Flash的擦写操作指令。
然后在源程序board/gps2410/flash.c中修改。
(7)调试U-Boot源代码,直到U-Boot在开发板上能够正常启动。
这最好借助硬件仿真器来调试,至少需要烧写Flash的工具。
3.2Linux内核的移植
S3C2410属于片上系统,处理器芯片具备串口、显示等外围接口的控制器。
参考板上的设备驱动程序多数可以直接使用。
但是有些驱动程序也需要移植或者重新开发。
Linux-2.6.14的内核可以对S3C2410有基本的支持。
第1个驱动是串口控制台。
2.6内核的串口设备名称有了改变,由“ttyS”变成了“ttySAC”。
所以只要内核命令行参数相应的修改成为:
console=ttySAC0,115200。
第2个驱动是以太网接口。
GPS2410开发板的网络接口使用CS8900A芯片,但是Linux2.6内核中并没有支持S3C2410平台的驱动。
幸运的是从Linux社区搜到了针对CS8900接口的补丁,这可省了不少力气。
不然,还要认真分析一下网络驱动程序了。
第3个驱动是LCD驱动。
这个驱动程序是s3c2410的FrameBuffer驱动:
s3c2410fb,源文件是drivers/video/s3c2410fb.c。
问题是参考板和样机的LCD不是同一品牌的,有些显示参数的设置需要修改。
其他的驱动跟硬件参考平台很接近,只需要小修小改,就可以跑通了。
最后还要考虑一下MTD驱动。
MTD可以对Flash建立分区表,以便分别存储U-Boot、内核和文件系统。
3.3应用程序的开发移植
应用程序的功能包含两个方面:
一方面是实现图形用户界面,另一方面是GPS数据处理。
图形用户界面可以基于QT/Embedded实现。
使用QT/E空间可以开发一些简单便捷的图形应用程序,可以支持触摸屏和按键接口。
GPS数据是通过串口通信的,所以这部分程序主要是Linux串口编程。
另外程序还需要具体分析处理接收和发送的数据。
当然也离不开Linux基本的系统工具,使用Busybox工具集就可以了。
第四章系统集成与部署
各部分软件开发完成以后,就可以对样机进行彻底测试了。
可以先通过NFS方式测试,再部署到Flash中测试。
当然,这很可能是反复测试的过程。
对于GPS2410样机,只对功能方面做了测试,没有测试性能方面的问题。
本项目采用了RAMDISK文件系统,因为它是简单实用的。
为了尽量使文件系统最小,按照下列步骤定制