一、引言
人体的指纹由于具有长期不变性、稳定性和难于伪造等特点,已经成为现代生物识别技术的首选, 自动指纹识别系统(AFIS)是指集指纹图像的采集、识别并给出身份验证结果为一体的软硬件相结合的系统。目前,自动指纹识别系统可以分为两类:一类是用专门的硬件设备来采集指纹图像,然后将采集到的图像传送给上位机,利用上位机强大的运算能力和海量的指纹特征库,来实现指纹的识别。一类是将指纹的采集与识别在一个嵌入式系统中完成,这类系统通常是用DSP这类具有高速运算能力的器件来构建。由于嵌入式指纹识别系统存在价格低廉、使用灵活方便等优点,越来越受到人们的重视。本文的目的就是要搭建一款低成本的嵌入式指纹处理模块,使其具有独立的指纹图像采集与识别并给出识别结果的能力。
二、模块硬件组成
对于嵌入式指纹处理模块硬件的构建,考虑到整个模块所需实现的功能、成本和处理速度的要求,选用TI公司生产的DSP处理器TMS320VC5402作为整个模块的核心处理芯片,它是TI公司推出的一款性价比极高的DSP处理器,其内部包括4KW 的ROM,16KW 片内DARAM,2个定时器,4个外部中断,外部程序空间可扩展到1MW,并且它可工作在3种低功耗方式(IDLE1,IDLE2,IDLE3),能较好的满足本模块需要。指纹图像采集芯片选择FUJITSU公司推出的新一代固态指纹传感器MBF200。它是一款专为嵌入式系统设计的高性能、低功耗的电容指纹传感器。由于TMS320VC5402掉电不保存程序且一幅经MBF200采集的分辨率为256×300的指纹图像需要75KB存储空间,所以整个模块外扩了容量为256KW 的FLASH和SRAM 各一片用于存储整个系统的程序和指纹图像数据。为了提高模块的可扩展性和适用性,采用USB接口芯片CH375扩展了模块的USB接口,使模块具有了外挂海量存储器和与上位机进行通行的能力。由于TMS320VC5402的16根数据可以作为通用I/O口使用,采用两片8位的总线缓冲器74HC245来实现本模块的ID设置。此外,系统还选用一片Altera生产的全局逻辑控制器EPM3032AE来实现整个模块的逻辑控制。
系统的工作原理可描述如下:通过小键盘输入ID号码,如果用户输入的ID号正确,MBF200采集用户的指纹,利用DSP和CPLD将指纹图像存储到SRAM 中,在数据处理阶段,DSP将SRAM 中的数据分块取到其内部的16KW RAM 中作为指纹图像处理以及识别算法的临时数据,将处理结果与FLASH 中预先采集提取的特征指纹进行匹配,并用LCD显示识别结果。系统的原理框图如图1所示。
1、模块逻辑功能实现
模块逻辑部分主要是为整个系统提供片选信号和读写控制信号,它是整个模块正常工作的核心,本系统选用CPLD芯片EPM3032AE来完成该部分的功能。TMS320VC5402可供访问的存储器空间有3个:1MW 的程序存储空间、64KW的数据空间,64KW 的I/O空间,系统设计时将外扩的256KW的FLASH及SRAM 都映射到数据空间,这两者应分时占据数据空间的,所以访问不同存储器芯片时需要分别为它们安排选通信号,该选通信号可由DSP的数据空间选择信号/DS和TMS320VC5402的通用I/O口信号XF相“或”来实现,即FLASH的片选型号由/DS与XF相“或”产生,SRAM 的片选信号由DS#与XF的“非”相“或”产生。模块上电后,TMS320VC5402的XF引脚输出为高电平,此时由FLASH占用数据空间,“BootLoader”开始运行,Load完成后,编写程序使TMS320VC5402的XF引脚输出低电平使系统放弃FLASH 而选通SRAM,从而使SRAM 占用数据空问。
另外,我们将指纹传感器MBF200、USB接口芯片CH375、LCD 以及小键盘都映射到TMS320VC5402的I/O 空问,要在访问它们时不发生访问冲突,需要对对它们进行编址。采用DSP的数据线A15、A14、A13对映射到DSP的I/O空间外围设备进行编址,具体实现过程如下:在EPM3032AE中设计一个三.八译码器,A15、A14、A13作为输入端,其八个低电平有效的输出端作为各外围设备的片选使能信号,由于系统选用的MBF200、液晶SED1335F、CH375都具有一根地址线A0,用来在功能寄存器和数据寄存器之间切换,所以也需要将DSP的A0接入各外围芯片的A0,让它们分别占用两个地址位。模块中映射到I/O空间的各外围设备的地址如表1所示(在表中的第二栏中未列出的地址线A2.A12可以为任意状态)。在软件编程时,对I/O空间的相应地址的访问,就是对映射到I/O空间各种外围设备的访问,例如对I/O空间0x0000~0x1FFE(注意要保证地址位A0为低电平)的读写,就是对指纹传感器命令寄存器的读写。对于系统各个芯片的读写信号,CPLD 主要完成将TMS320VC5402的MOTOROLA格式的读写信号转化为INTEL格式的读写信号,如Flash及SRAM 的读信号通过DSP的/MSTRB与R/W 信号进行“或”运算得到,Flash及SRAM 的写信号通过DSP 的R/W 信号的非运算后再与/MSTRB进行或运算得到;同理将DSP的/IOSTRB 与R/W进行相类似的逻辑运算便可得到I/O 空间的读写信号。采用Altera公司的Maxplus II软件进行VHDL语言编程,可较为容易的实现该系统所需的逻辑功能。
表1 映射到I/O空间的外围设备编址
功能/名称
A15/A14/A13/A0状态
I/O空间地址/区域
操作
MBF200命令寄存器
0\0\0\0
0x1000-0x1FFE(A0=0)
8位可读写
MBF200数据寄存器
0\0\01
0x1001-0x1FFF(A0=1)
8位可读写
LCD命令寄存器
0\01\0
0x3000-0x3FFE(A0=0)
8位可读写
LCD数据寄存器
0\011
0x3001-0x3FFF(A0=0)
8位可读写
CH375命令寄存器
01\0\0
0x5000-0x5FFE(A0=0)
8位可读写
CH375数据寄存器
0111
0x5001-0x5FFF(A0=0)
8位可读写
小键盘数据寄存器
10\0x
0x5001-0x5FFF
16位可读写
2、程序与数据空间的扩展
系统要访问的存储器有三个:TMS320VC5402 内部16KW 的DRAM,系统外扩的256KW 的FLASH和SRAM。对于本系统使用的DSP,其数据空间的寻址范围为64KW,而系统扩展的SRAM 为256KW,怎样对高地址的196KW 的数据空间进行访问, 借鉴TMS320VC5402程序空间分页寻址的方法,对数据空间进行分页寻址,方法如下:将SRAM的16根数据线(D0-D15)、低16位地址线(A0-A15)与TMS320VC5402对应的数据线、地址线直接相连,而将HD0-HD1通过寄存器GPIOCR编程设置成输出作为SRAM 的A16、A17的地址发生信号,即当HD0=0、HD1=0时访问数据空间的第一页,HD0=0、HD1=1时,访问数据空间的第二页,依次类推就把外扩的SRAM 分成容量为64KW 的四页。由于DSP访问其内部的16KW 的DRAM 时,外部地址线保持为高电平, 所以其内部的自带的16KWDRAM 占据了每一页的低16KW 的数据空间,这和程序空间的分页扩展是类似的,这样的数据空间地址分别为:0x4000~0xFFFF(HD1=0、HD0=0)、0x14000~0x1FFFF (HD1=0、HD0=I)、0x24000~0x2FFFF(HD1=1、HD1=0)、0x34000~0x3FFFF (HD1=1、HD1=1),在编程访问时必须首先配置HD0、HD1的相应状态,才能正
确对数据空间进行访问。至于FLASH芯片的与DSP的连接,由于系统运行时用不到FLASH 的高地址空间,所以可将它们的地址线、数据线对应连接就可以了。
3、指纹采集与识别部分硬件设计
该部分主要由TMS320VC5402和指纹传感器MBF200组成。MBF200提供三种接口:
(1)SPI:只需6条线就可以与带SPI接口的微处理器连接;
(2)USB:可作为标准的USB设备来使用;
(3)MCU:MBF200内置的标准8位微处理器总线。
本文采用了MBF200的MCU模式获取指纹图像。它与DSP和CPLD的硬件连接如下:传感器的8位数据线直接与TMS320VC5402 的低8位数据线相连,读写信号线由EPM3032AE控制(具体实现方法见本文逻辑控制部分),通过编程可将采集到的指纹图像数据直接存储到SRAM 四页中的任意一页或两页中, 由于SRAM 每页最多只能提供48KW 的数据空间,为了后续编写指纹识别程序的方便,编写程序设置MBF200的寄存器将采集图像数据控制在48KB以内,本文所采集的指纹图像像素为220×220,存于SRAM的第一页。另外,需要注意的是MBF200的两种起振方式:采用内部多谐振荡器起振,将MBF200的FSET 管脚通过者外接晶体振荡电路,使用外部时钟时通过XTAL1.XTAL2连接晶体电路来产生时钟信号。本文通过设置MBF200寄存器CTRLB的XTALSEL位为低采用第一种起振方式。指纹采集部分的硬件连接如图2所示。
图2 指纹采集部分硬件连接图
4、模块的USB接口扩展
考虑到模块板可能需要外挂海量存储器存储指纹模版及与PC机等上位机进行通信,采用CH375扩展了系统的USB接口,它是一个USB总线的通用设备接口芯片,无需用户编写驱动程序,CH375以C语言子程序库提供了USB存储设备的文件级接口,这些应用层接ISIAPI包含了常用的文件级操作,可以方便移植并嵌入到各种常用的单片机程序中,这样对USB 设备的通信就几乎和访问本地硬盘一样。它具有8位数据总线(D0-D7)、读(/RD)、写(/WR)、片选控制线(/CS)以及中断输出(/INT),可以方便地与TMS320VC5402进行连接。另外CH375有一个地址线A0,它占用两个地址位,当A0引脚为高电平时选择命令端口,可以写入命令;当A0引脚为低电平时选择数据端口,可以读写数据,其硬件连接如图3所示。
图3 USB扩展硬件连接图
三、嵌入式软件系统框架的构建
在各功能模块软硬件调试通过后,就要考虑构建整个模块的软件系统,使其能完成预定的工作,模块的预定工作流程如图4所示,主要包括以下几个部分:
(1)系统初始化
该部分的工作主要包括系统工作时钟设置、中断设置和各寄存器的设置。
(2)密码识别
该部分主要实现确认用户ID和更改用户ID 的功能。
(3)指纹图像的采集与识别
该部分主要实现指纹图像的采集与识别的功能。
(4)USB接口通信
该部分实现系统与上位机进行USB接口通行和访问外挂海量储存器的功能。
图4 模块程序流程图
TMS320VC5402提供了四个外部中断,系统设计时将INT0用于触发密码识别,INTI用于触发指纹图像采集和识别,INT2用于触发USB接口通信。在软件程序的开发中,为了减小中断服务程序的程序量,引入WINDOWS消息触发的编程思想,在程序中设计了一个队列,在中断服务程序中,只是将中断类型添加入该队列中,在主程序的死循环中不断扫描中断队列是否有中断,有则取出队列中的第一个中断类型,进行相应处理,没有中断就使模块进入节电模式,程序框架如下:
main()
{
int i,ImageFlag,intType1,intType;
/**********初始化目标板*********/
Init_Board();
InitQueue(&q);//初始化队列
while(1)//进入死循环
{
if(!emptyQueue(&q))
{/*删除队列中的首节点,并返回该节点的值域*/
intType1=outQueue(&q);
/*根据中断类型触发各个功能模块*/
switch(intType1)
{
case 0:
PassWord_Get();//调用密码识别程序
case 1:
ImageGet(0x4000,0x01);//获得指纹图像
FVSStart0; break;//调用指纹识别程序
case 2:
CH375();break;//进行USB接口通信
default: break;
}
}else Idle1();//进入节电模式
}
}
/*外部中断0触发密码验证模块*/
interrupt void Int0()
{
intType=0;
enQueue(&q,intType);//在队列尾加入新的中断
}
interrupt void Int1()/* 外部中断1触发图像采集及识别模块*/
{
intType=1;
enQueue(&q,intType);//在队列尾加入新的中断
}
interrupt void Int2() /*外部中断2触发USB接口通信模块*/
{
intType=2;
enQueue(&q,intType);//在队列尾加入新的中断
}
四、结论
本文采用了基于TMS320VC5402和MBF200的嵌入式技术,设计了一个能独立运行的嵌入式自动指纹识别系统,并根据各硬件模块的组成构建了系统的嵌入式软件框架。实验表明本系统板能实现快速的指纹图像采集和用户ID识别,采集的指纹图像如图5所示。在此基础上加入指纹图像预处理、指纹特征提取以及指纹匹配等指纹识别算法程序,能够构成一个完整的指纹识别系统。