关键词:电子巡更系统 信息钮扣 USB接口 设备驱动程序
电子巡更系统是智能楼宇中保安系统的一个子系统。保安巡更时,需按指定的路线和时间,依次以达各个巡更点进行巡更。在此系统中,各巡更点设有信息钮扣,保安用巡更机读取信息钮及当前时间。巡更完毕后,将巡更机交至安保中心,使之与计算机的USB接口相连,将存储在巡更机中的巡更数据输入计算机。所以,通过它可以了解保安的巡更情况,有效地管理和督促保安的工作。
1996年,Intel、Microsoft、IBM等七家公司共同推出USB1.0通用串行接口标准,随后带USB接口的产品陆续出现。USB接口具有速度快、支持热插拔和即插即用、易扩展、可提供总线供电等优点。
基于USB接口的诸多优点和本设计中巡更机的特点,我们在设计巡更系统时,采用了USB接口。该电子巡更系统具有使用方便、数据传输速度快、易扩展、充电方便、功耗低、性价比高等优点,有效地解决了传统巡更机的不足。
图1 巡更机硬件原理框图
1 电子巡更系统硬件设计
针对电子巡更系统的特点,为了降低开发成本,提高系统的性价比,本设计采用MCU+USB接口芯片的方案。MCU采用Atmel公司的AT89C52单片机,可以设置成低功耗方式。USB接口芯片采用Philips公司的PDIUSBD12。带USB接口的电子巡更系统硬件原理框图如图1所示。其中DS1302为高性能、低功耗、宽电压、带有RAM实时时钟芯片,它适合于工作电池供电设备的系统时钟。这里MCU通过它读了当前时间;24LC64为低功耗、宽电压、64Kb、支持I2C协议的串行CMOS电可擦除程序存储器EEPROM,这里用于存储巡更点信息钮扣的ID值和读取信息钮扣时间数据。DS1990A外形上是一种圆形不锈钢器件,内部存有64b的二进制代码,以此代码作为巡更点的ID值。DS1302和24LC64电压工作范围为2.5~5.5V,以I2C总线和MCU通信。DS1990A以单总线(1-Wire总线)和MCU通信。
本系统中巡更机采用3.6V可充电电池供电,充电电源由USB接口的5V电源线提供,电源电压监测电路如图2所示。其吕AMS1117是一个DC-DC电压变换器,其输入端为USB接口的5个电源线,输出端为3.3V电压,以此电压为3.6V电源充电。MAX9117是一个带有1.245V基准电压(Vref)的比较器。当电池电压下降到3V以下时,LED点亮,指示电量不足。
PDIUSBD12是一种性能优化的USB器件。它是一种与微控制器进行通信的高速爱用并行接口,它同时也支持本地DMA传输。设计人员可以在各种不同类型的微控制器中选择出最合适的微控制器,而且不需要专用的开发设备。这种组件方式增强了系统开发的灵活性,减少了开发时间、风险和费用,是开发USB外设的一种快捷和经济的途径。PDIUSBD12符合USB1.1规范,也符合大多数在规范,如成像类、大容量存储类、通信类、打印类和人工输入设备等。因此,PDIUSBD12非常适合数外围设备,如打印机、扫描仪、外部大容易存储器(Zip驱动器)和数码相机等的接口芯片。它使得当前使用SCSI的系统可以立即降低成本。
2 电子巡更系统软件设计
2.1 巡更机固件程序
巡更机固件程序从功能上主要分为两部分。
①信息钮扣的读取操作程序。这一部分实现MCU主外围器件的初始化、读取信息钮以及对DS1302和24LC64的读写操作。调试时要注意I2C总线的时序问题。巡更机固件程序采用C语言编程。信息钮读取操作程序流程如图3所示。
②MCU和USB接口的通信程序。这一部分程序要实现将24LC64中的数据经USB接口读入到上位计算机中。USB接口芯片PDIUSBD12的端点适用于不同类型的设备,可通过命令配置为4种不同的模式:模式0(非同步传输)、模式1(同步输出传输)、模式2(同步输入传输)和模式3(同步输入输出传输)。PDIUSBD12带有三个端点,即端点0、端点1和端点2。这里仅列出模式0(非同步传输)时各端点的配置表格,如表1所列。
表1 模式0各端点配置
端点号 | 端点索引 | 传输类型 | 端点类型 | 方向 |
最大数据包容量/B |
0 | 0 1 |
控制输出 控制输入 |
缺少值 | 输出 输入 |
16 16 |
1 | 2 3 |
普通输出 普通输入 |
普通 普通 |
输出 输入 |
16 16 |
2 | 4 5 |
普通输出 普通输入 |
普通 普通 |
输出 输入 |
64×2(双缓冲区) 64×2(双缓冲区) |
本程序设计时,使用PDIUSBD12的端点1和端点2进行上位计算机与巡更机MCU之间的命令和数据的传输。端点1和端点2设置成模式0,其中端点1进行命令的传输和应答,端点2用于数据的传输。端点1接收上位计算机发送过来的8字节的读指令,指令正确回应后,使用端点2返回读成功数据。通信中所使用的端点情况如图4所示(括号内为使用的端点号)。
PDIUSBD12收到上位计算机的数据包时,就以中断的方式通知巡更机的MCU。固件程序工作过程如下:当PDIUSBD12从USB收到一个数据包时,PDIUSBD12就会对MCU产生中断请求,MCU立即响应中断。巡更机固件程序将数据包从PDIUSBD12内部缓冲区移到数据缓冲区,并清零PDIUSBD12的内部缓冲区,以使之能接收新的数据包。在断处理程序中,MCU判断产生的中断类型,并进行相应的处理。其中断程序流程如图5所示。
2.2 巡更机驱动程序
Windows98和Windows2000已经为一些USB标准设备提供了驱动程序,巡更机目前还不是标准的计算机外设,所以必须针对巡更机的特点来编写驱动程序。本设计中巡更机驱动程序是通过Windows DDK来开发的,它是Microsoft公司提供的一个开发Windows驱动程序的工具,DDK提供了编译驱动程序的环境。该巡更机的驱动程序是WDM类型的,采用VC++编程。
驱动程序中对USB进行操作的请求都应调用系统例程,将其转化为一个URB结构,即USB请求块(USB Request Block),然后使用系统级的IRP将其提交。该驱动程序由四个模块组成:初始化模块、即插即用管理模块、电源管理模块和I/O控制模块。
①初始化模块。DriverEntry为驱动程序的入口处,通过它来执行大量的初始化函数。
②即插即用管理模块实现设备的热插拔和动态配置。驱动程序初始化完成后,接着对设备进行初始化,这主要是通过即插即用(PnP)管理器调用驱动程序中的AddDevice和IRP_MJ_PNP两个例程来完成的。当驱动程序从PnP管理器中收到IRP_MN_START_DEVICE请求时,驱动程序启动设备,并且准备好处理I/O操作。
③电源管理模块负责设备的唤醒和挂起。电源管理器(powermanager)从整个系统的角度来管理电源,所有与电源相关的IRP都是由它发出的,它发出的请求包可以指定一种新的电源状态以及查询或更改一种状态。支持电源管理的驱动程序,在最大程序地帮助Windows合理地利用资源方面起着重要作用。值得注意的是,与电源相关的IRP必须在同步操作上有非常严格的要求。例如,任何时候在一个PDO(物理设备对象)中。只能有一个IRP_MN_QUERY_POWER或者IRP_MN_SET_POWER;电源IRP的处理要尽可能地快等。
④I/O控制模块完成输入输出请求的大部分功能。设备的控制由设备控制例程(IRP_MJ_DEVICE_CONTROL)负责,主要是对设备进行一些操作命令的发送或者标志的读取。数据读写主要由IRP_MJ_READ和IRP_MJ_WRITE两个例程完成,只需在AddDevice中申请一个符号链接,并且在StartDevice中将此符号链接激活即可。
2.3 应用程序设计
在Win32系统中,每一个设备对象都抽象为文件,此时的应用程序只需通过几条简单的文件操作API函数,就可以实现与驱动程序中某个设备的通信。在本设计中,应用程序是该电子巡更系统的中心,采用Visual C++编程。其主要功能有:启动或关闭USB设备、检查USB设备、设置巡更参数、从巡更机中读取数据以及显示、比较、存储数据等。
结语
USB接口因其具有诸多优点,近年来为计算机外设的开发热点,尤其是USB2.0标准的推出,其传输速率可达480Mb/s,使其真正意义上成为了一种通用串行总线。而根据笔者的实际开发经验,Philips公司的PDIUSBD12是一种性能优良、经济、实用、高效的USB接口器件,很适合投资少、周期短的开发项目,而且可以根据自己的实际情况灵活地选择组件,相信其在各领域必有广阔的应用前景。