AS608指纹模块详解

您所在的位置:网站首页 6splus更换指纹模块 AS608指纹模块详解

AS608指纹模块详解

2024-06-27 00:47:59| 来源: 网络整理| 查看: 265

AS608指纹模块 一、 简介二、 外型三、 AS608模块引脚描述四、 系统资源六、 开发流程七、 使用原理八、 STM32程序总结

一、 简介

AS608 指纹识别模块主要是指采用了杭州晟元芯片技术有限公司(Synochip)的 AS608 指纹识别芯片 而做成的指纹模块,模块厂商只是基于该芯片设计外围电路,集成一个可供2次开发的指纹模块;所以,只要是基于AS608芯片的指纹模块,其控制电路及控制协议几乎是一样的,只是厂家和性能不同而已。

二、 外型

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

三、 AS608模块引脚描述 Vi 模块电源正输入端。Tx 串行数据输出。 TTL 逻辑电平Rx 串行数据输入。 TTL 逻辑电平GND 信号地。内部与电源地连接WAK 感应信号输出,默认高电平有效 (用户可读取状态引脚(WAK)判断有无手指按下)Vt 触摸感应电源输入端,.3v 供电U+ USB D+U- USB D- 四、 系统资源 缓冲区与指纹库 系统内设有一个 72K 字节的图像缓冲区与二个 512bytes 大小的特征文件缓冲区,名字分别称为:ImageBuffer,CharBuffer1 和 CharBuffer2。用户可以通过指令读写任意一个缓冲区。 CharBuffer1 或 CharBuffer2 既可以用于存放普通特征文件也可以用于存放模板特征文件。通过 UART 口上传或下载图像时为了加快速度,只用到像素字节的高 4 位,即将两个像素合 成一个字节传送。通过 USB 口则是整 8 位像素。 指纹库容量根据挂接的 FLASH 容量不同而改变,系统会自动判别。指纹模板按照序号存放,序号定义为:0—(N-1)(N 为指纹库容量)。用户只能根据序号访问指纹库内容。用户记事本 系统在 FLASH 中开辟了一个 512 字节的存储区域作为用户记事本,该记事本逻辑上被分成 16 页,每页 32 字节。上位机可以通过 PS_WriteNotepad 指令和 PS_ReadNotepad 指令 访问任意一页。注意写记事本某一页的时候,该页 32 字节的内容被整体写入,原来的内容被覆盖。随机数产生器 系统内部集成了硬件 32 位随机数生成器(不需要随机数种子),用户可以通过指令让模块产生一个随机数并上传给上位机。 五、 软件开发模块地址 (大小:4bytes ,属性:读写) ) 模块的默认地址为0xFFFFFFFF,可通过指令修改,数据包的地址域必须与该地址相配,命令包/数据包才被系统接收。 注:与上位机通讯必须是默认地址 0xFFFFFFFF !模块口令 (大小:4bytes ,属性:写) 系统默认口令为 0,可通过指令修改。若默认口令未被修改,则系统不要求验证口令, 上位机和 MCU 与芯片通讯;若口令被修改,则上位机与芯片通讯的第一个指令必须是验证 口令,只有口令验证通过后,芯片才接收其它指令。 注:不建议修改口令!数据包大小设置(大小:1bytes ,属性:读写) 发送数据包和接收数据包的长度根据该值设定。波特率数 系数 N 设置 (大小:1bytes ,属性:读写) USART 波特率=N×9600,N=1~12。安全等级 level 设置(大小:1bytes ,属性:读写) 系统根据安全等级设定比对阀值,level=1~5。安全等级为 1 时认假率最高,拒认率最低。 安全等级为 5 时认假率最低,拒认率最高。 六、 开发流程

在这里插入图片描述 在这里插入图片描述

七、 使用原理

利用光的折射和反射原理,光从底部射向三棱镜,并经棱镜射出,射出的光线在手指表面指纹凹凸不平的线纹上折射的角度及反射回去的光线明暗就会不一样。CMOS或者CCD的光学器件就会收集到不同明暗程度的图片信息,就完成指纹的采集。

八、 STM32程序 AS608.H #ifndef __AS608_H #define __AS608_H #include #include "stm32f10x.h" #define AS608_USER 1 #define PS_Sta PAin(6)//读指纹模块状态引脚 #define CharBuffer1 0x01 #define CharBuffer2 0x02 extern u32 AS608Addr;//模块地址 typedef struct { u16 pageID;//指纹ID u16 mathscore;//匹配得分 }SearchResult; typedef struct { u16 PS_max;//指纹最大容量 u8 PS_level;//安全等级 u32 PS_addr; u8 PS_size;//通讯数据包大小 u8 PS_N;//波特率基数N }SysPara; void PS_StaGPIO_Init(void);//初始化PA6读状态引脚 u8 PS_GetImage(void); //录入图像 u8 PS_GenChar(u8 BufferID);//生成特征 u8 PS_Match(void);//精确比对两枚指纹特征 u8 PS_Search(u8 BufferID,u16 StartPage,u16 PageNum,SearchResult *p);//搜索指纹 u8 PS_RegModel(void);//合并特征(生成模板) u8 PS_StoreChar(u8 BufferID,u16 PageID);//储存模板 u8 PS_DeletChar(u16 PageID,u16 N);//删除模板 u8 PS_Empty(void);//清空指纹库 u8 PS_WriteReg(u8 RegNum,u8 DATA);//写系统寄存器 u8 PS_ReadSysPara(SysPara *p); //读系统基本参数 u8 PS_SetAddr(u32 addr); //设置模块地址 u8 PS_WriteNotepad(u8 NotePageNum,u8 *content);//写记事本 u8 PS_ReadNotepad(u8 NotePageNum,u8 *note);//读记事 u8 PS_HighSpeedSearch(u8 BufferID,u16 StartPage,u16 PageNum,SearchResult *p);//高速搜索 u8 PS_ValidTempleteNum(u16 *ValidN);//读有效模板个数 u8 PS_HandShake(u32 *PS_Addr); //与AS608模块握手 const char *EnsureMessage(u8 ensure);//确认码错误信息解析 #endif AS608.c #include #include "delay.h" #include "usart2.h" #include "as608.h" u32 AS608Addr = 0XFFFFFFFF; //默认 //初始化PA6为下拉输入 //读摸出感应状态(触摸感应时输出高电平信号) void PS_StaGPIO_Init(void) { RCC->APB1ENR |= 1CRL |=0X08000000;//输入模式,默认下拉 GPIOA->ODR &=~(1 MYUSART_SendData(0xEF); MYUSART_SendData(0x01); } //发送地址 static void SendAddr(void) { MYUSART_SendData(AS608Addr>>24); MYUSART_SendData(AS608Addr>>16); MYUSART_SendData(AS608Addr>>8); MYUSART_SendData(AS608Addr); } //发送包标识, static void SendFlag(u8 flag) { MYUSART_SendData(flag); } //发送包长度 static void SendLength(int length) { MYUSART_SendData(length>>8); MYUSART_SendData(length); } //发送指令码 static void Sendcmd(u8 cmd) { MYUSART_SendData(cmd); } //发送校验和 static void SendCheck(u16 check) { MYUSART_SendData(check>>8); MYUSART_SendData(check); } //判断中断接收的数组有没有应答包 //waittime为等待中断接收数据的时间(单位1ms) //返回值:数据包首地址 static u8 *JudgeStr(u16 waittime) { char *data; u8 str[8]; str[0]=0xef;str[1]=0x01;str[2]=AS608Addr>>24; str[3]=AS608Addr>>16;str[4]=AS608Addr>>8; str[5]=AS608Addr;str[6]=0x07;str[7]='\0'; USART2_RX_STA=0; while(--waittime) { delay_ms(1); if(USART2_RX_STA&0X8000)//接收到一次数据 { USART2_RX_STA=0; data=strstr((const char*)USART2_RX_BUF,(const char*)str); if(data) return (u8*)data; } } return 0; } //录入图像 PS_GetImage //功能:探测手指,探测到后录入指纹图像存于ImageBuffer。 //模块返回确认字 u8 PS_GetImage(void) { u16 temp; u8 ensure; u8 *data; SendHead(); SendAddr(); SendFlag(0x01);//命令包标识 SendLength(0x03); Sendcmd(0x01); temp = 0x01+0x03+0x01; SendCheck(temp); data=JudgeStr(2000); if(data) ensure=data[9]; else ensure=0xff; return ensure; } //生成特征 PS_GenChar //功能:将ImageBuffer中的原始图像生成指纹特征文件存于CharBuffer1或CharBuffer2 //参数:BufferID --> charBuffer1:0x01 charBuffer1:0x02 //模块返回确认字 u8 PS_GenChar(u8 BufferID) { u16 temp; u8 ensure; u8 *data; SendHead(); SendAddr(); SendFlag(0x01);//命令包标识 SendLength(0x04); Sendcmd(0x02); MYUSART_SendData(BufferID); temp = 0x01+0x04+0x02+BufferID; SendCheck(temp); data=JudgeStr(2000); if(data) ensure=data[9]; else ensure=0xff; return ensure; } //精确比对两枚指纹特征 PS_Match //功能:精确比对CharBuffer1 与CharBuffer2 中的特征文件 //模块返回确认字 u8 PS_Match(void) { u16 temp; u8 ensure; u8 *data; SendHead(); SendAddr(); SendFlag(0x01);//命令包标识 SendLength(0x03); Sendcmd(0x03); temp = 0x01+0x03+0x03; SendCheck(temp); data=JudgeStr(2000); if(data) ensure=data[9]; else ensure=0xff; return ensure; } //搜索指纹 PS_Search //功能:以CharBuffer1或CharBuffer2中的特征文件搜索整个或部分指纹库.若搜索到,则返回页码。 //参数: BufferID @ref CharBuffer1 CharBuffer2 //说明: 模块返回确认字,页码(相配指纹模板) u8 PS_Search(u8 BufferID,u16 StartPage,u16 PageNum,SearchResult *p) { u16 temp; u8 ensure; u8 *data; SendHead(); SendAddr(); SendFlag(0x01);//命令包标识 SendLength(0x08); Sendcmd(0x04); MYUSART_SendData(BufferID); MYUSART_SendData(StartPage>>8); MYUSART_SendData(StartPage); MYUSART_SendData(PageNum>>8); MYUSART_SendData(PageNum); temp = 0x01+0x08+0x04+BufferID +(StartPage>>8)+(u8)StartPage +(PageNum>>8)+(u8)PageNum; SendCheck(temp); data=JudgeStr(2000); if(data) { ensure = data[9]; p->pageID =(data[10] u16 temp; u8 ensure; u8 *data; SendHead(); SendAddr(); SendFlag(0x01);//命令包标识 SendLength(0x06); Sendcmd(0x06); MYUSART_SendData(BufferID); MYUSART_SendData(PageID>>8); MYUSART_SendData(PageID); temp = 0x01+0x06+0x06+BufferID +(PageID>>8)+(u8)PageID; SendCheck(temp); data=JudgeStr(2000); if(data) ensure=data[9]; else ensure=0xff; return ensure; } //删除模板 PS_DeletChar //功能: 删除flash数据库中指定ID号开始的N个指纹模板 //参数: PageID(指纹库模板号),N删除的模板个数。 //说明: 模块返回确认字 u8 PS_DeletChar(u16 PageID,u16 N) { u16 temp; u8 ensure; u8 *data; SendHead(); SendAddr(); SendFlag(0x01);//命令包标识 SendLength(0x07); Sendcmd(0x0C); MYUSART_SendData(PageID>>8); MYUSART_SendData(PageID); MYUSART_SendData(N>>8); MYUSART_SendData(N); temp = 0x01+0x07+0x0C +(PageID>>8)+(u8)PageID +(N>>8)+(u8)N; SendCheck(temp); data=JudgeStr(2000); if(data) ensure=data[9]; else ensure=0xff; return ensure; } //清空指纹库 PS_Empty //功能: 删除flash数据库中所有指纹模板 //参数: 无 //说明: 模块返回确认字 u8 PS_Empty(void) { u16 temp; u8 ensure; u8 *data; SendHead(); SendAddr(); SendFlag(0x01);//命令包标识 SendLength(0x03); Sendcmd(0x0D); temp = 0x01+0x03+0x0D; SendCheck(temp); data=JudgeStr(2000); if(data) ensure=data[9]; else ensure=0xff; return ensure; } //写系统寄存器 PS_WriteReg //功能: 写模块寄存器 //参数: 寄存器序号RegNum:4\5\6 //说明: 模块返回确认字 u8 PS_WriteReg(u8 RegNum,u8 DATA) { u16 temp; u8 ensure; u8 *data; SendHead(); SendAddr(); SendFlag(0x01);//命令包标识 SendLength(0x05); Sendcmd(0x0E); MYUSART_SendData(RegNum); MYUSART_SendData(DATA); temp = RegNum+DATA+0x01+0x05+0x0E; SendCheck(temp); data=JudgeStr(2000); if(data) ensure=data[9]; else ensure=0xff; if(ensure==0) printf("\r\n设置参数成功!"); else printf("\r\n%s",EnsureMessage(ensure)); return ensure; } //读系统基本参数 PS_ReadSysPara //功能: 读取模块的基本参数(波特率,包大小等) //参数: 无 //说明: 模块返回确认字 + 基本参数(16bytes) u8 PS_ReadSysPara(SysPara *p) { u16 temp; u8 ensure; u8 *data; SendHead(); SendAddr(); SendFlag(0x01);//命令包标识 SendLength(0x03); Sendcmd(0x0F); temp = 0x01+0x03+0x0F; SendCheck(temp); data=JudgeStr(1000); if(data) { ensure = data[9]; p->PS_max = (data[14]PS_addr=(data[18] u16 temp; u8 ensure; u8 *data; SendHead(); SendAddr(); SendFlag(0x01);//命令包标识 SendLength(0x07); Sendcmd(0x15); MYUSART_SendData(PS_addr>>24); MYUSART_SendData(PS_addr>>16); MYUSART_SendData(PS_addr>>8); MYUSART_SendData(PS_addr); temp = 0x01+0x07+0x15 +(u8)(PS_addr>>24)+(u8)(PS_addr>>16) +(u8)(PS_addr>>8) +(u8)PS_addr; SendCheck(temp); AS608Addr=PS_addr;//发送完指令,更换地址 data=JudgeStr(2000); if(data) ensure=data[9]; else ensure=0xff; AS608Addr = PS_addr; if(ensure==0x00) printf("\r\n设置地址成功!"); else printf("\r\n%s",EnsureMessage(ensure)); return ensure; } //功能: 模块内部为用户开辟了256bytes的FLASH空间用于存用户记事本, // 该记事本逻辑上被分成 16 个页。 //参数: NotePageNum(0~15),Byte32(要写入内容,32个字节) //说明: 模块返回确认字 u8 PS_WriteNotepad(u8 NotePageNum,u8 *Byte32) { u16 temp; u8 ensure,i; u8 *data; SendHead(); SendAddr(); SendFlag(0x01);//命令包标识 SendLength(36); Sendcmd(0x18); MYUSART_SendData(NotePageNum); for(i=0;i u16 temp; u8 ensure,i; u8 *data; SendHead(); SendAddr(); SendFlag(0x01);//命令包标识 SendLength(0x04); Sendcmd(0x19); MYUSART_SendData(NotePageNum); temp = 0x01+0x04+0x19+NotePageNum; SendCheck(temp); data=JudgeStr(2000); if(data) { ensure=data[9]; for(i=0;i u16 temp; u8 ensure; u8 *data; SendHead(); SendAddr(); SendFlag(0x01);//命令包标识 SendLength(0x08); Sendcmd(0x1b); MYUSART_SendData(BufferID); MYUSART_SendData(StartPage>>8); MYUSART_SendData(StartPage); MYUSART_SendData(PageNum>>8); MYUSART_SendData(PageNum); temp = 0x01+0x08+0x1b+BufferID +(StartPage>>8)+(u8)StartPage +(PageNum>>8)+(u8)PageNum; SendCheck(temp); data=JudgeStr(2000); if(data) { ensure=data[9]; p->pageID =(data[10] ensure=data[9]; *ValidN = (data[10] SendHead(); SendAddr(); MYUSART_SendData(0X01); MYUSART_SendData(0X00); MYUSART_SendData(0X00); delay_ms(200); if(USART2_RX_STA&0X8000)//接收到数据 { if(//判断是不是模块返回的应答包 USART2_RX_BUF[0]==0XEF &&USART2_RX_BUF[1]==0X01 &&USART2_RX_BUF[6]==0X07 ) { *PS_Addr=(USART2_RX_BUF[2] case 0x00: p="OK";break; case 0x01: p="数据包接收错误";break; case 0x02: p="传感器上没有手指";break; case 0x03: p="录入指纹图像失败";break; case 0x04: p="指纹图像太干、太淡而生不成特征";break; case 0x05: p="指纹图像太湿、太糊而生不成特征";break; case 0x06: p="指纹图像太乱而生不成特征";break; case 0x07: p="指纹图像正常,但特征点太少(或面积太小)而生不成特征";break; case 0x08: p="指纹不匹配";break; case 0x09: p="没搜索到指纹";break; case 0x0a: p="特征合并失败";break; case 0x0b: p="访问指纹库时地址序号超出指纹库范围"; case 0x10: p="删除模板失败";break; case 0x11: p="清空指纹库失败";break; case 0x15: p="缓冲区内没有有效原始图而生不成图像";break; case 0x18: p="读写 FLASH 出错";break; case 0x19: p="未定义错误";break; case 0x1a: p="无效寄存器号";break; case 0x1b: p="寄存器设定内容错误";break; case 0x1c: p="记事本页码指定错误";break; case 0x1f: p="指纹库满";break; case 0x20: p="地址错误";break; default : p="模块返回确认码有误";break; } return p; } 总结

STM32驱动的AS608完整程序,包括指纹录入、指纹删除和指纹识别。可以观看我的推文《基于STM32和AS608指纹模块的应用开发》 在公众号中回复《基于STM32和AS608指纹模块的应用开发》。 或者直接下载源码:https://download.csdn.net/download/qq_44629109/85526402

在这里插入图片描述

订阅项目实战专栏,了解更多详细项目,里面有完整代码和讲解。



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭