开发应用实例.docx

上传人:b****8 文档编号:23917815 上传时间:2023-05-22 格式:DOCX 页数:19 大小:1MB
下载 相关 举报
开发应用实例.docx_第1页
第1页 / 共19页
开发应用实例.docx_第2页
第2页 / 共19页
开发应用实例.docx_第3页
第3页 / 共19页
开发应用实例.docx_第4页
第4页 / 共19页
开发应用实例.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

开发应用实例.docx

《开发应用实例.docx》由会员分享,可在线阅读,更多相关《开发应用实例.docx(19页珍藏版)》请在冰豆网上搜索。

开发应用实例.docx

开发应用实例

开发应用实例

1概述

随着现代物流业仓储、超市等行业的快速发展,物品流动的速度越来越快,仓储库存周期也越来越短。

这样物流仓储盘点行业的压力也越来越大,传统的人工盘点方式已经不能适应现代物流的发展。

为了解决这一问题,国际上一些物流先进国家已经采用专业的盘点设备——盘点机,用于物流盘点。

我们在设计时采用了目前流行的嵌入式微处理器作为系统核心部件。

其微处理器选型是采用韩国三星公司生产的S3C2410微处理器,操作系统采用了WindowsCE.NET4.2嵌入式操作系统。

整个系统的硬件部分主要分为三个大的模块:

核心板、系统板和专用键盘及LCD显示器。

在核心板上集成了微处理器、64MBSDRAM和64MBNANDFlash模块及部分支持电路。

在系统板上设计有与核心板连接的接口,同时又集成有显示器接口,以太网接口,USB接口,串口,CF卡和IrDA条形码扫描接口等各种外设及以相应的控制部件,另外还有电源管理与转换等一些附属电路。

31键的专用键盘是采用超低功耗的MSP430单片机作为控制器来对键盘进行编解码,通过自定义的串行键盘口接入系统板。

显示部分是采用192*64LCD字符型显示器。

本章首先介绍了系统硬件部分设计及工作原理,在软件部分介绍了WindowsCE操作系统的移植和定制,驱动程序和支持软件的编制。

盘点机除了支持常用的设备,还需要支持串口条形码扫描仪,CF卡等设备

2硬件平台的设计

嵌入式设备的硬件架构一般都是以嵌入式微处理器为核心,通过处理器接口扩展以及系统硬件的支持,把众多的外设单元集成到整个系统中,并通过CPLD等逻辑转换器件和其它硬件电路完成对外设模块进行读写和控制操作。

物流盘点机系统硬件原理框图如图abc所示,硬件部分主要包含有核心板,系统板和专用键盘及LCD显示器三个部分。

1)系统核心板简介

核心板是整个系统的核心,集成了盘点机系统的微处理器、SDRAM单元、NANDFlash单元以及它们所需要的辅助部件,如晶体振荡器(12MHZ和32KHZ两组),电源模块等等。

核心板图和PCB板图如图b,c所示。

图a硬件平台示意图

2)FlashROM程序存储器

在核心板中,微处理器采用的是基于ARM920T核的S3C2410微处理器。

系统的程序存储器采用的是NANDFlash,芯片的型号是Samsung公司的K9F1208,容量为64MB,NANDFlashROM接口电路原理如图2所示。

它按页进行自动编程,每一页大小为528(512+16)字节,编程的典型时间为200µs。

擦除则按照块进行,每一块的大小为16K字节,典型的擦除时间为2ms。

它在页面中读取单个数据的时间为50ns。

K9F1208总共有48个引脚,起作用的只有8根I/O口线、读写控制线和电源线等。

I/O口是地址、命令输入和数据输出/输入的复用端口。

K9F1208还提供了ECC错误纠正码,实现坏区检测以及实时映射,这样它具有高达10万次的编程/擦除周期,数据保存长达10年。

在S3C2410内部集成有NANDFlash控制器,可以在硬件上直接与NANDFlash相连。

在盘点机中,NANDFlash被用作装载操作系统镜像以及大容量的数据存储,同时也是系统启动存储器。

3)SDRAM随机存储器

SDRAM被用来运行操作系统以及各类数据的缓存,图3是核心板SDRAM接口部分的原理图,系统采用两片HY57V56162016M×16BitSDRAM芯片,共同组成32Bit数据宽度,64MB内存。

HY57V561620是一款4Banks×4M×16Bit的SDRAM芯片,采用3.3V电源供电,比较适合嵌入式系统。

SDRAM与其它的RAM相比,有许多独特的优点,容量大,功耗低,速度快,最快可以工作在166MHz频率下,通常存储时间为10ns。

在高速存储系统中SDRAM是必不可少的外部存储设备。

SDRAM通过S3C2410片内的SDRAM控制器来管理,SDRAM挂接在BANK6上。

4)核心板电源

图4是核心板电源部分的原理电路图。

图中,采用MIC5207电源芯片将来自系统板的3.3V电压转换为两组1.8V电压供给处理器内核使用。

核心板上还有一些辅助电路,包括上拉电阻,滤波电容,以及供处理器使用的主时钟晶振,供外设适用的辅助时钟晶振等,它们一起构成了ARM的最小硬件系统板。

系统所使用的S3C2410处理器是一款FBGA封装的高速处理器,运行时钟频率为203MHz,这种FBGA封装的高速处理器需要使用多层电路板设计。

本系统核心板工作在高速信号下,为了布线方便,减少干扰,采用了六层电路板设计,第二层为接地面,四层为电源面,其他各层为信号层。

核心板通过标准144芯SIMM插座与母板连接。

核心板是一个最小的ARM9硬件系统板,具有较好的通用性,可以作为不同产品开发设计的基础。

2系统板(应用板)的组成与工作原理

系统板起两方面的作用,一方面对核心板提供支持。

如为核心板供电,提供外设到核心板的连接,另一方面为各种外设提供了接口。

系统板主要集成有RJ-45网络接口、USB主/从设备接口、串行接口、LCD显示器接口、CF卡接口、键盘等接口电路。

同时,还有包含有一些相应的控制转换电路(如可编程器件CPLD)和电源管理部分。

核心板和母板之间采用标准SIMM插槽连接,外设和系统板之间采用相应的外设接口连接。

其中可编程器件CPLD采用的是Altera公司的EPM3032ATC44-10的CPLD芯片。

CPLD器件可以实现高速的FIFO或者利用其灵活的可编程性,可以作为核心板与外部其他功能模块的通用接口(如实现了一个IDE接口)。

因为S3C2410本身没有CF卡(半导体辅助存储器中的一种)接口,所以为了连接CF卡,必须采用转换接口。

实际系统中采用了总线接口的IDE接口转换为CF卡接口。

系统板上的网络接口芯片采用CS8900网络接口芯片。

CS8900芯片是CirrusLogic公司生产的一种局域网处理芯片,它的封装是100-pinTQFP,内部集成了在片RAM、10BASE-T收发滤波器,并且提供8位和16位两种接口。

本系统中采用16位接口方式。

以太网接口原理图如图6所示,图中YL18-1080S(或YL18-1064S)是一种脉冲变压器,在CS8900的前端对网络信号进行脉冲波形变换。

系统采用了一款专用显示器——192×64型LCD显示器。

该显示器是一种图形点阵液晶显示器,它主要由行驱动器、列驱动器及192×64全点阵液晶显示器组成。

可完成图形显示,也可以显示12×4个(16×16点阵)汉字,采用3.3V电源供电,与处理器接口采用8位并行输入输出数据总线和8条控制线。

S3C2410处理器内部集成了LCD控制器,但是该控制器不支持用户选定的显示器,只能采用其他方式接入该款显示器,实际采用的是直接挂接到处理器的通用I/O口上的方式。

S3C2410中集成了3.3VTTL电平的串行接口,可以直接使用。

为了与标准RS232C串行设备通信,采用了一块SP3243芯片用于电平的转换,构成了一个比较完整的串口。

在盘点机的实际应用中,需要外接串行口的条形码扫描仪,该扫描仪采用标准串口9针D型插座,工作时需要通过串口第九针外接5V电源。

为了方便使用该款扫描仪,设计时对串行接口进行了改进,在串口第九针上采用电子开关叠加可控的5V电源。

在作为标准串口使用时,5V电源和第九针断开。

当外接扫描仪时第九针接入5V电源,驱动扫描仪正常工作。

串口第九针是否接入5V电源在串口驱动程序中实现,应用程序通过串口设置系统调用函数来控制,接口电路如图8所示

图8串行接口电路

本系统中所用的设备较多,其中很多设备需要复位信号来保证正常可靠的复位。

为此,在系统板上设计了复位信号模块,该模块采用电阻、电容和二极管构成一个简单适用的复位电路,在此基础上采用74HC17芯片进行波形调整、信号取反继而生成符合设备需要的高、低电平两组复位信号,供整个系统使用。

复位电路的原理图见图9所示。

S3C2410处理器片内集成有USB接口,故系统板只是简单的将此信号引出。

3专用键盘的设计

盘点机的输入信号则采用外接的串口键盘手动输入和串口条形码扫描仪读入方式。

串口键盘为自行设计的,适合盘点业需要的专用键盘,键盘采用了一款16位低功耗单片机——MSP430进行管理。

使用盘点机的目的是为了提高盘点效率,对于盘点人员而言,使用最多的就是扫描仪和键盘。

扫描仪上只有一个按键,使用简单。

由于键盘的效率对于提高盘点的效率非常重要,所以在盘点机系统中设计一款最合适盘点使用的键盘是提高盘点效率的重要一环。

盘点机是一款便携式设备,键盘不可能做得很大,另一方面为了便于盘点人员实现盲打,按键的大小不能太小,特别是频繁使用的按键还应该比计算机标准键盘略大。

在这种情况下,按键的个数就有所限制,经过大量实践,最终的键盘设计采用了31键的方案。

其中字母和数据键在一般情况下作为数字键使用,配合Shift按键输入字母,图10为键盘部分的框图。

同时,为了使用方便,键盘上还设置了系统休眠、唤醒按键,与键盘接口一起通过排线接入系统板。

键盘所用的控制器为MSP430F149,这是TI公司推出的一种具有16位RISC结构、超低功耗的工业级混合信号控制器。

这些控制器被设计为可用电池工作,而且可以有很长使用时间的应用。

CPU中的16个寄存器和常数发生器使MSP430微控制器能达到最高的代码效率,灵活的时钟源可以使器件达到最低的功率消耗,数字控制的振荡器(DCO)可使器件从低功耗模式迅速唤醒,在少于6µs的时间内激活到活跃的工作方式。

程序中使用MSP430F149的外部中断I/O口作为键盘扫描的信号线,经过编码后,通过片内内置的串口输出到系统板。

该芯片在1.8-3.6V电压,1MHz的时钟条件下运行,耗电电流在0.1-400µA之间(因不同的工作模式而不同)。

CPU平时至于节电模式,按键时触发中断信号,CPU立即被唤醒,处理完键盘事件后,CPU再次进入省电模式。

3软件系统的设计

系统的软件系统主要包括嵌入式操作系统选型、定制及裁减、硬件驱动程序和用户应用程序方面。

3.1操作系统的定制与实现

WindowCE具有良好的图形交互界面,便于开发调试上层图形应用程序,所以本便携式盘点机的操作系统选用了WindowsCE。

MicrosoftWindowsCE.NET是支持多平台的、可定制的32位嵌入式操作系统。

支持多线程、完全抢占执行和多任务。

不仅适用于工业上的嵌入式设备,同时支持高度便携性的个人计算设备,如掌上电脑、PDA和移动通信设备等。

WindowsCE.NET在设计上采用完全的模块化结构,可以根据硬件平台和应用目的灵活的进行定制。

对于应用程序的开发者来说,WindowsCE.NET提供了同Windows环境相似的各种开发环境。

MicrosoftWin32API、ActiveX控件、消息队列、COM接口、ATL和MFC,这对于提高编程者的效率和从其他Windows平台上移植成功的应用程序很有好处。

WindowsCE.NET内建了对多媒体、通信(TCP/IP、SNMP、TAPI等)和安全的支持,并且提供了Windows用户熟悉的常用的应用程序。

WindowsCE通过ActiveSync实现了目标设备同台式计算机之间的通信。

3.1WinCE操作系统的定制和实现

1)NANDFlashROM存储空间的分配

系统核心板上使用NANDFlashROM芯片内部分为4个平面,每个平面包含1024个块,每块包含32页,每页512字节。

芯片的读写以页为单位,擦除以块为单位。

故存储器的分配以块为单位(16KB)。

存储器分为两个大小相同的大区,即系统区和用户区,均为2048块。

用户区供用户保存用户程序和数据使用。

系统区又具体分为三个区段:

(1)NBoot区(0-1块):

大小为2块(32KB),其前4KB是系统启动代码,用于引导EBoot(调试状态)或者WindowsCE(发行状态)内核,其他部分可以保存启动中可能需要的程序或者数据。

(2)EBoot区(2-8块):

大小为7块(112K),一般在调试时使用,主要作用是格式化NANDFlash,通过网络下载WindowsCE内核等。

(3)WindowsCE区(其他块):

保存WindowsCE的系统文件。

2)WinCE操作系统的定制和实现

搭建基于WindowsCE操作系统的平台需要完成以下主要步骤:

(1)导入和硬件平台相关的.cec文件;

(2)利用标准开发向导,根据WindowsCE的架构创建一个平台;

(3)利用附加项和目录特征客户化平台;

(4)为特定的目标设备创建一个自引导程序和板级支持包(BoardSuportPackage);

(5)加入BSP文件编译操作系统镜像文件,通过以太网将镜像文件下载到目标设备,并调试平台。

(6)平台搭建并调试成功,为平台应用程序开发者导出软件开发工具包(SDK)。

这样程序开发者就可以利用EVC开发应用软件了

通常,在开发平台的时候,首先将OS镜像文件下载到一个硬件平台,比如基于PC硬件的WindowsCE开发平台(CEPC)。

PlatformBuilder包含了CEPC和很多其他硬件开发平台的自引导程序和板级支持包(BSPs)。

在硬件开发平台上把平台提炼和调试之后使之适合目标设备的要求。

在下载镜像文件到目标设备前要先创建自引导装入程序和原始设备制造商(OEM)适应层(OAL)。

OAL是介于内核和目标平台固件之间的一个层。

为了使WindowsCE系统能够运行在多种硬件平台上,微软又提出了一个新的概念——OEM适配层(OAL)。

这个OEM适配层(OAL)处于WindowsCE内核和硬件平台中间,它可以将特定设备的硬件特性与WindowsCE内核功能隔离开,从而使WindowsCE的内核可以通过这个硬件隔离层提供的标准抽象接口来实现与硬件平台的通讯。

OAL的存在可以隐藏各种与硬件有关的细节,屏蔽不同平台硬件的差异,保证WindowsCE上层内核的独立性,从而增强了整个系统的可移植性。

这一特性对于WindowsCE上层应用设计的程序员来说无疑是一个福音,但是对于WindowsCE在特定平台的移植以及底层硬件驱动设计的开发者来说,却面临着巨大的困难。

面对一个结构复杂、功能强大、设计先进的操作系统,如何全面认识OAL设计结构、如何实现OAL与特定硬件平台正确交互以及如何建立OAL与上层内核连接等关键技术,在系统设计和移植时都是一个严峻的考验。

OAL提供的功能与底层硬件的控制和通信密不可分,不同的硬件平台会有不同的OAL实现。

与其它处理器平台移植一样,S3C2410处理器的OAL需要在系统体系结构、板级支持包(BoardSupportPackage)两个层面实现。

本系统采用的处理器是S3C2410处理器,这是一款基于ARMV4版本的处理器,在定制操作系统过程中采用了ARMV4类型的BSP。

在此基础上,加载开发的本地驱动程序导出的.cec文件到PlatformBuilder的Catalog栏下,作为可选组件供操作系统选择。

由于WindowsCE内核通常为20M-30M字节,在调试机器时要经常地将如此巨大的数据下载到RAM中,传输效率是最关键的问题。

PlatformBuilder的下载服务提供了四种方式:

(1)实时仿真下载服务:

它启动仿真器并且在仿真器上引导操作系统的镜像文件。

仿真下载服务不需要通讯硬件,因为仿真器是在开发工作站上运行的。

这是PlatformBuilder4.0版本开始提供的一个新技术。

仿真器比目标设备硬件有着更高的容错性。

可以监控目标板程序运行的各种状态。

(2)以太网下载服务:

它通过以太网连接利用WindowsCE的自引导装入程序(EBoot)下载操作系统镜像文件。

这种服务方式需要在开发工作站上有一个以太网卡,目标机上一个调试用的以太网卡。

利用以太网下载服务,所有连接到目标设备的应用程序和工具都可以通过一条简单的网线来通讯。

(3)并行下载服务:

也利用WinCE的自引导程序,然后通过并行口连接下载操作系统的镜像文件。

但是,在并行下载服务里没有与之对应的内核传输。

(4)串行下载服务:

串行下载服务是通过串行口由WinCE自引导装入程序通过串行口连接下载操作系统镜像文件。

在这种服务里,无法在运行时配置设备方的设置。

但是可以修改并重新编译操作系统镜像文件代码来改变波特率。

如果采用串口下载,假设采用最高传输速率115200bps,那么在20M的数据下载则需要大约23分钟,故所需时间较长。

在实际系统开发过程中,用以太网连接来下载操作系统的镜像文件。

系统自引导装入程序(EBoot)与运行在开发工作站上的PlatformBuilder通信,下载镜像文件和设置调试服务。

以太网连接通过以太网服务可以提供更快的传输速度和更有效的集成功能。

串行连接和并行连接相对以太网连接速度慢,效率比较低,只在监视调试过程的时候偶尔用上。

3)WindowsCE的启动过程

(1)在核心板上,将系统设置为NANDFlashROM启动方式,即OM[l:

0]设置为00;

(2)上电复位后,系统自动将NANDFlashROM内的前4KB字节(NBoot)拷贝到bootSRAM中,执行bootSRAM中代码。

如果需要(NBoot>4KB),将NBoot区数据拷贝到SDRAM中,再执行NBoot;

(3)如果设置为调试状态,NBoot将EBoot区数据装入SDRAM,执行EBoot,EBoot程序按照用户的指令通过以太网下载WindowsCE镜像文件,并将镜像文件写入WindowsCE区段;

(4)NBoot或者EBoot将WindowsCE区段数据装入SDRAM,引导WindowsCE操作系统。

本系统配置为NANDFlashROM启动,系统上电复位后,bootSDRAM被映射到地址0x00000000,系统自动将NANDFlash中的前4KB代码拷贝到bootSDRAM中,开始执行bootSRAM中的代码,即NBoot程序。

系统执行的第一行代码即为NBoot的第一行代码。

NBoot的功能比较简单,只是用于初始化系统,将复杂的系统软件装入SDRAM,之后就交出控制权

3.2盘点系统驱动程序的开发

1)WindowsCE驱动模型

要把WindowsCE移植到目标平台上,必须为在硬件平台上的硬件设备提供驱动程序。

通过设备驱动程序可以将操作系统和外部设备连接起来,使得操作系统能够识别这些设备,并为应用程序提供设备服务。

就像其它操作系统一样,WindowsCE支持广泛的基于各种CE平台的设备驱动程序,同时也提供一些用于驱动程序开发的模型(model)。

WindowsCE的设备驱动设备模型有两种形式:

流接口驱动(StreamInterfaceDriver)和本地设备驱动(NativeDeviceDriver)]。

两者的差别在于它们向上层提供的编程接口不同,流接口驱动提供一组统一格式的流接口,而本地设备驱动则根据具体设备的需求提供相应合适的接口。

所有的设备驱动都是以动态链接库(DLL)的方式实现和加载。

WindowsCE中的许多模块都可以管理设备驱动程序。

例如与用户界面有关的GWES模块管理键盘、鼠标、显示和电源等驱动程序;设备管理(DeviceManager)根据注册表中的内容管理注册过的设备驱动程序,如串口驱动。

在盘点机系统中,内部建立了设备的驱动程序,如显示设备LCD,采用本地设备驱动方式,通过移植定、制微软提供的驱动例程实现。

其它外部设备,如串口、USBClient,采用流接口驱动实现。

通过已经定义好的流接口函数应用程序可以用文件访问的方式访问接口设备,如用户可以像文件操作一样读写串行口。

2)电源管理

移动设备的电源管理方式会对用户使用移动设备产生很大的影响,因此在CPU及电路提供了电源管理硬件支持的基础上,在操作系统中采用一套有效的电源管理方案也是非常重要的。

当成功的运行电源管理模块时,移动设备用户可以在任何时候长时间便利的使用移动设备,而不会意识到在任何时间都有一个复杂的工程系统正工作在设备内以保持电池电量。

由于移动手持设备在硬件资源和系统结构的特殊要求,同传统的PC机相比嵌入式操作系统对移动设备的电源管理需要不同的方法。

下面以WindowsCE.NET为例介绍在嵌入式操作系统中电源管理的方案设计。

WindowsCE.NET是通过电源管理器来进行系统的电源管理,提高整个系统的电源效率,并为每一个外围设备模块提供电源管理。

通过电源管理不仅可以减少目标设备上的电源损耗,而且可以在系统重启、运行、空闲和挂起的电源状态下保存RAM中的文件系统。

电源管理器会同三种不同的客户端程序发生作用,对于这三种客户端电源管理器提供了不同的编程接口。

其一电源管理器相关的设备驱动程序。

其二是可以改变系统电源状态或者改变设备性能的应用程序,如一些需要改变系统时钟频率的应用。

其三是在电源相关事件发生时需要得到通知的应用程序以及影响系统的电源状态的改变的应用程序,例如电池电量低时发出警告的程序。

完善的系统电源管理需要每个外设模块的硬件设计以及驱动程序的支持。

支持电源管理的设备驱动程序需完成确保可以在系统枚举时正确报告其电源管理能力,处理电源管理器发出的电源请求,在系统启动和从空闲模式退出时尽可能快的完成设备上电过程,在系统关机或进入空闲模式时使设备下电或进入睡眠模式,对于支持唤醒能力的设备完成设备的唤醒功能等任务。

对于每一个设备用户都可以在注册表中注册设备驱动所支持的电源状态。

设备的电源状态与系统的电源状态应有一定的对应关系,且受系统电源状态定义的限制

3)键盘驱动程序的实现

标准WindowsCE支持两种类型的键盘:

PS/2键盘和矩阵键盘。

本项目的键盘为串行接口,实际占用的是UART1,与两种标准类型都不匹配。

分析两种标准WindowsCE键盘接口之后,决定在矩阵键盘模型的基础上进行修改,编写驱动程序,满足本项目的需求。

WindowsCE系统中断模型分为两个部分,ISR和IST。

WindowsCE也提供了OAL层供用户使用,键盘驱动建立在OAL和中断模型的基础上。

具体如下:

(1)将UART1配置为键盘接口;

(2)修改OAL层中的系统中断映射代码,将UART1的硬件中断映射为逻辑键盘中断(SYSINTR_KEYBOARD);

(3)在键盘中断驱动程序中注册键盘IST的中断映射为SYSINTR_KEYBOARD,将SYSINTR_KEYBOARD映射到事件EVENT_KEYBOARD上,等待键盘事件发生;

(4)EVENT_KEYBOARD事件被触发后,在底层驱动模块中读取串口键盘代码,填充键盘码和按键状态所需的数据,提交给上一级模块;

(5)键盘管理模块中修改扫描码到虚键码的转换表,完成扫描码到虚键码的转换。

按照WindowsCE标准的键盘驱动结构编写键盘驱动程序,编译之后的DLL程序挂入WindowsCE系统,键盘即可正常工作。

注意,本系统中小键盘的编码工作由键盘本地的控制器(MSP430)来完成。

键盘驱动程序

KeybdIstLoop(KEYDB_IST*pKeyDBIst)

structKEYBD_IST{

HANDLEhevInterrupt;

DWORDdwSysIntr_Keybd;

UINTuiPddId;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1