指紋識(shí)別作為生物特征識(shí)別的一種,,有其不可比擬的優(yōu)點(diǎn),。由于可以隨身攜帶這種特殊的“印章”,所以受到越來(lái)越多人的重視,。本系統(tǒng)使用TI的TMS320VC5402(以下簡(jiǎn)稱(chēng)5402)作為核心,。DSP與單片機(jī)相比,,多用于算法比較復(fù)雜,乘加運(yùn)算量比較大的場(chǎng)合,。該芯片為一款定點(diǎn)的DSP,,它具有高達(dá)100MIPS的運(yùn)算能力,同時(shí)具有優(yōu)化的CPU結(jié)構(gòu)和一系列的智能外設(shè),。下面著重討論基于該芯片的系統(tǒng)設(shè)計(jì),。
1 總體設(shè)計(jì)
指紋系統(tǒng)總體設(shè)計(jì)方案如圖1所示。
該系統(tǒng)是由指紋采集儀,、FPGA,、SRAM和Flash等硬件組成。RS232用于數(shù)據(jù)傳輸,,PC機(jī)可以通過(guò)該接口得到指紋特征數(shù)據(jù),;Flash存儲(chǔ)指紋信息庫(kù)、LCD用的字符和DSP程序,;FPGA在DSP的控制下從取指器中取出圖放入SRAM中,;小鍵盤(pán)用于用戶(hù)輸入ID號(hào)碼,增強(qiáng)該系統(tǒng)的安全等級(jí),。
1.1 存儲(chǔ)空間的軟硬件設(shè)計(jì)
本系統(tǒng)要訪(fǎng)問(wèn)的存儲(chǔ)器有三個(gè):DSP內(nèi)部DARAM(16K字,,用于存放常量和變量的數(shù)據(jù)空間)、SRAM和Flash,。因?yàn)?402有20根地址線(xiàn)可以用來(lái)對(duì)程序空間尋址,,所以有1M字節(jié)的尋址空間,利用高地址線(xiàn)A
19來(lái)區(qū)分Flash和SRAM,。其中SRAM是BootLoader后程序運(yùn)行的空間,,這樣就把Flash放在高地址上去了。5402的數(shù)據(jù)尋址空間僅為64K,,所以要進(jìn)行分頁(yè)擴(kuò)展,。為了避免和DARAM的訪(fǎng)問(wèn)沖突,不能使用64K一頁(yè),。因?yàn)?4K中低地址的16K實(shí)際上不能訪(fǎng)問(wèn),,它優(yōu)先被64K中低地址的16K實(shí)現(xiàn)上不能訪(fǎng)問(wèn),它無(wú)被DARAM訪(fǎng)問(wèn),,所以定為32K的一數(shù)據(jù)頁(yè)。分配一個(gè)I/O地址,,而后通過(guò)I/O地址的譯碼對(duì)74LS273進(jìn)行使能控制,,最后鎖存I/O的數(shù)據(jù)作數(shù)據(jù)頁(yè)。當(dāng)對(duì)數(shù)據(jù)空間進(jìn)行訪(fǎng)問(wèn)時(shí),,應(yīng)分為以下幾步:
?、俳馕鲈摰刂?,進(jìn)行分割。前(低)15位為頁(yè)內(nèi)地址,,后(高)6位為頁(yè)地址,。
②判斷頁(yè)地址是否為0,。如果為0,,則說(shuō)明訪(fǎng)問(wèn)DARAM,直接使用訪(fǎng)問(wèn)數(shù)據(jù)的指令,;需要的16位地址就是前15位的地址,、高位補(bǔ)零,并結(jié)束,。
?、郯秧?yè)地址用PORTW命令送到寄存器(所分配的I/O空間地址)里,頁(yè)地址也就在SRAM的高地址線(xiàn)上了,。
?、茉偈褂迷L(fǎng)問(wèn)數(shù)據(jù)的指令,需要的16位地址就是前15位的地址,、高位補(bǔ)零,。
對(duì)存儲(chǔ)器的管理,需要編寫(xiě)一定量的程序,??梢栽O(shè)置一個(gè)全局變量存儲(chǔ)頁(yè)地址。由于擴(kuò)展頁(yè)僅為32K,,大于32K的數(shù)組是開(kāi)辟不出來(lái)的,,所以使用鏈表。需要注意的是釋放空間時(shí),,把相鄰的未使用的空間盡量連接成一大塊,,同時(shí)需要一個(gè)接一個(gè)地把用過(guò)的堆棧拷貝到堆空間的尾部,,使自己空間聚合成一個(gè)大塊,。
圖2、圖3分別為外部程序擴(kuò)展和數(shù)據(jù)空間擴(kuò)展示意圖,。
1.2 RS232通信接口軟硬件設(shè)計(jì)
該系統(tǒng)使用MAX3110E連接DSP與PC機(jī),,通過(guò)軟件控制分頻比可獲得通用的300baud~230kbaud的波特率。MAX3110E內(nèi)部UART與RS232收發(fā)器能夠獨(dú)立工作,。McBSP的時(shí)鐘停止模式可以兼容SPI主-從協(xié)議,。所謂McBSP的時(shí)鐘停止模式是指其時(shí)鐘會(huì)在每次數(shù)據(jù)傳輸結(jié)束時(shí)停止,并在下次數(shù)據(jù)傳輸開(kāi)始時(shí)立即啟動(dòng)或延半個(gè)周期再啟動(dòng)。其接收器和發(fā)送器是同步的,,即CLKX和FSX分別與CLKR和FSR相連,;在傳輸過(guò)程中,CLKX和FSX又分別用做SPI的移位時(shí)鐘SCK和從方使能SS,,可以是輸出(主方),,也可以輸入(從方)。其McBSP初始化編程應(yīng)遵守以下幾個(gè)步驟:
?、賹PCR中的XRST,、RRST置為0,處于復(fù)位狀態(tài),。
?、贛cBSP保持復(fù)位的狀態(tài)下,設(shè)置有關(guān)的寄存器為需要的值,。由于SPI協(xié)議要求McBSP在移位輸出數(shù)據(jù)之前,,F(xiàn)SX信號(hào)必須由DXR->XSR產(chǎn)生FSX,所以XCR寄存器中XDATALY位必須設(shè)置為1,。
?、墼O(shè)置SPCR->GRST為1,采樣率發(fā)生器退出復(fù)位狀態(tài),,開(kāi)始工作,。
④等待兩個(gè)時(shí)鐘周期,,以確保McBSP在初始化過(guò)程中內(nèi)部能夠正確地同步,。
而后,配置MAX3110E的波特率和發(fā)送波形,,發(fā)送數(shù)據(jù)時(shí)根據(jù)MAX3110E的數(shù)據(jù)手冊(cè)拼裝成一個(gè)16位的字進(jìn)行發(fā)送,。接收通過(guò)DSP的Int0中斷進(jìn)行處理。
1.3 總線(xiàn)控制和驅(qū)動(dòng)
本系統(tǒng)中總線(xiàn)有兩種:數(shù)據(jù)總線(xiàn)和地址總線(xiàn),。數(shù)據(jù)總線(xiàn)進(jìn)行數(shù)據(jù)交換,,地址總線(xiàn)進(jìn)行尋址。因?yàn)镈SP的數(shù)據(jù)總線(xiàn)是3.3V的高電平邏輯值,,可能出現(xiàn)不能驅(qū)動(dòng)外部5V的邏輯電平的情況,;而且連接在動(dòng)能力不足。因此,,需要對(duì)總線(xiàn),,特別是數(shù)據(jù)總線(xiàn)進(jìn)行加強(qiáng)驅(qū)動(dòng)能力的設(shè)計(jì)。其中數(shù)據(jù)總線(xiàn)使用SN74LVTH16245來(lái)進(jìn)行驅(qū)動(dòng)向驅(qū)動(dòng),;地址總線(xiàn)是單向的,,沒(méi)有方向的控制,也沒(méi)有使能的控制,,使用SN74LVTH16244單向驅(qū)動(dòng)器就可以了,。對(duì)于數(shù)據(jù)總線(xiàn)的控制,按照所邏輯合理使用了DSP_MSTRB,。DSP_IOSTRB,、R/W就可以完成了。
1.4 鍵盤(pán)與LCD接口的硬件設(shè)計(jì)
鍵盤(pán)和LCD都是I/O器件,,分配兩個(gè)I/O空間的地址,,通過(guò)對(duì)地址的譯碼產(chǎn)生使能控制LCD和鍵盤(pán)。鍵盤(pán)上有12個(gè)按鍵,,用10kΩ電阻拉高,,同時(shí)使用與邏輯連接這12根線(xiàn),輸出的邏輯電平接DSP中斷Int2,,在中斷服務(wù)程序中使用PORTR命令讀入鍵值,。LCD用于顯示界面信息。本系統(tǒng)使用LC1611字符點(diǎn)陣模塊,。
1.5 指紋圖像的獲取
采用Altera公司的Maxplus II軟件進(jìn)行VHDL語(yǔ)言編程,。按照一定的時(shí)序,把指紋圖像放大SRAM的固定地址中,,這一部分調(diào)試有些麻煩,,可以放在最后做,而圖像的獲取可使用CCS2.0下的file->data->load把圖像文件放入指定的內(nèi)存區(qū)域,。此圖像文件為CCS數(shù)據(jù)文件,,可以編寫(xiě)一段C程序把BMP文件轉(zhuǎn)換成CCS文件。另一種比較方便的方法是用DSP編寫(xiě)一個(gè)小程序,,使用fopen(),、fread()等函數(shù)把圖像讀入內(nèi)存,然后使用file->data->save保存成CCS文件,。
2 軟件設(shè)計(jì)
2.1 主程序流程
主流程就是要實(shí)現(xiàn)把各部分的程序連接成一個(gè)有機(jī)的整體,,并能夠通過(guò)液晶顯示和小鍵盤(pán)響應(yīng)實(shí)現(xiàn)和用戶(hù)的交互。所以,,它的任務(wù)就是能夠響應(yīng)小鍵盤(pán),,根據(jù)不同的鍵值執(zhí)行不同的操作,同時(shí)顯示不同的頁(yè)面,。系統(tǒng)主流程如圖4所示,。
2.2 鍵盤(pán)中斷程序
5402中與中斷有關(guān)的寄存器有三個(gè):IFR、IMR,、PMST,。在DspInitial()函數(shù)中,首先要設(shè)置好這些寄存器,而后在中斷程序中讀入鍵值,。為了防止誤觸發(fā),,在中斷的一開(kāi)始延時(shí)3ms。其核心代碼如下:
ioport unsigned char port0000;
volatile unsigned int* IMR=(volatile unsigned int *) 0x0000;
……
volatile unsigned int* PMST=(volatile unsigned int *) 0x001D;
main(){
DspInitial();
……
}
interrupt void isr_int0(){
delay3ms();
KEY=port0000&0x0FFF;
Switch(KEY)
……
}
2.3 BootLoader程序設(shè)計(jì)
該系統(tǒng)為最小系統(tǒng),,需要脫離開(kāi)發(fā)系統(tǒng)運(yùn)行,,因此須進(jìn)行BootLoader設(shè)計(jì)。在系統(tǒng)上電以后自動(dòng)把程序和數(shù)據(jù)從外部存儲(chǔ)器Flash讀SRAM中,,但問(wèn)題是用戶(hù)程序超過(guò)了32K,,所以必須采用以下特殊的BOOT方法。
?、賰?nèi)部BOOT,。利用片內(nèi)的BOOT程序?qū)⒆约壕幹频腂OOT程序從Flash移至內(nèi)部的RAM中。
?、谟脩?hù)BOOT,。內(nèi)部BOOT完成后,開(kāi)始執(zhí)行自己的BOOT程序,。利用DSP的擴(kuò)展尋址方法,,自已編制的BOOT編程中從Flash讀取代碼。
?、塾脩?hù)BOOT完成后,,跳至用戶(hù)程序開(kāi)始運(yùn)行。
2.4 指紋識(shí)別核心算法程序
本系統(tǒng)使用的指紋算法主要分為五部分,,其算法的可靠性已經(jīng)isual C++ 6.0進(jìn)行了驗(yàn)證,,具體算法如下:
①背景分離,。采用標(biāo)準(zhǔn)差閾值跟蹤法,,圖像的指紋部分是由黑白相同的紋理組成的,灰度變化很大,,具有較大的標(biāo)準(zhǔn)差,;而背景部分灰度分布比較平坦,標(biāo)準(zhǔn)差小,,因此計(jì)算以各點(diǎn)為中心的一組像素的標(biāo)準(zhǔn)差,,當(dāng)標(biāo)準(zhǔn)差大于某一門(mén)限時(shí),就可以確定該點(diǎn)為前景,,否則為背景,。
②計(jì)算方向圖,。采用基于法線(xiàn)向量的方法,,其中還涉及到方向場(chǎng)的平滑,。
③方向?yàn)V波,。設(shè)計(jì)一個(gè)水平模板,,然后將水平模板旋轉(zhuǎn)到需增強(qiáng)的方向進(jìn)行濾波。
?、芷娈慄c(diǎn)檢測(cè),。區(qū)分出奇異點(diǎn),,如核形(core),、三角形(delta)、渦輪形(whorl),。
?、萏卣鼽c(diǎn)提取。采用脊跟蹤法,,其基本思想是直接對(duì)圖像進(jìn)行脊線(xiàn)跟蹤,,在跟蹤過(guò)程中檢測(cè)特征點(diǎn)。以上便是所采用指紋算法的核心思想,。
在DSP編程中把它分成五個(gè)任務(wù)模塊,,每一個(gè)模塊都必須注意頁(yè)面寄存器的值,如果程序僅在SRAM中運(yùn)行會(huì)浪費(fèi)大量的時(shí)鐘,,所以把部分程序和數(shù)據(jù)放入DSP的內(nèi)部,。根據(jù)自己編程的體會(huì),程序和數(shù)據(jù)的一次連續(xù)處理不會(huì)超過(guò)64K,,所以可以把核心的程序常駐5402內(nèi)1K的空間,,再留有7~8K的空間調(diào)用所需的程序,余下的7K用于存放數(shù)據(jù),。但考慮到該方法程序編寫(xiě)的復(fù)雜性,,僅在圖像濾波中使用,因?yàn)闉V波方法簡(jiǎn)單而有規(guī)律,。為了提高效率,,可以開(kāi)辟兩個(gè)存儲(chǔ)區(qū)(PING-PONG型),當(dāng)一塊用于DMA傳輸時(shí),,另一塊讓DSP進(jìn)行計(jì)算,。最后一點(diǎn),因?yàn)?402是定點(diǎn)的,,所以要對(duì)整個(gè)系統(tǒng)進(jìn)行定標(biāo),。
3 系統(tǒng)調(diào)試方法
設(shè)計(jì)并加工好印制電路板后,就進(jìn)入了硬件調(diào)試階段,。首先應(yīng)對(duì)電路板作細(xì)致的常規(guī)檢查,,防止短路和斷路情況的發(fā)生,。加電后,檢查晶體是否振蕩,,復(fù)位是否正確可靠,,而后用示波器檢查5402的輸出時(shí)鐘CLKOUT是否按照指定時(shí)鐘模式工作。在作完這些檢查賓,,就可以進(jìn)入系統(tǒng)硬件調(diào)試階段,。在硬件仿真時(shí),首先要配置目標(biāo)系統(tǒng)的存儲(chǔ)器映像,,這是通過(guò)設(shè)置仿真器命令文件實(shí)現(xiàn)的,。可以在仿真調(diào)試軟件目錄下改寫(xiě)emuinit.cmd,,使之每次啟動(dòng)仿真器時(shí)自動(dòng)加載,,也可以在啟動(dòng)仿真器后手動(dòng)加載命令文件以初始化目標(biāo)存儲(chǔ)器映像。一般而言,,仿真器存儲(chǔ)器映像與連接器存儲(chǔ)器映像應(yīng)一致,。對(duì)SRAM的調(diào)試的基本思想是,首先對(duì)SRAM的兩具單元初始化為兩個(gè)不同的值,,而后調(diào)試的主程序不斷交替這兩個(gè)單元的數(shù)值,。具體方法是從一個(gè)單元讀出數(shù)據(jù)寫(xiě)入另一個(gè)單元,由累加器作為傳遞單元,。使用Debugger軟件,,查看相應(yīng)的SRAM單元,若確實(shí)將照設(shè)定交替變化,,則表明該部分沒(méi)有問(wèn)題,。對(duì)于鍵盤(pán)和LCD的調(diào)試,其方法不難,,這里不再詳細(xì)闡述,。
結(jié)語(yǔ)
該系統(tǒng)具有很強(qiáng)的實(shí)用性,充分體現(xiàn)了DSP強(qiáng)大的數(shù)值運(yùn)算能力,;但該系統(tǒng)僅實(shí)現(xiàn)了軟硬件的初步研制與開(kāi)發(fā),,
離產(chǎn)品化還有一段距離,還有許多工作要做,。