在指纹自动识别系统中,嵌入式系统由于功耗低、设备体积小、安全性高等优点,已经得到越来越广泛的应用。通用串行总线(USB)是由Inter、Microsoft、IBM和NEC等共同制定的微机总线接口规范,具有较高的传输速率(USB 1.1支持最高传输速度为12Mb/s,而USB 2.0的传输速度最高可达到480Mb/s),支持即插即用,占用系统资源少,扩展能力强。在嵌入式系统的应用中,几乎不可避免与PC机的通信,由于通信速度的要求以及计算机硬件高速发展,传统的RS232接口已经越来越不能满足用户的需求,所以在嵌入式系统中USB接口的实现势在必行。
1 嵌入式指纹自动识别系统
本文所介绍的嵌入式指纹自动识别系统采用DSP与单片机协同工作,以实现指纹自动识别以及用户服务系统。其中单片机选用Philps公司的P89C52,DSP处理器选用TI公司的TMS320C5416。单片机具有系统控制能力强、结构简单、扩展方便等特点,适合作为系统的控制核心;而DSP采用的增强型哈佛结构、多级流水线、多处理单元以及特殊的指令(乘加指令等),使得DSP具有强大的数据处理能力,并且TMS320C5416支持最高160MHz的时钟频率,基于其强大数据处理能力和高运行速度,所以将它作为系统的算法核心处理器。由单片机为核心的控制模块主要完成用户服务系统和系统通信接口,由DSP为协处理器的算法模块完成指纹采集和处理。用户通过键盘输入控制整个系统的工作流程,通过LCD了解系统的工作状态及处理结果。DSP由其HPI(主机接口)与单片机以中断方式进行通信。而整个系统通过USB接口与上位PC机之间进行通信。其结构如图1
系统新用户注册时,通过键盘输入注册ID,然后系统由DSP控制指纹传感器采集用户指纹数据。如果采集到有效指纹,经过DSP进行指纹处理得到指纹模板数据。系统将该指纹模板存入系统数据库中。如果需要,也可以通过USB接口将用户信息和对应模板都上传至PC机中备份。当嵌入式系统数据丢失时,可以通过USB接口将PC机里所存备份下载至系统中。下面着重介绍系统的控制模块和USB接口的设计。
2 系统控制模块设计
系统控制模块的核心处理器为P89C52,由于其接口有限,同时完成系统控制和USB接口控制将十分困难。而从系统成本、开发时间周期和继承性方面考虑,换用其他处理器也不太方便,所以必须考虑在此处理器的基础上完成多项任务。由指纹自动识别系统的特点来看,系统在完成指纹录入或登录后才需要利用USB接口完成指纹模板和登录信息的传输,所以对于处理器来说,USB控制和系统控制可以采用时分复用的方式进行。由此,利用一个电平转换芯片和一个8总线收发器来控制数据的选通及流向,以保证系统能够正常工作。
SN74ALVC164245为5V~3.3V电平转换芯片,负责控制单片机与DSP之间的数据流向以及电平转换。因为单片机的IO电平为5V,而DSP的IO电平为3.3V,所以必须进行电平转换。另外,SN74ALVC164245的OE和DIR脚联合控制数据的流向,当OE为高时,芯片两边的数据互相独立;当OE为低时,通过DIR的状态来控制数据的流向。74HC245为总线传输器,用来控制单片机同LCD控制芯片KS0108的数据通信,其工作原理与SN74ALVC164245类似,只是没有电平转换功能。同样,USB服务芯片通过SUSPEND管脚来使能数据线,将SUSPEND脚置高电平时,整个PDIUSBD12处于休眠状态。由此,单片机就可以通过控制引脚的状态来控制数据总线,以实现单片机数据总线的时分复用。
3 系统USB接口设计
3.1 USB接口硬件设计
USB接口硬件主要以接口芯片PDIUSBD12为中心,设计它与USB物理接口以及微控制器之间的连接。接口模块通过跳线选择供电方式,可同时支持USB总线供电方式和外设供电方式,为全速USB设备接口。设计过程中充分考虑到可靠性、可测性以及电磁兼容性。其接口电路如图3所示。
接口电路供电通过拨盘开关K1选择,当K1接MVCC时,系统为自供电方式;当K1接UVSB时,为总线供电方式。当系统处于自供电方式情况下,系统通过EOT_N引脚来检测VUSB是否存在,并接上一个1M?赘的放电电阻来减弱充电,以确保当VUSB移开时EOT_N变为低,并且此时自供电电源与USB总线之间只能共地,同时设备不能通过USB口向VBNS输出电流。
在单片机与PDIUSBD12的控制通信方面,单片机通过对PDIUSBD12的A0脚的状态控制来指示并行数据总线P0上传输内容为命令还是数据。此时,PDIUSBD12上用于数据地址总线复用的ALE引脚一直接地。中断引脚INT_N是系统的关键,几乎所有USB的活动在设备接口端都是由PDIUSBD12接收,然后通过中断通知单片机完成。PDIUSBD12上的挂起SUSPEND为一个双向引脚,由此保证USB设备既能被设备主控(单片机)也能被上位PC机唤醒,而PDIUSBD12工作时连续3次没有检测到SOP就将挂起脚置高。
PDIUSBD12片上GL_N引脚通过外接发光二极管来指示系统工作状态,在USB枚举过程中,LED指示根据通信状况间歇闪烁;当PDIUSBD12成功枚举和配置后,LED指示将一直点亮;随后与PDIUSBD12之间成功地传输(带应答)将关闭LED;处于挂起状态时LED将会关闭。
片上时钟发生电路采用6MHz晶振,匹配一个22pF和一个68pF的无源电容。采用6MHz晶振也是为了降低产品制造过程中产生EMI(电磁干扰效应)的风险,因为外部线路的频率越高,其EMI效应也会越强,而在片外电路采用较低频率并在芯片内部进行倍频的措施将既不影响芯片的处理速度,又能提高在外部布线的安全性。使用两个不同容值电容的目的是为了使晶体能够快速起振,经过测量,晶振的启动时间在2ms左右。
PDIUSBD12可采用5V和3.3V两种工作电压。由于主控单片机的IO电压为5V,所以对PDIUSBD12也使用5V的工作电压。此时在接入5V至PDIUSBD12 VCC脚的同时,要将PDIUSBD12上的VOUT脚空出,接去耦电容。另外,为了减小系统的EMI,在USB连接器输入侧的VBUS和地线上增加磁珠,如图3的BLM21P,并且在USB的屏蔽罩与地之间使用容性耦合。
由于USB通信协议的复杂性,相当一部分工作由硬件电路来完成,所以对硬件电路设计的准确性要求非常严格,布线要合理要尽量减少分布电容和电磁干扰的影响,硬件电路的质量将直接影响到数据能否正常传输。
3.2 USB设备固件程序的开发
固件程序主要由主程序和中断服务程序组成。USB设备请求包括标准设备请求和厂商请求。标准设备请求用来完成USB设备枚举的命令,而厂商请求则是根据具体USB设备来完成特殊任务的命令。对于本文采用的USB服务芯片PDIUSBD12,其片内的SIE(串行接口引擎)实现了全部的USB协议层,且完全由硬件实现而不需要固件的参与,所以对于USB固件程序来说,USB协议的具体实现就可以根据PDIUSBD12所提供的命令字来完成。最后剩下的就是硬件层上读写数据的程序实现。
其工作流程大致为:主循环完成一些初始化工作,转入等待中断的循环中;当USB总线上有事务发生时,PDIUSBD12将会自动产生相应的中断来通知固件程序;然后固件程序转入相应的中断服务程序处理中断,主循环通过读取中断服务程序中设定的事件标志和循环数据缓冲区来决定转入相应的请求响应;响应程序通过再下层的PDIUSBD12命令接口程序控制PDIUSBD12完成相应数据或命令操作。此积木式结构的固件程序组合完成了USB接口设备从初始化到数据传输的全部USB活动。
本文根据USB1.1协议由其服务芯片PDIUSBD12和单片机P89C52完成了嵌入式指纹自动识别系统的USB接口硬件和固件程序的研究和开发,并结合上位PC机的驱动程序和应用程序为整个嵌入式系统提供了一个稳定性好、传输速度快、使用方便的USB接口。达到嵌入式系统与PC机之间灵活通信,使本嵌入式指纹自动识别系统得到了更广范的应用。