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



TCS3C與TCD42A通過(guò)一條12Pin,0.Snlnl間隔的軟排線(xiàn)連接,TCD42A通過(guò)一條7Pin,0.Smm間隔的軟排線(xiàn)和單片機(jī)連接。TCD42A的U_TXl和U_RXl分別和Atmega48的RXD和TXD連接進(jìn)行串口通訊。
由于TCD42A需要一個(gè)至少持續(xù)20ms的BREAK信號(hào)(持續(xù)的低電平)重啟,所以將Atmega48的PD4作為T(mén)CD42A的Wakeup信號(hào)。TCD42A被喚醒后,發(fā)送復(fù)位應(yīng)答幀,表示已經(jīng)可以通信了。TCD42A與單片機(jī)之間按照下面的通信協(xié)議進(jìn)行通信。在實(shí)際應(yīng)用中建議BREAK信號(hào)保持50ms以上。
3 通信協(xié)議
參照通訊網(wǎng)絡(luò)互聯(lián)的標(biāo)準(zhǔn)7層模式,TCS3C-TCD42A指紋識(shí)別模塊與上位機(jī)交互時(shí),使用4層通信模型(參見(jiàn)表1)。
該模塊支持串u和USB口兩種通信方式。協(xié)議的字節(jié)順序?yàn)閘ittle_endian,即低地址存放最低有效字節(jié)(LSB)。TCD42A的UART是一個(gè)標(biāo)準(zhǔn)的通用異步收,發(fā)接口,此接口讓用戶(hù)進(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ù)前,均需對(duì)字符XON、XOFF、DLE、STX作字節(jié)填充。填充規(guī)則如表2所示。
和字節(jié)填充相反,上位機(jī)或模塊在收到數(shù)據(jù)后,除第一個(gè)字節(jié)(0x02)不需要處理外,對(duì)于特殊的2個(gè)字符要作字節(jié)替換。字節(jié)替換規(guī)則為字節(jié)填充的反變換。
3.2 鏈路層
鏈路層的幀格式如下所示:
STX+Header+Data+CRC
STX是—個(gè)字節(jié)(Ox02),是幀的開(kāi)始標(biāo)志。
Header的長(zhǎng)度為3個(gè)字節(jié),其中:
Header:
Bits 0-3:幀類(lèi)型,共有12中數(shù)據(jù)類(lèi)型,如數(shù)據(jù)幀、請(qǐng)求等待時(shí)間擴(kuò)展幀等;
Bits 4-7:保留,必須置為O;
Header:
Bits 0-2:數(shù)據(jù)長(zhǎng)度高位(參見(jiàn)Header[2]);
Bit 3:保留,必須置為0;
Bits 4-7:為數(shù)據(jù)幀的模16計(jì)數(shù),系統(tǒng)復(fù)位后初始值為0,其他類(lèi)型幀時(shí)將其置為0。
Header:數(shù)據(jù)長(zhǎng)度低位,和Header[1]里的3位組成ll位的域。
Data:傳輸層和應(yīng)用層數(shù)據(jù),在字節(jié)填充前最大長(zhǎng)度為2047個(gè)字節(jié)。
CRC的長(zhǎng)度為2個(gè)字節(jié),其值是對(duì)Header和Data的字節(jié)在進(jìn)行字節(jié)填充前作CRC校驗(yàn)得到的。CRC類(lèi)型為依照CCI'VI\"V,41標(biāo)準(zhǔn)的CRCl6。特別要說(shuō)明的是,若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é),它和來(lái)自Header的2位合起來(lái)表示應(yīng)用層的長(zhǎng)度;
Data:應(yīng)用層的數(shù)據(jù)。
3.4 應(yīng)用層
應(yīng)用層的幀格式如下所示:
Tag+Data
Tag的長(zhǎng)度為4個(gè)字節(jié),在此描述為32位的整型值,其中:
Bits 28-31:
(CL_COMMAND)0000:表示此為上位機(jī)要求模塊執(zhí)行命令;
(CL RESPONSE)0001:表示模塊對(duì)上位機(jī)命令的響應(yīng);
(CL_GUI_CALLBACK)0010:表示此為模塊的GUI回調(diào)包;
(CL_GUI_RESPONSE)0011:表示上位機(jī)對(duì)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í)別模塊,實(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ī)的軟件開(kāi)發(fā)采用IAR公司的IAR EmbeddedWorkbench V4,21 for Atmel AVR.它集成了開(kāi)發(fā)嵌入式系統(tǒng)所需要的文件編譯、項(xiàng)目管理、鏈接和調(diào)試工具。IAR EmbeddedWorkbench系列適用于開(kāi)發(fā)基于8位、16位、32位微處理器的嵌入式系統(tǒng),其集成開(kāi)發(fā)環(huán)境具有統(tǒng)一的界面,為用戶(hù)提供了一個(gè)易學(xué)、易用的開(kāi)發(fā)平臺(tái)。IAR公司提出了“不同架構(gòu),惟一解決方案”的理念,用戶(hù)可以針對(duì)多種不同的耳標(biāo)處理器,在相同的集成開(kāi)發(fā)環(huán)境中進(jìn)行基于不同CPU的嵌入式系統(tǒng)程序開(kāi)發(fā),有效地提高了工作效率,節(jié)省了工作時(shí)間。IAR一貫使用精簡(jiǎn)的優(yōu)化技術(shù),其生成的可執(zhí)行代碼的數(shù)量遠(yuǎn)遠(yuǎn)少于其他同類(lèi)編譯器生成代碼的數(shù)量,可以運(yùn)行于更小尺寸、更低成本的處理器上,從而降低產(chǎn)品的開(kāi)發(fā)成本。
4.1 主程序
軟件程序包括主程序和中斷服務(wù)程序。采用模塊化設(shè)計(jì)方法,各模塊之間相對(duì)獨(dú)立,這樣可以使得程序結(jié)構(gòu)清晰,便于今后進(jìn)一步擴(kuò)展系統(tǒng)的功能。主程序流程圖如圖3所示。其中初始化完成開(kāi)中斷、設(shè)置定時(shí)器和串口、初始化驅(qū)動(dòng)集成電路、指紋識(shí)別模塊復(fù)位等工作。電量檢測(cè)及處理模塊進(jìn)行電池電量檢測(cè),若電池電量不足發(fā)出報(bào)警聲音以提示用戶(hù)更換電池。程序根據(jù)用戶(hù)按下的登錄、驗(yàn)證或刪除鍵由通信處理模塊進(jìn)行不同的處理。若用戶(hù)在按下登錄或者驗(yàn)證鍵后不作任何操作,程序在達(dá)到最大等待時(shí)間(10S)后將自動(dòng)關(guān)機(jī)。蜂鳴器提示模塊、LED指示模塊將根據(jù)通信處理模塊的結(jié)果提示用戶(hù)操作結(jié)果。電機(jī)驅(qū)動(dòng)模塊用于驅(qū)動(dòng)電機(jī),在等待2s后自動(dòng)關(guān)機(jī)。
為了能讓單片機(jī)及時(shí)響應(yīng)和控制指紋識(shí)別模塊,盡量減少通信所占用的CPU時(shí)間,筆者在設(shè)計(jì)單片機(jī)通信程序時(shí)。將通信程序分為接收中斷處理模塊和通信處理模塊2部分,并將這2個(gè)模塊巧妙地進(jìn)行組合,從而構(gòu)成整個(gè)單片機(jī)的通信程序。
4.2 接收中斷處理模塊
接收中斷處理模塊主要負(fù)責(zé)接收指紋識(shí)別模塊發(fā)送到單片機(jī)接收緩沖區(qū)的數(shù)據(jù),字節(jié)替換在此模塊內(nèi)進(jìn)行。單片機(jī)接收到規(guī)定的字符數(shù)后,置接收完畢標(biāo)志,以表明接收緩沖區(qū)中有待處理的數(shù)據(jù)并請(qǐng)求通信處理模塊對(duì)其進(jìn)行處理。接收中斷處理模塊流程圖如圖4所示。
4.3 通信處理模塊
通信處理模塊放在主程序中調(diào)用,根據(jù)用戶(hù)的按鍵不同,向指紋識(shí)別模塊發(fā)送不同的命令。發(fā)送的命令主要有列舉指紋用戶(hù)、登錄指紋、驗(yàn)證指紋、刪除指紋等。特別要說(shuō)明的是由于程序規(guī)定最大用戶(hù)數(shù)為10,所以在登錄指紋用戶(hù)前要先向指紋識(shí)別模塊發(fā)送列舉指紋用戶(hù)命令,只有在指紋用戶(hù)數(shù)小于最大用戶(hù)數(shù)時(shí)才可以登錄。由于此系統(tǒng)用于指紋保管箱,所以在驗(yàn)證用戶(hù)也需要列舉用戶(hù)。如果指紋識(shí)別模塊內(nèi)沒(méi)有指紋用戶(hù)的話(huà),任何人都可以開(kāi)箱(指紋保管箱在初始狀態(tài)下是沒(méi)有指紋用戶(hù)的,所以任何人都可以開(kāi)箱)。
通信處理模塊負(fù)責(zé)向指紋識(shí)別模塊發(fā)送命令和響應(yīng)來(lái)自模塊的數(shù)據(jù)包。串口發(fā)送采用查詢(xún)方式。筆者認(rèn)為此處沒(méi)有必要采用中斷,因?yàn)槌绦虻拈_(kāi)銷(xiāo)是差不多的。在發(fā)送數(shù)據(jù)之前,要先對(duì)數(shù)據(jù)進(jìn)行CRC校驗(yàn)和字節(jié)填充。通信處理模塊在接收到指紋識(shí)別模塊送來(lái)的一串完整數(shù)據(jù)后,進(jìn)行CRC校驗(yàn),在通過(guò)CRC校驗(yàn)后根據(jù)不同的數(shù)據(jù)作出不同的響應(yīng)。若超時(shí)沒(méi)有收到數(shù)據(jù)或者CRC校驗(yàn)錯(cuò)誤,則通信處理模塊重發(fā)命令或者響應(yīng)幀。
指紋登錄時(shí)用戶(hù)至少需要在指紋傳感器上劃三次指紋,上位機(jī)控制LED提示用戶(hù)。指紋識(shí)別模塊對(duì)三次錄入的指紋綜合處理提取特征,生成指紋模板存于TC42A。如果用戶(hù)的指紋質(zhì)量不好。則手指劃動(dòng)次數(shù)會(huì)超過(guò)3次。為了提高登錄的成功率,程序沒(méi)有限制手指劃動(dòng)的次數(shù),只要模塊端不上傳登錄失敗數(shù)據(jù)包,用戶(hù)可一直登錄,直到超過(guò)最大等待時(shí)間。
5 結(jié)束語(yǔ)
本文給出了單片機(jī)與指紋識(shí)別模塊之間進(jìn)行異步串行通信的解決方案。此方案在實(shí)際使用過(guò)程中,運(yùn)行穩(wěn)定,通信性能良好。從整個(gè)系統(tǒng)的設(shè)計(jì)可以看出:基于TCS3C-TCD42A的指紋識(shí)別模塊采用Atmega48作為上位機(jī),具有體積小巧、價(jià)格低廉的特點(diǎn)。目前該系統(tǒng)已經(jīng)成功應(yīng)用于指紋保管箱產(chǎn)品中。本文提出的基于TCS3C-TCD42A的指紋識(shí)別系統(tǒng)是把采集、處理、控制于一身的系統(tǒng),可以做得很小,也適合用于防盜門(mén)、高檔的汽車(chē)門(mén)、汽車(chē)遙控器、手機(jī)、PDA等產(chǎn)品中。