1、基于飞思卡尔平台的北斗 GPS 定位系统设计摘 要文章研究的是基于飞思卡尔平台的北斗 GPS 定位系统设计。该设计采用的是基于 Cortex-A9 内核的飞思卡尔 i. mx6q 系列,兼容单核、双核和四核,1GB 的内存且最大运算速率为 1. 2GHZ 的移动平台,足以满足设计要求,同时该平台支持 Android4. 0 而且成本在可接受的范围。 关键词Android;北斗 GPS;定位系统;飞思卡尔 DOI10. 13939/j. cnki. zgsc. 2016. 06. 065 1 系统设计整体框架 文章设计大致分为安装在需要定位的移动物体上的北斗 GPS 位置信息接收中心(飞思卡尔
2、i. mx6q 系列开发板) 、远端云服务器、移动 Web网页客户端和 Android 手机客户端几部分。 了解完整体系统的设计和思想后,接着列出本系统的各个技术,如硬件、软件的编程框架和编程思路,如图 1 所示,我们在飞思卡尔 i. mx6q 系列底层移动平台上跑一个 Android4. 0. 4 系统来实时接收北斗/GPS 双模模块的实时位置信息,同时通过连接 WiFi/网卡/3G 运用 HTTP的 POST 方式将数据传送到由 PHP、Mysql 和 Apache 搭建的远端云服务器进行存储,该服务器是在 ubuntu12. 04 上搭建的;当移动客户端需要获取移动物体的实时位置信息时,
3、就主动通过有线/无线网络运用 HTTP 的GET 方式从服务器请求数据,这样移动客户端(Web 网页客户端或Android 客户端)就可以调用百度地图的 API 把从服务器获得的经纬度等位置信息刷到百度地图上实时显示,客户端支持 2D、三维和卫星地图几种显示模式。 图 1 系统设计整体框架 文章使用的处理器是 I. MX6Q、Cortex-A9 架构,能兼容单核、双核和四核,同时其最高主频能达到 1. 2GHZ,有 64 位 1GB 的 DDR3 和两通道32 位的 LPDDR2,8GB 用户可定制的 Nand Flash,小于 4W 的低功耗功率,设有 HTML、USB、SD 卡、TF 卡、
4、1000/100/10Mbps 的 Ethernet、多屏显示、LCD、触摸屏等诸多接口。除此之外还有 3 路 UART 口及 1 路 CAN 接口,LCD 接口支持 TFT LCD 1024x600,LVDS 接口支持720p60、1080p60,音频输入是 MIC,音频输出是 Headphones,采用 RTC实现外部实时时钟,有掉电保存时间等优点,电源采用 5V 2A 电压输入;并且还拥有丰富的软件资源,均支持安卓 4. 0. 4 版本系统、ubuntu12. 04 和 Linux 的 3. 0. 35 内核。 在安卓 4. 0. 4 中支持 SD 卡脱机快速烧录、USB 下载烧录、单文
5、件/多文件一键烧录、EXT4 格式的文件系统烧写等多种烧录方式,同时其Uboot 支持 eMMC 和 SD 卡两种启动方式,并且支持LVDS、LCD、HDML、VGA 多种显示设备,支持 Linux3. 0. 35 版本内核,在内核中也跟其他嵌入式产品一样拥有 eMMC、看门狗、RTC、IO、SPI、I2C、PWM 控制器、LCD、触摸屏、USB、串口、以太网、WiFi、3G、USB 转串、HDLM、VGA、NAND_FLASH、SD 卡和 TF 卡等多个设备的驱动,并且能支持 EXT4、NFS、FAT32 和 NTFS 等几种文件系统。 2 系统介绍 谷歌公司将 Android 系统定位成一
6、款基于 Linux 平台的开源移动操作系统,之后一直由谷歌公司研发。安卓系统一直拥有完全的开放性和强大的可扩展性,如今成为社会最为流行的嵌入式操作系统之一,并且已在各个领域(如手机、网本、车载、机顶盒和电视机等)广泛使用。到目前为止共有 Android1. 0、Android1. 1(petit Four) 、Android1. 5(Cupcake) 、Android1. 6(Dunut) 、Android2. 0/2. 1(clair) 、Android2. 2(Froyo) 、Android2. 3(Gingerbread) 、Android3. 0/3. 1/3. 2(Honeycomb
7、) 、Android4. 0(Ice Cream Sandwich) 、Android4. 1/4. 2/4. 3(Jelly Bean)和目前流行的 Android4. 4(KitKat) ,文章运用了 Android4. 0 版本。 2. 1 Android 系统框架 Android 系统层次从上自下分别有应用程序层(Applications) 、应用程序框架层(Application Framework) 、运行库层(Libraries)和Linux 内核层(Linux Kernel)四大部分。其中应用程序层即用户空间的Java 语言编写的应用程序就像 Android 内置的邮件、通信、
8、浏览器等都在这一层;应用程序框架层主要为安卓开发人员提供一些已封装好的 API接口,从而使其快速开发;运行库层主要是一些 c/c+的函数库层,有开放源码的函数库,其中有负责浏览器运行的 WebKit,有libc、OpenGLES、SQLite 等标准 c 库,另外还有多媒体方面的影音和图片文件的播放支持的文件格式等;Linux 内核层主要负责底层硬件的接口设备驱动、网络和电源管理以及系统安全等。 2. 2 Android 应用程序框架层 Framework 层是 Android 的应用框架开发平台,开发者在遵循框架原则的基础上,对框架进行改造和扩展,从而开发出了各具特色的安卓应用。应用程序的体
9、系结构简化了组件的重用,让安卓开发者的开发工作也更加的灵活。Framework 层包括以下几个重要部分: View视图的集合,用于构建一个应用程序的界面 UI。包括水平列表、垂直列表(listview) 、网格(gridview) 、文本输入框(edittext) 、按键(button)和网页浏览页面。 ContentProviders内容提供者,给各个应用程序提供了相应的数据共享接口。 ResourceManager资源管理器,提供访问除代码以外的公开资源,如字符串文件、图像文件和界面布局文件。 NotificationManager通知管理器,让应用程序在状态栏上显示自定义的通知。 Act
10、ivityManager活动管理器,管理应用程序生命周期。 PackeageManager程序管理器,管理应用程序的安装,卸载,保存应用程序信息。 3 系统设计 3. 1 系统移植 3. 1. 1 Android 源码获取和编译 文章采用的系统是 Android4. 0. 4,可在 Android 官方网站获取,其主要步骤有以下几点。 (1)下载 repo 下载工具。 (2)在本地用 mkfile 创建 bin 目录,接着进入 bin 目录用 git clone https:/android. googlesource. com/tools/repo。 (3)下载完成后进入 repo 目录,并
11、且用 git checkout 切换到稳定分支。 (4)用 export 将 repo 目录添加到当前系统的全局环境变量配置文件中。 (5)在本地创建 Android 源码的目录,并在目录中运用 repo init来下载 Android4. 0. 4 源码。 (6)下载完成后,接着编译内核 3. 0. 35 的镜像和 EXT4 格式镜像。(7)使用. /buid/envsetup. sh 配置环境和用 lunch 选择开发平台,最后通过 make-j6 来编译。 3. 1. 2 U-boot 裁剪和编译 文章采用的 u-boot2010. 03 版本,其中详细的定制和编译如下: (1)解压 t
12、ar 命令解压 u_boot 源码。 (2)进入解压后的路径,对源码进行 CPU、板级平台、库等的筛选。(3)在当前安卓源码的最开始路径中的配置文件中设置交叉工具链。(4)编译配置文件,最后用 make-j2 编译出 u-boot. bin。 3. 1. 3 系统烧录 系统的烧录,首先设置 USB 模式通过 NDW 去加载初始化内存,接着设置网络加载的 IP 和网关环境变量,将编译好的 u-boot. bin 烧录到eMMC(inand)中的起始位置,大小是 4M,然后设置为 eMMC 启动模式;接着通过网络将编译好的 uImage 烧录到 u-boot 的后面,大小是 4M,同时设置内启动内
13、核的方式;最后通过网络加载、烧录编译好的文件系统,其烧录在内存内核的后面大小为 16M,接着重新启动,这样所有的烧录工作到此就已经全部完成。 3. 2 硬件模块分析 3. 2. 1 双模模块 D3020C 介绍 文章采用的硬件平台是型号为 TD3020C 的北斗/GPS 双模模块来给系统提供实时位置信息,它具有体积小、功耗低和支持热启动等优点,同时该模块支持 BD2 B1 工作模式、GPS L1 工作模式和 BD2 B1/GPS L1 混合工作模式三种模式。硬件中电源用 VCC、V_BCKP 和 V_ANT 作为输入,VCC_OUT 和 VCC_RF 作为输出,天线接在 PF_IN 支持 BD
14、2 B1/GPS L1 双模有源天线,UART 串口有串口 1(TXD1/RXD1)和串口 2(TXD2/RXD2)两串口,串口一用于获取位置信息输出,同时也可用来设置、选择定位的模式,波特率设置在 48000bps115200bps 范围之内,还有三路用户可自定义的 GPIO 接口。 软件接口协议方面,首先是语句标识符有 BD、GP、GN、CC 和 P,输出语句格式符有位置信息(GGA) 、大地坐标位置信息(GLL) 、有效卫星号(GSA) 、可视卫星状态(GSV)等;输入语句格式有设置当前系统工作状态(SIR) 、设置串口工作波特率(CAS01)和设置 NMEA 输出更新率(CAS02)三
15、种。 3. 2. 2 WiFi 模块驱动分析 文章采用的 WiFi 模块是基于 SDIO 的 NH387 型号,该 WiFi 模块的驱动是基于 SDIO 和 MMC 总线的。WiFi 模块对于数据包的接收,首先通过中断响应从网络设备媒介层中获取,再通过网络协议接口层的网络设备结构体的函数调用链接到网络协议层,接着网络协议层通过 netif_rx 函数将 WiFi 接收到的具体数据再经过 socket 层和虚拟文件系统层传到用户空间;同样用户空间需要向外发送数据,首先将数据通过虚拟文件系统层和网络 socket 层交给网络协议层的 dev_queue_device 来发送,最后通过网路设备功能层
16、的相应函数发送出去。 4 系统测试 在对系统进行研究设计之后,无论是对软件和硬件还是服务器端和客户端等各个模块部分都做了系统的、详细的测试分析。在对各个功能模块测试之前,必须先对北斗/GPS 硬件定位模式进行选择设置,在完成定位模式设置后,需要对网络服务进行选择,本平台有有线、无线 WiFi和联通 3G 三种网络模式;完成以上两步后即可以对北斗信号进行测试。 4. 1 北斗移动设备数据上传测试 在北斗移动设备上,上传到远端云服务器进行存储的实时位置信息和授时信息的情况如图 2 所示。 图 2 实时信息情况 从图 2 可以看出,系统能从北斗/GPS 模块获取正确的实时位置信息和授时时间信息,并且
17、可以用 HTTP 协议远端上传到远端云服务器中进行存储。 4. 2 远端云服务器测试 远端云服务器对北斗移动设备的实时位置信息和时间信息存储模块的测试和验证,可以通过在运行有服务器的 ubuntu12. 04 下用命令行代码 mysql-u beidou007-p、show database 和 use beidou 以及 select * from Location_info;来查看,我们可以清楚地看到北斗 1 号移动设备的实时位置信息和授时信息都很准确,并每隔 3s 将重复三次的数据存储到远端服务器数据库 beidou 的位置数据表 Location_info 中。 客户端成功向远端与服务
18、器请求北斗移动设备的实时位置信息后,服务器查询 Location_info 数据表给客户请求端返回相应的数据。 当我们在浏览器上输入访问云端与服务器的 HTTP 协议以 POST 方式请求的网址时,http:/192. 168. 1.103/maps/ WebService/getLocation. php?id=1 用来模拟客户端的数据申请,成功后以 json 的原始数据返回,从而说明我们可以通过这种格式的命令协议访问到远端服务器并可以获取到我们想要的北斗移动设备最后一次出现的经纬度位置信息和时间。 5 系统测试结论 通过对定位模块的模式选择和网络选择以及北斗信号测试等操作之后,继而通过北斗
19、移动设备的实时位置信息的上传、远端服务器对信息的存储和操作的测试,最终确定本文研究的基于飞思卡尔平台的北斗 GPS定位系统的系统功能全部实现并且性能良好。 参考文献: 1吴美平,逯亮清. 北斗双星系统车辆定向技术J.国防科技大学学报,2006,28(3):89-93. 2徐亮. 基于 Android 的远程控制系统J.计算机工程,2013,39(11):280-284. 3曹淑华,吴文红. GPS 与车载导航系统J.现代电子技术,2007,24(23):201-206. 4付超,杨善林,马溪骏. 基于 GPS 的低成本车载导航设备的研究实现J.计算机应用研究,2007,12(2):249-251. 5张庆锋,韩飞,黄贤武. 一种基于电子地图的 GPS 定位技术J.现代电子技术,2005,24(17):86-88.