陈智慧;郭雷;赵天云
【摘 要】This paper introduces the design and realization of USB interface Driver Program for fingerprint collecting module under the embedded Linux system, and describes the general process of developing the Linux USB Device Client Driver Program under Linux. Combining with the hardware characteristics of the USB interface, this paper makes a detailed discussion of the design of the USB interface driver program. By using the fingerprint module USB interface to obtain the fingerprint information, the fingerprint information can be transmitted between the Fingerprint collecting module and the embedded Linux system. Experiments show that this fingerprint collecting module can collect high quality fingerprint images and achieve an effective and reliable data communication between the Fingerprint collecting module and the embedded Linux system. The module is of small size and strong reliabity so that it can be applied in the Embedded Linux system in a bad industrial encironment.%介绍了嵌入式Linux系统下CMOS光电式指纹采集模块的USB接口驱动程序的设计和实现.概括了Linux系统下USB设备客户端驱动程序开发的一般过程,结合本指纹采集模块USB接口的硬件特点,详细讨论了指纹采集模块的USB接口驱动程序的设计过程.通过该指纹采集模块的USB接口读取指纹信息,实现了指纹采集模块与嵌入式Linux系统的信息传输.结果显示该模块可以采集高质量的指纹图像,实现Linux操作系统和指纹采集模块之间有效可靠的数据通信.该模块尺寸小,可靠性强,可在处于恶劣的工业环境中的嵌入式Linux系统下应用.
【期刊名称】《西安工业大学学报》 【年(卷),期】2012(032)007 【总页数】5页(P5-9)
【关键词】嵌入式Linux;USB接口驱动程序;指纹采集模块;CMOS传感器 【作 者】陈智慧;郭雷;赵天云
【作者单位】西北工业大学自动化学院,西安 710129;西北工业大学自动化学院,西安 710129;西北工业大学自动化学院,西安 710129 【正文语种】中 文 【中图分类】TP302.1
指纹识别技术是一种重要的生物特征识别技术,在嵌入式系统中广泛应用,指纹采集模块是实现这一技术必不可少的设备,因而设计用于嵌入式Linux系统的指纹数据采集和传输模块具有重要的意义.已有不少学者在指纹采集模块的设计方面做了许多研究,但以往的研究多采用电容式传感器或CCD传感器,对USB接口驱动程序的开发也集中于 Windows操作系统,文献[1]等使用CCD图像传感器,设计了一种基于USB接口的光学指纹采集装置,CCD图像采集器件信号输出大多是模拟信号,与处理器的接口电路复杂,抗干扰能力弱;文献[2]等采用FPS200指纹采集芯片的USB模式,在Linux平台下实现了指纹的采集,FPS200是电容式指纹采集芯片,电容采集芯片容易受到干扰,可靠性差,价格昂贵;文献[3]等利用FPS200指纹芯片设计指纹检测模块,模块驱动程序是基于
Windows系统开发的,不能在Linux操作系统下使用.当前由于Linux操作系统的
众多优点,在嵌入式系统中应用越来越广泛,而且CMOS图像传感器也得到快速发展,表现出稳定性好、成本低、抗干扰能力强,采用数字信号输出,与处理器的接口电路相对简单的优点.基于此选择CMOS图像传感器芯片和集成有USB接口的主控芯片作为本系统的核心器件,并开发基于Linux系统的USB接口客户端驱动程序;所选择的两款芯片均是高度集成,采用表贴封装的器件,使得整个系统功耗低、抗电磁干扰能力强、尺寸小、易集成于各种设备,试验表明该模块可用于恶劣工业环境中的嵌入式Linux系统中.本文针对指纹采集模块需要在嵌入式系统下广泛应用的需求,设计指纹采集模块的硬件方案,并根据所选择主控芯片的接口特点开发Linux操作系统下USB接口的客户端驱动程序.
本设计采用的开发平台是MINI2440开发板(Samsung S3C2440 ARM920T core with MMC,最高主频可达532MHz),操作系统是Linux-2.6.29,交叉编译器为arm-Linux-gcc-4.3.2. 1 Linux系统下USB接口驱动程序设计过程
在Linux系统中,已经实现了USB主机控制器的驱动程序,只需针对本指纹采集模块开发USB客户端驱动程序,Linux内核模块中提供了一块USB内核(USBCORE),它给出了专门的API接口来支持USB设备和主控制器.通过定义一系列数据结构,宏命令和函数对所有的硬件和设备支持部分进行抽象.这些函数主要集中在上层和底层API,USB客户端驱动程序就是调用USB子系统提供的函数来实现的[4],USB客户端驱动程序在Linux内核中位置如图1所示. 图1 内核USB子系统Fig.1 Kermel sub system of USB USB客户端驱动程序可以分成以下3个主要部分[4].
1)自动配置和初始化子程序.负责检测所需驱动的硬件设备是否存在以及是否能正常工作,这部分驱动程序仅在初始化时被调用一次.
2)服务I/O就是请求子程序,是驱动程序的上半部分,这部分是系统调用的结
果.
3)中断服务程序又称驱动程序的下半部分,设备在I/O请求结束或其他状态改变时产生中断.因为设备驱动程序一般支持同一类型的若干个设备,所以调用中断服务子程序时都带有一个或多个参数以唯一标识请求服务的设备.
将USB客户端驱动程序与内核结合起来,需要首先向内核注册,请求内核分配主设备号与次设备号;其次是注册中断,以便外部设备向CPU发出中断后能够处理设备中断函数,应用程序对设备的访问是通过访问文件的形式实现的,所以要建立一个文件节点与该设备相关联,使用命令:mknod/dev/xxx-C major minor可以实现上述的关联.该命令的含义是建立一个/dev/xxx的文件节点,并且把特定主设备号(major)与次设备号(minor)的设备与该节点关联.-C指定设备的类型为字符设备.有了关联后,应用程序要访问该设备,只要调用open(“dev/xxx”,…)函数即可[5].
2 指纹采集模块及USB接口的硬件结构
文中设计的指纹采集模块利用HT82A525R作为主控 MCU,Hynix CMOS image Sensor(HB7121B)作为CMOS传感器单元.HT82A525R为盛群公司的带有全速USB接口的8位I/O型微控制器(MCU),具有多种优点.可以选择内建12MHz振荡电路或外部12MHz或6MHz的石英振荡器作为系统频率,在USB资源方面提供4个端点(Endpoint),可支持的传输类型有控制传输(Control Mode)、中断传输(Interrupt Mode)及块传输(Bulk Mode),提供2种DMA模式:串行SPI DMA模式和8位并列DMA模式,适合快速大量数据的传输.本设计中选择12MHz的外部石英振荡器作为系统频率,利用控制传输(Control Mode)端点和块传输(Bulk Mode)端点,并采用8位并列DMA模式传送指纹图像数据.对于USB接口,系统主机通过对信号线的上拉电阻来判断其速度.对于全速设备,在信号线USBD+有1.5K上拉电阻,本设计的硬件结构如
图2所示.
程序初始化时,将PDMA_MOD设定为0,使HT82A525R工作在指纹识别模示下,由I2C方式设定图像传感器的工作模式.将PDATA_SEL设定为1,只接收奇数笔的灰色指纹图像数据.由FIG_PIX设定目前所要处理影像为CIF格式.并通过USB主机端对ENDPOINT 1下指令,将PDMA使能打开并列DMA功能,准备接收图像数据.
程序开始后,HT82A525R内部会根据VSYNC及HSYNC的信号控制MCLK,自动判断每张影像的开始,指纹图像通过HB7121B转换成数字信号,每一帧由2048个像元组成,利用PD0~PD7接收影像数据,并通过并列DMA功能由USB ENDPOINT 2以块(BULK)传输方式输出到USB接口.Linux系统通过USB接口对指纹图像进行采集,并由具体的应用程序对采集的指纹图像进行分析与处理,其中最关键的是指纹采集模块USB接口驱动程序的设计,它是Linux系统与指纹采集模块进行通信的桥梁.
图2 硬件原理图Fig.2 Hardware principle diagram 3 指纹采集模块的USB接口驱动程序设计
本文讨论的指纹采集模块USB接口驱动程序是以模块的方式设计的,由4部分组成,分别为:①识别驱动程序支持的设备(由USB核心实现);②注册和注销驱动程序;③探测和断开;④传输数据.其中如何成功地读取指纹数据是难点,USB驱动程序是即插即用型设备,所以当指纹采集模块USB接口连接到总线上时,它就会被USB子系统枚举,分配一个在1~127之间的唯一的设备号,然后主机控制器驱动程序通过缺省管道以控制传输方式来获取USB设备发来的设备描述符、配置描述符、接口描述符、端点描述符信息,通过设备描述符中的厂商ID和产品ID,调用与之相匹配的驱动程序模块,并首先进入模块的probe函数,probe函数对刚连接上的指纹采集模块USB接口进行测试,检测连接上的指纹采集模块
USB接口是否是与这个驱动程序匹配的设备,如果不匹配就提示错误,驱动程序模块结束运行,如果匹配,则调用usb_set_intfdata函数将设备信息保存到接口作为接口数据,接口数据利用结构体存放,以便驱动程序在运行的过程中直接从数据结构中读取信息[8].
Linux系统下硬件设备区分为3种基本的设备类型:块设备、字符设备和网络设备,显然,本程序所驱动的指纹采集模块USB接口只能提供顺序存取的功能,属于字符设备.常用的字符型设备驱动程序入口点函数有open、read、write、ioctl和close等函数,驱动开发的主要工作就是如何实现这些函数,对于字符设备驱动程序,这些函数集合在一个struct file_operations类型的数据结构中,字符设备驱动程序的编写主要是填充struct file_operations中的相关函数.
在编写指纹采集模块USB接口驱动之前,必须获取驱动程序需要的硬件参数.有了这些信息之后,就可以着手编写驱动程序,在对指纹采集模块的操作中,我们最为关心的是从指纹采集模块中读取数据,即读函数的实现,读取数据程序流程图如图3所示.
编写完了驱动程序后,就要对它进行编译和装入内核代码树,步骤如下[6]: 1)将任何与设备驱动程序有关的.c和.h文件复制到包含字符设备驱动程序源码的目录中,一般在Linux源程序目录中drivers/char子目录下.
2)在chr-dev-init()函数的最后加上调用驱动程序init()函数的源码,如需加上#ifdef CONFIG_TESTDRIVE init_test();#endif,chr-devinit()函数在drivers/char/mem.c.
3)编辑drivers/char目录中的makefile,增加如下代码ifeq($(CONFIG_TESTDRIVE),y)L_OBJS+=test.o Endif.
4)在config.in中字符设备段里增加如下代码为 bool‘support for testdrive’CONFIG_TESTDRIVE y.
5)运行make menuconfig、编译、连接并重新安装内核. 图3 读取数据流程图Fig.3 The flowchart of reading data
加载安装该驱动程序后,通过调用上面的读取函数,就能通过USB接口从指纹采集模块读取数据.如图4所示为利用此指纹采集模块采集的作者本人的指纹图像. 图4 采集的指纹图像Fig.4 The collected finger print images 4 结论
文中通过分析Linux系统下指纹采集模块的结构及USB接口驱动程序开发的一般方法,设计了指纹采集模块的硬件方案,提出Linux系统下指纹采集模块USB接口驱动程序设计方法,开发了指纹采集模块USB接口的驱动程序,实现了使用Linux操作系统的主处理器和指纹采集模块之间有效可靠的数据通信.本模块图像清晰度为500DPI,数据传输速率可达5MB/S,指纹图像录入时间〈1.0s;抗干扰能力强,可在恶劣的工业环境中使用;该设计成本低、功耗小、尺寸小、易集成于各种设备,图像采集速度快、失真小、稳定性高,满足嵌入式Linux系统下应用的要求,对其他嵌入式Linux系统下USB接口芯片的驱动程序设计,有一定的参考价值.
【相关文献】
[1]朱继华,毛幼菊.基于USB接口的光学指纹采集模块设计[J].激光杂志,2005,26(4):84.ZHU Ji-hua,MAO You-ju.Design of the Optical Fingerprint Collecting Module Based on USB[J].Laser Journal,2005,26(4):84.(in Chinese)
[2]施卫明,南余荣.基于ARM+Linux平台的USB指纹采集模块设计实现[J].工业控制计算机,2011,24(11):4.SHI Wei-ming,NAN Yu-rong.Design of USB Fingerprint Module Based on ARM+Linux’s[J].Industrial Control Computer,2011,24(11):4.(in Chinese)
[3]赵应丁,刘金刚.基于USB接口的指纹检测模块设计实现[J].微电子学与计算机,2005,
22(3):50 ZHAO Ying-ding,LIU Jin-gang.A Design of USB Interface Based on Fingerprint Detection Module[J].Microelectronics & Computer,2005,22(3):50.(in Chinese)
[4]肖勇,温志渝,洪明坚.基于Linux的微型光谱仪专用USB接口驱动程序设计[J].传感技术学报,2006,19(5):1785.XIAO Yong,WEN Zhi-yu,HONG Ming-jian.Design of USB Interface Special Driver Program for Micro-Spectrometer Based on Linux System[J].Chinese Journal of Sensors and Actuators,2006,19(5):1785.(in Chinese) [5]张彬,欧阳波.嵌入式Linux下的USB骨架驱动程序研究[J].湖南科技学院学报,2008,29(8):82.ZHANG Bin,OUYANG Bo.Research on USB Skeleton Driver Program of Embedded Linux[J].Journal of Hunan University of Science and Engineering,2008,29(8):82.(in Chinese)
[6]宋丽华,高珂.嵌入式Linux下USB摄像头驱动实现[J].计算机工程,2010,36(9):282.SONG Li-hua,GAO Ke.Implementation of USB Camera Drive Under Embedded Linux[J].Computer Engineering,2010,36(9):282.(in Chinese)
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- sarr.cn 版权所有 赣ICP备2024042794号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务