《國(guó)產(chǎn)嵌入式技術(shù)及應(yīng)用實(shí)踐》課件 任務(wù)3 指紋采集功能設(shè)計(jì)與開(kāi)發(fā)_第1頁(yè)
《國(guó)產(chǎn)嵌入式技術(shù)及應(yīng)用實(shí)踐》課件 任務(wù)3 指紋采集功能設(shè)計(jì)與開(kāi)發(fā)_第2頁(yè)
《國(guó)產(chǎn)嵌入式技術(shù)及應(yīng)用實(shí)踐》課件 任務(wù)3 指紋采集功能設(shè)計(jì)與開(kāi)發(fā)_第3頁(yè)
《國(guó)產(chǎn)嵌入式技術(shù)及應(yīng)用實(shí)踐》課件 任務(wù)3 指紋采集功能設(shè)計(jì)與開(kāi)發(fā)_第4頁(yè)
《國(guó)產(chǎn)嵌入式技術(shù)及應(yīng)用實(shí)踐》課件 任務(wù)3 指紋采集功能設(shè)計(jì)與開(kāi)發(fā)_第5頁(yè)
已閱讀5頁(yè),還剩20頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

任務(wù)3指紋采集功能設(shè)計(jì)與開(kāi)發(fā)成都職業(yè)技術(shù)學(xué)院成都卓物科技有限公司任務(wù)情報(bào)在嵌入式應(yīng)用中,指紋識(shí)別技術(shù)主要用于身份認(rèn)證和數(shù)據(jù)加密解密。通過(guò)將指紋信息嵌入到嵌入式系統(tǒng)中,可以在登錄、支付等關(guān)鍵環(huán)節(jié)實(shí)現(xiàn)指紋識(shí)別驗(yàn)證,從而提高系統(tǒng)的安全性和便捷性。此外,指紋識(shí)別技術(shù)還可以用于數(shù)據(jù)加密和解密,通過(guò)將指紋特征作為密鑰,確保數(shù)據(jù)的安全性和完整性。HLK-FPM383C系列指紋模塊集成了完整的指紋處理能力,無(wú)需上位機(jī)干預(yù)即可獨(dú)立完成指紋錄入、圖像處理、指紋比對(duì)、指紋特征儲(chǔ)存等操作。與同類(lèi)指紋產(chǎn)品相比,該系列模塊具有以下顯著特點(diǎn):高集成度設(shè)計(jì):模塊高度集成,體積更小、功耗更低,為各種空間受限的應(yīng)用提供了理想的解決方案。安全的指紋特征存儲(chǔ)方案:采用算法芯片內(nèi)置的指紋特征存儲(chǔ)方案,有效防止暴力破解,提高數(shù)據(jù)安全性,保護(hù)用戶(hù)隱私。卓越的防護(hù)性能:具備防霧、防塵、防破壞功能,并有效消除靜電影響,確保高質(zhì)量的指紋圖像采集,顯著提升產(chǎn)品耐用性,適應(yīng)各種惡劣環(huán)境。智能觸摸喚醒和假指識(shí)別:支持觸摸喚醒功能,可即時(shí)啟動(dòng)指紋識(shí)別系統(tǒng),同時(shí)具備強(qiáng)大的假指識(shí)別能力,能夠區(qū)分塑膠手指、硅膠手指、橡膠手指、指模、指套等假手指,確保識(shí)別的真實(shí)性。開(kāi)放的開(kāi)發(fā)接口:提供詳細(xì)的接口代碼和命令集,支持組裝式二次開(kāi)發(fā),簡(jiǎn)化客戶(hù)的集成過(guò)程,降低開(kāi)發(fā)難度,提升開(kāi)發(fā)效率。HLK-FPM383C模塊在上電之后,模塊大約需要200毫秒進(jìn)行初始化。在初始化階段,模塊不會(huì)響應(yīng)來(lái)自上位機(jī)的命令,使用半雙工異步串口通訊,默認(rèn)波特率設(shè)定為57600bps。HLK-FPM383C系列模板與上位機(jī)之間進(jìn)行數(shù)據(jù)交換的規(guī)則。硬件上采用UART接口,軟件實(shí)現(xiàn)上參考如下通訊協(xié)議和指令集。本協(xié)議為2層結(jié)構(gòu):應(yīng)用層和鏈路層。應(yīng)用層主要負(fù)責(zé)具體功能定義,鏈路層用來(lái)進(jìn)行數(shù)據(jù)傳輸。在傳輸協(xié)議中定義的2字節(jié)或者4字節(jié),采用小字節(jié)序(littleendian),高位在前低位在后(例如0x12345678實(shí)際傳輸方式為0x120x340x560x78,不是0x780x560x340x12)。UART鏈路層為半雙工點(diǎn)對(duì)點(diǎn)工作方式,所有命令必須由上位機(jī)發(fā)起,指紋模塊進(jìn)行響應(yīng)。UART數(shù)據(jù)幀格式:說(shuō)明:幀頭:UART起始頭界定,無(wú)論是上位機(jī)發(fā)送數(shù)據(jù)還是指紋模塊發(fā)送數(shù)據(jù),幀頭數(shù)據(jù)固定為0xF11FE22EB66BA88A;應(yīng)用層數(shù)據(jù)長(zhǎng)度:描述應(yīng)用層實(shí)際數(shù)據(jù)的長(zhǎng)度,此數(shù)據(jù)長(zhǎng)度不包含幀頭、應(yīng)用層數(shù)據(jù)長(zhǎng)度、幀頭校驗(yàn)和3部分;幀頭校驗(yàn)和:為幀頭+應(yīng)用層數(shù)據(jù)長(zhǎng)度的校驗(yàn)和,用來(lái)檢查數(shù)據(jù)長(zhǎng)度是否有誤。應(yīng)用層數(shù)據(jù)的所有命令由上位機(jī)發(fā)起,指紋模塊響應(yīng),如圖所示。應(yīng)用層數(shù)據(jù)格式分請(qǐng)求命令和響應(yīng)請(qǐng)求2種格式,分別描述上位機(jī)數(shù)據(jù)發(fā)送和指紋模塊信息響應(yīng)。說(shuō)明:發(fā)送數(shù)據(jù)包長(zhǎng)度合計(jì):(7+N)Byte,按照不同命令,數(shù)據(jù)包長(zhǎng)度不同,但是每條指令為固定長(zhǎng)度。校驗(yàn)密碼:用來(lái)保障數(shù)據(jù)傳輸安全性,默認(rèn)密碼為0x00000000,可以通過(guò)應(yīng)用層命令來(lái)更改此密碼。命令:數(shù)據(jù)內(nèi)容:實(shí)際發(fā)送的內(nèi)容。校驗(yàn)和:和校驗(yàn)。說(shuō)明:接收數(shù)據(jù)包長(zhǎng)度合計(jì):(11+N)Byte,按照不同命令,數(shù)據(jù)包長(zhǎng)度不同,但是每條指令為固定長(zhǎng)度。校驗(yàn)密碼:用來(lái)保障數(shù)據(jù)傳輸安全性,默認(rèn)密碼為0x00000000,可以通過(guò)應(yīng)用層命令來(lái)更改此密碼。響應(yīng)命令:與上位機(jī)發(fā)送的命令字段對(duì)應(yīng),表示收到了響應(yīng)的命令。錯(cuò)誤碼:返回此命令執(zhí)行的結(jié)果,0x00000000表示無(wú)錯(cuò)誤,其他參考錯(cuò)誤信息定義表。數(shù)據(jù)內(nèi)容:返回響應(yīng)的結(jié)果。校驗(yàn)和:和校驗(yàn)。在實(shí)際應(yīng)用中,可以通過(guò)修改協(xié)議的校驗(yàn)密碼來(lái)確保數(shù)據(jù)加密,不會(huì)被第三方破解。(注意:校驗(yàn)密碼設(shè)置后會(huì)立刻生效,請(qǐng)妥善保管密碼,密碼遺失后需要返廠(chǎng)初始化。)指紋的命令集太多,這里選用幾個(gè)常用的列出。ErrorCODE:正常:0x00000000,錯(cuò)誤:返回錯(cuò)誤碼。以查詢(xún)手指在位狀態(tài)舉例,發(fā)送包格式(Byte):發(fā)送包示例:應(yīng)答包格式(Byte):獲取成功完成碼為0x00000000,其他為查詢(xún)失敗。如果手指在位,則返回STATE為1,否則STATE為0:注冊(cè)流程說(shuō)明如下:第一步:發(fā)送指紋注冊(cè)命令(0x010x11)。(建議:REG_IDX從0x01開(kāi)始,增加到0x06)第二步:查詢(xún)注冊(cè)結(jié)果(0x010x12)。若完成碼是0x00000000,說(shuō)明本次注冊(cè)完成,此時(shí)可以通過(guò)查看PROC的值是否增加,如果增加,說(shuō)明本次注冊(cè)成功。再者,需要查看PROC的值,如果PROC<100執(zhí)行第三步,否則PROC>=100,說(shuō)明整個(gè)注冊(cè)流程成功結(jié)束,開(kāi)始執(zhí)行第四步。若完成碼是0x00000004,意味著sensor還沒(méi)有處理完指紋數(shù)據(jù),適當(dāng)延時(shí)(建議200ms),再次獲取結(jié)果,若是其他原因(如:圖像質(zhì)量不好,手指可能按壓過(guò)重、過(guò)輕、或者太過(guò)潮濕等,繼續(xù)注冊(cè)即可)執(zhí)行第一步。第三步:查詢(xún)手指在位狀態(tài)(0x010x35)。如果完成碼不是0x00000000或者STATE是1的時(shí)候,意味著查詢(xún)出錯(cuò)或用戶(hù)手指在上,提示用戶(hù)手指離開(kāi)sensor再次按壓,(建議延時(shí)200ms)再次查詢(xún)手指在位狀態(tài),當(dāng)完成碼是0x00000000和STATE是0的時(shí)候,執(zhí)行第一步。第四步:保存指紋(0x010x13)。第五步:查詢(xún)保存指紋結(jié)果(0x010x14)。若完成碼是0x00000000,說(shuō)明保存完成。若完成碼是0x00000004,說(shuō)明未保存完成,延時(shí)適當(dāng)時(shí)間(建議200ms),再次獲取結(jié)果。若完成碼是0x0000000B,可能是flash存儲(chǔ)已滿(mǎn)。具體原因用戶(hù)可根據(jù)完成碼對(duì)照錯(cuò)誤信息定義表。驗(yàn)證流程說(shuō)明如下:第一步:發(fā)送指紋匹配命令(0x010x21)。發(fā)送指紋匹配命令前提示手指按壓。第二步:查詢(xún)匹配結(jié)果(0x010x22)。若完成碼是0x00000000,說(shuō)明匹配動(dòng)作完成。此時(shí)可查看匹配。結(jié)果、匹配分?jǐn)?shù)、匹配指紋id號(hào)。匹配結(jié)果是1的話(huà),代表已經(jīng)匹配到了指紋,否則未匹配到指紋。如果完成碼是0x00000004,還未匹配完成,延時(shí)適當(dāng)時(shí)間(建議延時(shí)200ms),再次獲取結(jié)果。如果是其他原因(如:圖像質(zhì)量不好0x0000000A,手指可能按壓過(guò)重、過(guò)輕、或者太過(guò)潮濕等),請(qǐng)重新匹配指紋,執(zhí)行第一步。刪除流程說(shuō)明如下:第一步:發(fā)送指紋特征清除命令(0x010x31)。CL_ALL為是否清除所有指紋特征的標(biāo)志,0x01表示清除所有指紋,默認(rèn)0x00表示清除單個(gè)指紋。ID_H、ID_L為將要?jiǎng)h除的指紋ID。用戶(hù)可根據(jù)自己的需要清除所有、單個(gè)或多個(gè)(具體發(fā)送格式可看指紋特征清除發(fā)送示例包)。第二步:查詢(xún)指紋特征清除結(jié)果(0x010x32)。若完成碼為0x00000000,說(shuō)明刪除成功。若完成碼為0x00000004,說(shuō)明還未刪除完成,延時(shí)適當(dāng)時(shí)間(建議200ms),再次獲取結(jié)果。其他錯(cuò)誤(如:指紋ID不存在、flash硬件錯(cuò)誤等)用戶(hù)可根據(jù)完成碼查看錯(cuò)誤信息對(duì)照表,重新發(fā)送正確的紋特征清除命令。關(guān)于HLK-FPM383C更詳細(xì)的信息,請(qǐng)?jiān)谒氖謨?cè)查看,文件地址:國(guó)產(chǎn)嵌入式技術(shù)及應(yīng)用實(shí)踐資源\項(xiàng)目資料\M604\指紋資料FPM383C用戶(hù)通信協(xié)議手冊(cè)V1.2指紋編程說(shuō)明硬件連接說(shuō)明如圖所示,指紋模組使用的是FPM383C,該模組采用串口通信,默認(rèn)波特率57600。指紋模組在板卡ZW-M604智慧園區(qū)門(mén)禁系統(tǒng)應(yīng)用板卡中,ZW-M604是沒(méi)有板載MCU與指紋進(jìn)行通信,需要使用外置板卡ZW-M607的標(biāo)準(zhǔn)接口B進(jìn)行通信,如圖所示。ZW-M604板卡有兩個(gè)外置端口J17和J16,指紋的串口連接在板卡的J16中,如圖所示。使用2X6P排線(xiàn)連接ZW-M607的標(biāo)準(zhǔn)接口B和ZW-M604的J16端口,實(shí)際硬件連接為:PC0/UART_TX連接指紋RX,PC1/UART_RX連接指紋TX,默認(rèn)使用的是HC32F460的USART2串口通信。指紋狀態(tài)說(shuō)明打開(kāi)FPM583F.h文件,指紋的注冊(cè)與驗(yàn)證有4種狀態(tài)。typedefenum{ status_init,//初始態(tài)

status_OK,//成功態(tài)

status_fail,//失敗態(tài)

status_idle,//空閑態(tài)}Identify_Regist_Status;//注冊(cè)與驗(yàn)證狀態(tài)在FPM583F.c文件,定義了指紋注冊(cè)與驗(yàn)證狀態(tài)全局變量。uint8_tidentify_result=status_init;//驗(yàn)證結(jié)果uint8_tregist_result=status_init; //注冊(cè)結(jié)果使用指紋的庫(kù)函數(shù)后,可以通過(guò)identify_result和regist_result查詢(xún)指紋驗(yàn)證和注冊(cè)的結(jié)果。指紋常用庫(kù)函數(shù)說(shuō)明指紋串口初始化函數(shù)打開(kāi)BSP_UART.h文件,找到下面定義。/*USART2*//*USART2RX/TXpindefinition*/#defineUSART2_RX_PORT(GPIO_PORT_C)/*PC01:USART2_RX*/#defineUSART2_RX_PIN(GPIO_PIN_01)#defineUSART2_RX_GPIO_FUNC(GPIO_FUNC_37)……………………/*USARTtimeoutbitsdefinition*/#defineUSART_TIMEOUT_BITS(2000U)這里預(yù)定義了USART2的引腳、中斷、中斷號(hào)以及串口超時(shí)值,與USART1的預(yù)定義流程是一樣的,HC32F460與指紋通信這里使用的是USART2,USART1是用于平時(shí)打印串口信息。打開(kāi)BSP_UART.c文件,找到USART2_Init()函數(shù)。***@description:串口2初始化函數(shù)*@param{uint32_t}Baudrate:串口波特率*@return{*}*/voidUSART2_Init(uint32_tBaudrate){stc_usart_uart_init_tstcUartInit;stc_irq_signin_config_tstcIrqSigninConfig;…………USART_FuncCmd(CM_USART2,(USART_RX|USART_INT_RX|USART_RX_TIMEOUT|USART_INT_RX_TIMEOUT),ENABLE);}USART1初始化和USART2初始化是一樣的,相關(guān)的功能和中斷函數(shù)也是一樣的,詳細(xì)代碼請(qǐng)?jiān)贐SP_UART.c文件查看。指紋初始化函數(shù)打開(kāi)FPM583F.c文件,找到FPM583F_Init()函數(shù)。voidFPM583F_Init(void){ uint8_treturn_param[50]; while(1) { if(RE_OK==FPM583F_HeartBeat())//查詢(xún)與模組通信

{

printf("\r\n與指紋模組通信正常\r\n"); FPM583F_Read_ID(return_param); //讀取模塊ID FPM583F_SetLED_PWM(LED_Red_Green,100,0,40);//設(shè)置呼吸燈

break; } }}該函數(shù)在while循環(huán)里使用FPM583F_HeartBeat()函數(shù)一直與指紋模組通信查詢(xún)心跳包,與指紋通信正常后讀取指紋ID并設(shè)置呼吸燈,然后退出這個(gè)循環(huán)。指紋注冊(cè)函數(shù)找到Add_FingerPrint()函數(shù),由于指紋注冊(cè)不可能一次性注冊(cè)成功,這里設(shè)置最大注冊(cè)次數(shù)為6次。if(RE_OK==FPM583F_Set_max_regist_times(0x06))//設(shè)置注冊(cè)次數(shù)設(shè)置最大注冊(cè)次數(shù)后,發(fā)送指紋注冊(cè)命令。if(RE_OK==FPM583F_Regist(REG_IDX))//發(fā)送指紋注冊(cè)命令然后查詢(xún)注冊(cè)結(jié)果。return_code=FPM583F_Query_REG_result(return_param);//查詢(xún)注冊(cè)結(jié)果查詢(xún)注冊(cè)結(jié)果不成功的話(huà),一般情況下有兩種,一種是:指紋沒(méi)有按到位;另一種是這個(gè)指紋已經(jīng)被注冊(cè)了。注冊(cè)成功的話(huà),會(huì)串口打印出PROC_value值,PROC表示大于100時(shí),即表示指紋注冊(cè)完成。printf("\r\n本次注冊(cè)成功,PROC值:%d\r\n",PROC_value);指紋清空函數(shù)找到Delet_all_fingerprint()函數(shù),該函數(shù)會(huì)刪除所有指紋。//刪除所有指紋uint8_tDelet_all_fingerprint(void){ uint8_treturn_param[2]; if(RE_OK==FPM583F_Query_fingerprint_templates_num(return_param))//查詢(xún)已注冊(cè)指紋模板數(shù)量

{

if(((return_param[0]<<8)+return_param[1])>0)//存在至少一個(gè)已注冊(cè)指紋模板

{

DDL_DelayMS(200); if(RE_OK==FPM583F_Clear_single_all_Fingerprint_feature(0x01,0x0000))//刪除所有指紋

{

DDL_DelayMS(200); if(RE_OK==FPM583F_Query_Fingerprint_feature_removal_result())//查詢(xún)清除結(jié)果

{

FPM583F_SetLED_BLINK(LED_Green,20,20,2); printf("\r\n刪除所有指紋成功\r\n"); return0; } } } else { printf("\r\n無(wú)可刪除的指紋\r\n"); } } FPM583F_SetLED_BLINK(LED_Red,20,20,2); printf("\r\n刪除所有指紋失敗\r\n"); return1;}指紋查詢(xún)函數(shù)找到FPM583F_Query_finger_in_place_status()函數(shù),該函數(shù)查詢(xún)手指是否在指紋模塊上。uint8_tFPM583F_Query_finger_in_place_status(uint8_t*return_param){ uint8_terror_code; uint8_tFPM583F_buff[2]; FPM583F_buff[0]=0x01; FPM583F_buff[1]=PS_Query_finger_in_place_status; error_code=FPM583F_SendData(2,FPM583F_buff,return_param); if(error_code==RE_OK) { printf("\r\n查詢(xún)成功\r\n"); if(return_param[0]==0x01) printf("\r\n手指在位\r\n"); else printf("\r\n手指不在位\r\n"); } else { printf("\r\n查詢(xún)手指在位狀態(tài)發(fā)生錯(cuò)誤\r\n"); printf("\r\n錯(cuò)誤代碼:0x%2x\r\n",error_code); } returnerror_code;}指紋驗(yàn)證函數(shù)找到Match_FingerPrint()函數(shù),先通過(guò)FPM583F_Match()函數(shù)發(fā)送指紋匹配命令。

//發(fā)送指紋匹配命令

if(RE_OK==FPM583F_Match())然后使用FPM583F_Query_match_result()函數(shù)查詢(xún)指紋匹配結(jié)果。//查詢(xún)匹配結(jié)果return_code=FPM583F_Query_match_result(return_param);指紋匹配成功后,指紋閃爍綠燈兩次,串口1打印消息。if(RE_OK==FPM583F_Cancel_REG_Match()){ FPM583F_SetLED_BLINK(LED_Green,20,20,2);//閃爍綠燈兩次

printf("\r\n指紋匹配成功,匹配ID:%d\r\n",ID); identify_result=status_OK; return0;}指紋初始化在使用FPM583F_Init()指紋初始化函數(shù)之前,我們需要將用到的延時(shí)、串口1、串口2、串口超時(shí)進(jìn)行初始化。

LL_PERIPH_WE(LL_PERIPH_ALL);//解除MCU寄存器寫(xiě)保護(hù)

BSP_CLK_Init();//時(shí)鐘初始化

delay_init();//延時(shí)初始化

KEY_Init();//M607板卡按鍵初始化

TMR0_USART_Config();//串口接收超時(shí)定時(shí)器初始化

USART1_Init(57600);//M607板卡串口1初始化

USART2_Init(57600);//M607板卡串口2初始化

FPM583F_Init();//M604板卡指紋初始化

/*MCUPeripheralregisterswriteprotected*/LL_PERIPH_WP(LL_PERIPH_ALL);//MCU寄存器寫(xiě)保護(hù)這里的按鍵初始化,會(huì)在指紋解鎖功能中用到。在FPM583F.c文件中,更具指紋功能寫(xiě)了一個(gè)FPM583F_KEY()函數(shù),通過(guò)按鍵使用指紋的注冊(cè)、清空、查詢(xún)、驗(yàn)證等功能。voidFPM583F_KEY(void){ if(1==SW3_Flag) { printf("\r\n————注冊(cè)指紋模式————\r\n"); printf("\r\n>>>請(qǐng)將需要注冊(cè)的手指按壓指紋模塊6次<<<\r\n"); Add_FingerPrint();//指紋注冊(cè)

SW3_Flag=0; } if(1==SW4_Flag) { printf("\r\n————清空指紋模式————\r\n"); SW4_Flag=0; Delet_all_fingerprint();//

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論