摘要:介紹了利用單片機(jī)Atmega48與指紋識別模塊TCS3C-TCD42A構(gòu)建小型指紋識別系統(tǒng)的全過程,簡要介紹了TCS3C-TCD42A模塊的功能和特點(diǎn),給出了指紋識別系統(tǒng)結(jié)構(gòu)框圖。論述了單片機(jī)時(shí)指紋識別模塊的控制。包括單片機(jī)與模塊的接口方法、通信協(xié)議、主程序、接收中斷處理模塊和通信處理模塊的編程思路及注意事項(xiàng)。該系統(tǒng)在實(shí)際使用過程中,運(yùn)行穩(wěn)定,通信性能良好,已經(jīng)成功應(yīng)用于指紋保管箱產(chǎn)品中。
關(guān)鍵詞:指紋識別模塊;串口通信協(xié)議;單片機(jī);AUnega48
0 引言
隨著現(xiàn)代經(jīng)濟(jì)和社會的不斷發(fā)展,越來越多的場合需要身份確認(rèn),而傳統(tǒng)的身份識別技術(shù)已經(jīng)遠(yuǎn)遠(yuǎn)不能滿足要求。指紋識別作為一種新興的鑒別個(gè)人身份的方法,已經(jīng)廣泛地在安全部門得到應(yīng)用。由于指紋具有不可復(fù)制性、惟—性、穩(wěn)定性的特點(diǎn),所以得到了越來越多的應(yīng)用。目前世界上許多公司和科研機(jī)構(gòu)都在進(jìn)行指紋識別技術(shù)的研究,并取得了一定的成果,推出了許多指紋產(chǎn)品。這些產(chǎn)品已經(jīng)開始在部分民用領(lǐng)域得到應(yīng)用,如用于指紋門禁,指紋考勤,指紋保管箱等。信息社會的到來,使指紋識別系統(tǒng)在身份認(rèn)證方面有著廣闊的應(yīng)用前景。
目前國內(nèi)大多采用光學(xué)按壓式和晶體電容按壓式兩種指紋傳感器,兩者共同的缺點(diǎn)是體積較大,無法應(yīng)用在體積較小的電子產(chǎn)品中。本文要介紹的是一款滑動式指紋識別模塊:TCS3C-TCD2A,它不要求用戶在驗(yàn)證時(shí)按壓指紋,而只要將手指輕輕刷過傳感器表面,傳感器便能自動對手指進(jìn)行連續(xù)的“快照”,然后這些快照被組合在一起,形成清晰的指紋影像。這種采集指紋的效果與按壓式指紋傳感器相當(dāng),但它無需用力按壓,使用更加方便。
1 TCS3C—TCD42A簡介
TCS3C-TCD42A是美國UPEK公司的產(chǎn)品(TouchStrip芯片組),其中TCS3C是—個(gè)長條狀的滑動式指紋傳感器。用于提取指紋圖像數(shù)據(jù)。TCD42A為高性能32位RISC芯片。為指紋處理和通信芯片,其內(nèi)部有4K的非易失性(NVM)內(nèi)存可供用戶存儲指紋信息。TCD42A集成了PeffectPrint算法捕獲手指滑過傳感器時(shí)的指紋數(shù)據(jù)后形成指紋圖像。該算法補(bǔ)償速度、平移、旋轉(zhuǎn)方面的變化,將其規(guī)格化為最優(yōu)質(zhì)的指紋圖像,配合其集成的PerfectMatch指紋模板提取和匹配算法,使用戶能夠獲得可靠的指紋識別效果。TCD42A還具有和上位機(jī)通信的功能,用戶按照通信協(xié)議,可開發(fā)出功能強(qiáng)大的指紋識別應(yīng)用系統(tǒng)。TCS3C和TCIM2A的實(shí)物圖如圖l所示。
TCS3C的特點(diǎn)如下:
(1)CMOS有源電容像點(diǎn)傳感技術(shù);
(2)最大手指滑動速度:20cm/S;
(3)圖像灰度:8位;
(4)圖像分辨率:508dpi;
(5)體積:17,65x 5xl 87ram;
TCD2D42A的特點(diǎn)如下:
(1)32位RISC結(jié)構(gòu);
(2)處理速度可達(dá)96 MIPS;
(3)4KB的非易失性內(nèi)存可供存儲指紋特征數(shù)據(jù);
(4)體積:lOxloxl 26 mnl;
(5)接口方式:UART和USB。
2 指紋識別系統(tǒng)構(gòu)成
電路采用Atmega48單片機(jī)作為控制核心。Atmega48是一款8位微控制器,具有高性能、低功耗的顯著特點(diǎn)。由于采用RISC精簡指令集結(jié)構(gòu),其指令集大多為單周期指令,具有高速運(yùn)行的特點(diǎn)。3V供電時(shí)。未使用內(nèi)部看門狗的情況下,Atmega48的典型掉電電流小于luA,而且該單片機(jī)在1.8V一5.5V的電壓范圍內(nèi)均能正常工作,片內(nèi)自帶4K字節(jié)的flash、256字節(jié)的E2PROM,以及512字節(jié)SRAM并內(nèi)置AD轉(zhuǎn)換器、看門狗、3個(gè)16位的定時(shí)/計(jì)數(shù)器。
Atmega48作為上位機(jī)負(fù)責(zé)和TCD42A的通信。由它下達(dá)指紋登錄、比對、刪除等命令給TCD42A。TCD42A返回結(jié)果給Atmega48,以便上位機(jī)及時(shí)給用戶提示,如LED閃爍、蜂鳴器蜂鳴、電機(jī)轉(zhuǎn)動等。指紋識別系統(tǒng)結(jié)構(gòu)框圖如圖2所示:



TCS3C與TCD42A通過一條12Pin,0.Snlnl間隔的軟排線連接,TCD42A通過一條7Pin,0.Smm間隔的軟排線和單片機(jī)連接。TCD42A的U_TXl和U_RXl分別和Atmega48的RXD和TXD連接進(jìn)行串口通訊。
由于TCD42A需要一個(gè)至少持續(xù)20ms的BREAK信號(持續(xù)的低電平)重啟,所以將Atmega48的PD4作為TCD42A的Wakeup信號。TCD42A被喚醒后,發(fā)送復(fù)位應(yīng)答幀,表示已經(jīng)可以通信了。TCD42A與單片機(jī)之間按照下面的通信協(xié)議進(jìn)行通信。在實(shí)際應(yīng)用中建議BREAK信號保持50ms以上。
3 通信協(xié)議
參照通訊網(wǎng)絡(luò)互聯(lián)的標(biāo)準(zhǔn)7層模式,TCS3C-TCD42A指紋識別模塊與上位機(jī)交互時(shí),使用4層通信模型(參見表1)。
該模塊支持串u和USB口兩種通信方式。協(xié)議的字節(jié)順序?yàn)閘ittle_endian,即低地址存放最低有效字節(jié)(LSB)。TCD42A的UART是一個(gè)標(biāo)準(zhǔn)的通用異步收,發(fā)接口,此接口讓用戶進(jìn)行指令發(fā)送和通訊。接口默認(rèn)的通信速率為9600bps,根據(jù)需要,還可以設(shè)置為19200bps、38400bps、57600bps、115200bps、230400bps。
3.1 字節(jié)填充與字節(jié)替換
在此通信協(xié)議中,一些字符被保留為特殊用途,如XON/XOFF,DLE。STX除幀頭(Ox02)不需要特殊處理外,不論上位機(jī)還是模塊在發(fā)送數(shù)據(jù)前,均需對字符XON、XOFF、DLE、STX作字節(jié)填充。填充規(guī)則如表2所示。
和字節(jié)填充相反,上位機(jī)或模塊在收到數(shù)據(jù)后,除第一個(gè)字節(jié)(0x02)不需要處理外,對于特殊的2個(gè)字符要作字節(jié)替換。字節(jié)替換規(guī)則為字節(jié)填充的反變換。
3.2 鏈路層
鏈路層的幀格式如下所示:
STX+Header+Data+CRC
STX是—個(gè)字節(jié)(Ox02),是幀的開始標(biāo)志。
Header的長度為3個(gè)字節(jié),其中:
Header:
Bits 0-3:幀類型,共有12中數(shù)據(jù)類型,如數(shù)據(jù)幀、請求等待時(shí)間擴(kuò)展幀等;
Bits 4-7:保留,必須置為O;
Header:
Bits 0-2:數(shù)據(jù)長度高位(參見Header[2]);
Bit 3:保留,必須置為0;
Bits 4-7:為數(shù)據(jù)幀的模16計(jì)數(shù),系統(tǒng)復(fù)位后初始值為0,其他類型幀時(shí)將其置為0。
Header:數(shù)據(jù)長度低位,和Header[1]里的3位組成ll位的域。
Data:傳輸層和應(yīng)用層數(shù)據(jù),在字節(jié)填充前最大長度為2047個(gè)字節(jié)。
CRC的長度為2個(gè)字節(jié),其值是對Header和Data的字節(jié)在進(jìn)行字節(jié)填充前作CRC校驗(yàn)得到的。CRC類型為依照CCI'VI\"V,41標(biāo)準(zhǔn)的CRCl6。特別要說明的是,若CRC的2個(gè)字節(jié)中出現(xiàn)了上述的特殊字符,在發(fā)送數(shù)據(jù)時(shí)也要進(jìn)行字節(jié)填充。
3.3 傳輸層
傳輸層的第一包數(shù)據(jù)格式如下所示:
Header+Packet+Length+Data
Header占1個(gè)字節(jié),它的各位功能如表3所示。
Bit 4為1時(shí)表示此幀為傳輸層服務(wù)幀;
Bit 4為0時(shí)表示此幀不是傳輸層服務(wù)幀。
Packet Length:此為可選擇的2個(gè)字節(jié),它和來自Header的2位合起來表示應(yīng)用層的長度;
Data:應(yīng)用層的數(shù)據(jù)。
3.4 應(yīng)用層
應(yīng)用層的幀格式如下所示:
Tag+Data
Tag的長度為4個(gè)字節(jié),在此描述為32位的整型值,其中:
Bits 28-31:
(CL_COMMAND)0000:表示此為上位機(jī)要求模塊執(zhí)行命令;
(CL RESPONSE)0001:表示模塊對上位機(jī)命令的響應(yīng);
(CL_GUI_CALLBACK)0010:表示此為模塊的GUI回調(diào)包;
(CL_GUI_RESPONSE)0011:表示上位機(jī)對GUI回調(diào)包的響應(yīng)。
Tag的剩余28位根據(jù)高4位的不同而具有不同的意義:
若高4位是CL COMMAND,則Bits 16-27為命令碼,其余位為0;
若高4位是CL_RESPONSE,則Bits 16-27為命令碼,Bits0-15為錯(cuò)誤,狀態(tài)碼,狀態(tài)碼為0表示成功。
高4位是0010或0011時(shí),Tag的其他位均為0。
3.5 具體數(shù)據(jù)包分析示例
若上位機(jī)發(fā)送列舉所有指紋命令給指紋識別模塊,實(shí)際發(fā)送的數(shù)據(jù)如下:
02 00 00 07 28 04 00 00 00 0D 10 03 FC 6A
具體數(shù)據(jù)意義分析如表4所示:
4 軟件設(shè)計(jì)





上位機(jī)的軟件開發(fā)采用IAR公司的IAR EmbeddedWorkbench V4,21 for Atmel AVR.它集成了開發(fā)嵌入式系統(tǒng)所需要的文件編譯、項(xiàng)目管理、鏈接和調(diào)試工具。IAR EmbeddedWorkbench系列適用于開發(fā)基于8位、16位、32位微處理器的嵌入式系統(tǒng),其集成開發(fā)環(huán)境具有統(tǒng)一的界面,為用戶提供了一個(gè)易學(xué)、易用的開發(fā)平臺。IAR公司提出了“不同架構(gòu),惟一解決方案”的理念,用戶可以針對多種不同的耳標(biāo)處理器,在相同的集成開發(fā)環(huán)境中進(jìn)行基于不同CPU的嵌入式系統(tǒng)程序開發(fā),有效地提高了工作效率,節(jié)省了工作時(shí)間。IAR一貫使用精簡的優(yōu)化技術(shù),其生成的可執(zhí)行代碼的數(shù)量遠(yuǎn)遠(yuǎn)少于其他同類編譯器生成代碼的數(shù)量,可以運(yùn)行于更小尺寸、更低成本的處理器上,從而降低產(chǎn)品的開發(fā)成本。
4.1 主程序
軟件程序包括主程序和中斷服務(wù)程序。采用模塊化設(shè)計(jì)方法,各模塊之間相對獨(dú)立,這樣可以使得程序結(jié)構(gòu)清晰,便于今后進(jìn)一步擴(kuò)展系統(tǒng)的功能。主程序流程圖如圖3所示。其中初始化完成開中斷、設(shè)置定時(shí)器和串口、初始化驅(qū)動集成電路、指紋識別模塊復(fù)位等工作。電量檢測及處理模塊進(jìn)行電池電量檢測,若電池電量不足發(fā)出報(bào)警聲音以提示用戶更換電池。程序根據(jù)用戶按下的登錄、驗(yàn)證或刪除鍵由通信處理模塊進(jìn)行不同的處理。若用戶在按下登錄或者驗(yàn)證鍵后不作任何操作,程序在達(dá)到最大等待時(shí)間(10S)后將自動關(guān)機(jī)。蜂鳴器提示模塊、LED指示模塊將根據(jù)通信處理模塊的結(jié)果提示用戶操作結(jié)果。電機(jī)驅(qū)動模塊用于驅(qū)動電機(jī),在等待2s后自動關(guān)機(jī)。
為了能讓單片機(jī)及時(shí)響應(yīng)和控制指紋識別模塊,盡量減少通信所占用的CPU時(shí)間,筆者在設(shè)計(jì)單片機(jī)通信程序時(shí)。將通信程序分為接收中斷處理模塊和通信處理模塊2部分,并將這2個(gè)模塊巧妙地進(jìn)行組合,從而構(gòu)成整個(gè)單片機(jī)的通信程序。
4.2 接收中斷處理模塊
接收中斷處理模塊主要負(fù)責(zé)接收指紋識別模塊發(fā)送到單片機(jī)接收緩沖區(qū)的數(shù)據(jù),字節(jié)替換在此模塊內(nèi)進(jìn)行。單片機(jī)接收到規(guī)定的字符數(shù)后,置接收完畢標(biāo)志,以表明接收緩沖區(qū)中有待處理的數(shù)據(jù)并請求通信處理模塊對其進(jìn)行處理。接收中斷處理模塊流程圖如圖4所示。
4.3 通信處理模塊
通信處理模塊放在主程序中調(diào)用,根據(jù)用戶的按鍵不同,向指紋識別模塊發(fā)送不同的命令。發(fā)送的命令主要有列舉指紋用戶、登錄指紋、驗(yàn)證指紋、刪除指紋等。特別要說明的是由于程序規(guī)定最大用戶數(shù)為10,所以在登錄指紋用戶前要先向指紋識別模塊發(fā)送列舉指紋用戶命令,只有在指紋用戶數(shù)小于最大用戶數(shù)時(shí)才可以登錄。由于此系統(tǒng)用于指紋保管箱,所以在驗(yàn)證用戶也需要列舉用戶。如果指紋識別模塊內(nèi)沒有指紋用戶的話,任何人都可以開箱(指紋保管箱在初始狀態(tài)下是沒有指紋用戶的,所以任何人都可以開箱)。
通信處理模塊負(fù)責(zé)向指紋識別模塊發(fā)送命令和響應(yīng)來自模塊的數(shù)據(jù)包。串口發(fā)送采用查詢方式。筆者認(rèn)為此處沒有必要采用中斷,因?yàn)槌绦虻拈_銷是差不多的。在發(fā)送數(shù)據(jù)之前,要先對數(shù)據(jù)進(jìn)行CRC校驗(yàn)和字節(jié)填充。通信處理模塊在接收到指紋識別模塊送來的一串完整數(shù)據(jù)后,進(jìn)行CRC校驗(yàn),在通過CRC校驗(yàn)后根據(jù)不同的數(shù)據(jù)作出不同的響應(yīng)。若超時(shí)沒有收到數(shù)據(jù)或者CRC校驗(yàn)錯(cuò)誤,則通信處理模塊重發(fā)命令或者響應(yīng)幀。
指紋登錄時(shí)用戶至少需要在指紋傳感器上劃三次指紋,上位機(jī)控制LED提示用戶。指紋識別模塊對三次錄入的指紋綜合處理提取特征,生成指紋模板存于TC42A。如果用戶的指紋質(zhì)量不好。則手指劃動次數(shù)會超過3次。為了提高登錄的成功率,程序沒有限制手指劃動的次數(shù),只要模塊端不上傳登錄失敗數(shù)據(jù)包,用戶可一直登錄,直到超過最大等待時(shí)間。
5 結(jié)束語
本文給出了單片機(jī)與指紋識別模塊之間進(jìn)行異步串行通信的解決方案。此方案在實(shí)際使用過程中,運(yùn)行穩(wěn)定,通信性能良好。從整個(gè)系統(tǒng)的設(shè)計(jì)可以看出:基于TCS3C-TCD42A的指紋識別模塊采用Atmega48作為上位機(jī),具有體積小巧、價(jià)格低廉的特點(diǎn)。目前該系統(tǒng)已經(jīng)成功應(yīng)用于指紋保管箱產(chǎn)品中。本文提出的基于TCS3C-TCD42A的指紋識別系統(tǒng)是把采集、處理、控制于一身的系統(tǒng),可以做得很小,也適合用于防盜門、高檔的汽車門、汽車遙控器、手機(jī)、PDA等產(chǎn)品中。