李 多,葉 樺,2*
(1.東南大學自動化學院,南京210096;2.復雜工程系統測量與控制教育部重點實驗室,南京210096)
LI Duo1,YE Hua1,2*
(1.School of Automation,Southeast University,Nanjing 210096,China;2.Key Laboratory of Measurement and Control of Complex Systems of Engineering,Ministry of Education,Southeast University,Nanjing 210096,China)
隨著微電子技術和傳感器技術的發展,生物識別系統越來越廣泛的應用于如門禁考勤、身份認證以及安全防恐等領域。生物識別技術是利用人體固有的生物特性來進行個人身份的鑒定的一種技術。人類的生物特征通常具有唯一性、可以測量以及終身不變等特點,因此生物識別認證技術較傳統認證技術在安全性和便捷性方面具有較大的優勢[1]。
相比于虹膜、人臉以及聲音、筆跡等,指紋是目前生物識別領域最多也是研究時間最長的生物特征,占據生物識別產品過半的市場份額并保持較高的增長率[2]。無論是指紋識別算法的研究還是指紋庫原始數據的獲取,指紋采集是一項最為關鍵的技術,因此本文設計了一種基于STM32的嵌入式指紋采集存儲儀,彌補了傳統的指紋采集儀采集速度慢、存儲空間少、成本高、操作復雜、體積龐大、設備互換性差等諸多不足[3-5]。
本采集儀的主要創新點有二:一是選擇SD卡作為存儲器,存儲容量大、存取速度快,并且通過文件系統管理SD卡,使得SD卡上存儲的指紋圖像可以直接在計算機上瀏覽和處理;二是通過觸摸屏提供了指紋采集和管理的操作界面,界面友好、操作簡單,不需要連接計算機即可完成相關操作,較好的滿足了基于指紋特征的生物識別領域對于原始指紋圖像采集的實際應用需求。
FPC1011F是瑞典FINGERPRINTS公司推出的基于半導體硅電容效應的指紋傳感器,硅電容技術的優點是可以在較小的表面上獲得比光學技術更好的圖像質量。FPC1011F在10.64 mm×14 mm的有效感應區域中集成了152×200像素的硅傳感器陣列,其分辨率高達363 dpi[6]。每個硅傳感器等效于電容的一個極板,手指則是另一極板,根據手指紋線的脊和谷相對于平滑的硅傳感器之間的電容差不同,經過電荷放大電路和A/D轉換電路數字化后得到每像素8 bit的灰度圖像[7]。FPC1011F在指紋的采集質量、便捷性、耐用性以及安全性等方面,均得到了業內人士的好評,目前國內比較高檔、保密級別較高的場所都指定使用FPC1011F。
在接口方面,FPC1011F采用4線制SPI接口,傳輸速率高達4 Mpixel/s,傳輸一幅標準的指紋圖像數據,僅需要7.6 ms,傳感器與主控芯片的連接圖如圖1所示。

圖1 FPC1011F連接圖
MCU選用ST公司的STM32F103RCT6,該芯片是專為高性能、低成本、低功耗的嵌入式應用所設計的,其主要參數如表1所示[8]。該芯片處理速度快、存儲空間大,并集成了豐富的外設資源,極大的簡化了系統硬件設計,降低了成本,提高了可靠性。另外ST官方還為STM32F10x系列處理器編寫了針對外設資源的固件庫,相比于傳統的寄存器操作,通過固件庫API函數操作外設極大的提高了開發效率,縮短了開發周期。

表1 STM32F103RCT6主要參數
根據FPC1011F指紋傳感器的參數指標,采集得到的指紋圖像分辨率為152×200,每個像素占用1 byte空間即一幅圖像大小為30 400 byte,STM32F103RCT6集成了64 kbyte的嵌入式SRAM,從理論上說具備兩幅指紋圖像的緩沖空間,因此不需要外擴RAM。
外擴SD卡作為指紋圖像的存儲器,SD卡是Security Digital Memory Card(安全數字存儲卡)的簡稱,它被廣泛地于便攜式裝置上使用,例如數碼相機、掌上電腦和多媒體播放器等。在存儲媒介方面SD卡采用了NAND型閃存存儲器,平均數據傳輸率能達到2 Mbyte/s。SD卡常見的傳輸模式有兩種:傳統SPI模式和4 bit SDIO模式,考慮到指紋圖像文件較小,因此這里采用兼容性更強的SPI模式。觸摸屏采用QVGA分辨率的3.5 inch TFT模組,模組自帶LCD控制器以及4線電阻式觸摸芯片。SD卡及TFT模組接口電路原理圖如圖2(a)、圖2(b)所示。
FPC1011F驅動程序實現了傳感器工作參數的配置、啟動指紋采集以及讀取指紋圖像數據3個功能。時序上FPC1011F兼容SPI通訊協議的模式1和模式3,并且傳感器是SPI通訊中的從機,因此首先要按照上述要求配置STM32的SPI外設,之后便可通過發送命令+參數的形式操作傳感器了。

圖2
傳感器工作參數主要包括:電容陣列驅動電壓、A/D轉換器動態范圍以及傳感器工作模式、圖像的有效區域等,這些參數可以根據實際工作環境配置,其中電容陣列的驅動電壓和A/D轉換器動態范圍要相匹配,它們共同決定了采集圖像的質量,推薦將驅動電壓和動態范圍均設置為電源電壓的一半。
在配置好工作參數后,發送rd_sensor命令即可啟動指紋的采集,之后通過命令rd_spistat查詢SPI_STAT寄存器,它的最低位表示了指紋圖像數據是否準備好,如最低位為1,則可發送rd_spidata逐個像素的讀取圖像。完整的指紋采集流程如圖3所示,尖括號中的數據表示MCU發送的命令以及參數。
在SD卡存儲器的設計中,利用文件系統對存儲媒介進行管理已成為嵌入式系統的一個發展方向,因此需要一種可靠的文件系統[9],通過文件系統不僅便于在嵌入式系統和計算機之間直接交換文件,更提高了文件存儲和管理的效率。

圖3 指紋采集流程圖
目前嵌入式系統上常用的商用文件系統有Micrium公司的 μC/FS,支持 CF卡、硬盤、SD/MMC卡、NAND Flash等,以及國內廣州周立功單片機發展有限公司開發的ZLG/FS,它兼容個人電腦使用的FAT16、FAT32等文件系統,可移植到前后臺系統和多任務系統[10]。
本文選擇了時下應用較為廣泛的一種開源嵌入式文件系統FatFS,它特別針對嵌入式處理器的特點進行了優化。通過清晰的分層次設計,如圖4所示,使得FatFS具有良好的硬件平臺獨立性,經過簡單的修改就可以移植到多種嵌入式處理器上面。最高層是應用層,向用戶提供了如打開文件、讀寫文件等接口函數,中間層實現了FAT文件系統協議的處理,最底層是移植FatFS需要完成的工作,用戶需要根據所使用的微處理器以及存儲介質編寫相關函數。

圖4 FatFS結構層次圖
本文選擇了FatFS R0.07e版本在STM32上進行移植,移植過程可分為3步,第1步修改FatFS源碼中的integer.h文件,使其中定義的數據類型與使用的微處理器平臺相匹配;第2步修改FatFS源碼中的ffconf.h文件,該文件通過宏定義的方式對文件系統的屬性和功能進行裁剪,以減少文件系統不必要的開銷。針對FatFS在STM32F103RCT6上的移植來說,其RAM和FLASH比較充裕,可以禁用_FS_TINY選項并使能_FS_MINIMIZE選項,即開啟全部文件操作接口函數,并為每個文件對象單獨開辟扇區緩沖,以提高讀寫速率,其余選項可以采用默認或者根據需要進行配置。
第3步也是最重要的一步,就是編寫磁盤讀寫的底層接口函數,相關函數的定義位于FatFS源碼diskio.c文件中。文獻[11]是SD卡協會編寫的SD卡物理層規范,其中定義了SD卡的操作時序,參照該文獻即可完成SD卡底層接口函數的編寫。其中最關鍵的是3個函數:disk_initialize,它實現SD卡上電復位以及卡類型的判斷并初始化SD卡,初始化流程圖如圖5所示。disk_write,它完成向SD卡的扇區寫數據操作,disk_read,它完成從SD卡的扇區讀數據操作,軟件流程圖分別如圖6、圖7所示。至此FatFS在STM32上便移植完成。

圖5 SD卡初始化流程圖

圖6 SD卡扇區寫流程圖

圖7 SD卡扇區讀流程圖
BMP(Bitmap)是Windows中的標準圖像文件格式,與硬件設備無關,使用非常廣泛,采用該格式后,用戶在電腦上使用畫板軟件即可直接瀏覽指紋圖片。另一方面考慮到后續指紋處理和識別的需要,未選擇JPEG等有損壓縮的圖像編碼方式,以確保指紋原始數據的完整性,并且許多成熟的圖像處理算法也大都針對BMP格式,因此本文選擇BMP格式存儲采集到的指紋圖像。
有調色板的位圖文件結構如圖8所示,位圖文件由文件頭、信息頭、調色板(可選)和位圖數據四部分組成[12]。考慮到FPC1011F傳感器采集到的指紋是256級灰度圖像,因此本文采用帶有調色板的8 bit位圖存儲。其中位圖文件頭和信息頭長度固定為54 byte;8 bit位圖共256種顏色,故調色板占用空間1 024 byte;位圖數據為30 400 byte。因此相比于原始數據,由于采用BMP格式所額外的空間開銷為 1 078 byte,即指紋圖片的存儲效率為30 400÷(30 400+1 078)≈96.6%,盡管在存儲效率上比不上JPEG等格式,但相比于其他的位圖格式(如16 bit、24 bit真彩色等),既保持了指紋原始數據的完整性,又兼顧了存儲效率。

圖8 位圖文件結構圖
BMP文件的格式定義可參考Windows標準,這里不再詳述。本文以結構體的方式定義文件頭、信息頭和調色板,以文件頭為例參考代碼如下所示,需要指出的是由于STM32是32 bit處理器,因此定義結構體時需要使用pack選項,使成員變量的存儲按照16 bit方式對齊,否則默認32 bit方式對齊會導致圖片格式錯誤。

#pragma pack(push,2)typedef__packed struct tagBITMAPFILEHEADER{WORD file_type;//0x4d42 DWORD file_size;DWORD reserved;DWORD offset;//fileheader+infoheader+palette}BITMAPFILEHEADER;#pragma pack(pop)
對指紋采集存儲儀樣機的關鍵項目指標行測試,采集儀操作界面如圖9(a)、圖9(b)所示,通過觸摸屏可以直接實現采集指紋、指紋添加刪除、指紋瀏覽等操作。采集儀界面友好,使用簡便。

圖9
測試結果如表2所示,指紋采集速度快、存儲容量大,采用BMP格式存儲效率高。

表2 指紋采集存儲儀測試結果
實際采集到的原始指紋圖片如圖10所示,圖像紋理清楚,背景噪聲小,對比度大,很好的滿足了指紋的處理和識別對于指紋采集的需求。

圖10 實際采集到的指紋圖片
本文以STM32F103RCT6為核心,使用半導體電容式指紋傳感器FPC1011F,配合SD卡和FatFS嵌入式文件系統以及觸摸屏,設計了一款指紋采集存儲儀。實驗結果表明:該設備功能全面、性能優異、使用簡單,為指紋圖像后續的處理和識別奠定了良好的基礎,也為相關人員提供了指紋傳感器FPC1011F實用案例,具有較強的實用價值和參考意義。目前該設備已應用于作者所在實驗室智能指紋鎖項目的指紋識別算法的研究。
[1] 李文,趙慶蘭.生物識別技術淺析[J].價值工程,2012,31(30):213-214.
[2] 沈文文.人臉識別產品銷量增長最快——2013年上半年生物識別產品市場調查[J].中國公共安全(綜合版),2013(20):104-107.
[3] 印輝云,劉云飛,馬玲玲,等.基于FPGA的嵌入式指紋采集系統設計[J].湖北大學學報(自然科學版),2013,35(1):85-88.
[4] 陳石平,付佃華,李全.基于NiosⅡ與FPS200的半導體指紋采集系統設計[J].單片機與嵌入式系統應用,2007(7):35-37.
[5] 王燕,戴劍峰,王祥華.STM32的條狀指紋采集與拼接系統[J].單片機與嵌入式系統應用,2012,12(11):53 -56.
[6] FINGERPRINTS.FPC1011F Area Sensor Package Product Specification[EB/OL].http://www.fingerprints.com/wp - content/uploads/2013/08/720 - FPC1011F3_A_Product - sheet.pdf,2009-2.
[7] 陳文燕,劉良勇.指紋傳感器FPC1011F在ARM9指紋采集系統中的應用[J].中北大學學報(自然科學版),2011,32(5):642-647.
[8] STMicroelectronics. RM0008 STM32F101xx, STM32F102xx,STM32-F103xx,STM32F105xx and STM32F107xx advanced ARM-based 32-bit MCUs[EB/OL].http://www.st.com/st- web - ui/static/active/en/resource/technical/document/reference_manual/CD00171190.pdf,2011 -10.
[9] 李世奇,董浩斌,李榮生.基于FatFs文件系統的SD卡存儲器設計[J].測控技術,2011,30(12):79-81.
[10]張濤,左謹平,馬華玲.FatFs在32位微控制器STM32上的移植[J].電子技術,2010,47(3):25-27.
[11] SD Card Association.SD Specifications Part 1 Physical Layer Simplified Specification Version 4.10[EB/OL].http://www.sdcard.org/downloads/pls/simplified_specs/part1_410.pdf,2013-1.
[12]朱彥軍.BMP位圖文件的存儲格式[J].電腦編程技巧與維護,2003(11):77-79.