AS608指纹模块|8月更文挑战

734 阅读5分钟

这是我参与8月更文挑战的第4天,活动详情查看:8月更文挑战

STM32

一、 简介

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

二、 外型

图片

图片

图片

图片

三、 AS608模块引脚描述

  1. Vi 模块电源正输入端。

  2. Tx 串行数据输出。TTL 逻辑电平

  3. Rx 串行数据输入。TTL 逻辑电平

  4. GND 信号地。内部与电源地连接

  5. WAK 感应信号输出,默认高电平有效
    (用户可读取状态引脚(WAK)判断有无手指按下)

  6. Vt 触摸感应电源输入端,.3v 供电

  7. U+ USB D+

  8. U- USB D-

图片

四、 系统资源

  1. 缓冲区与指纹库
    系统内设有一个 72K 字节的图像缓冲区与二个 512bytes 大小的特征文件缓冲区,名字分别称为:ImageBuffer,CharBuffer1 和 CharBuffer2。用户可以通过指令读写任意一个缓冲区。
    CharBuffer1 或 CharBuffer2 既可以用于存放普通特征文件也可以用于存放模板特征文件。通过 UART 口上传或下载图像时为了加快速度,只用到像素字节的高 4 位,即将两个像素合
    成一个字节传送。通过 USB 口则是整 8 位像素。
    指纹库容量根据挂接的 FLASH 容量不同而改变,系统会自动判别。指纹模板按照序号存放,序号定义为:0—(N-1)(N 为指纹库容量)。用户只能根据序号访问指纹库内容。

  2. 用户记事本
    系统在 FLASH 中开辟了一个 512 字节的存储区域作为用户记事本,该记事本逻辑上被分成 16 页,每页 32 字节。上位机可以通过 PS_WriteNotepad 指令和 PS_ReadNotepad 指令
    访问任意一页。注意写记事本某一页的时候,该页 32 字节的内容被整体写入,原来的内容被覆盖。

  3. 随机数产生器
    系统内部集成了硬件 32 位随机数生成器(不需要随机数种子),用户可以通过指令让模块产生一个随机数并上传给上位机。
    五、 软件开发

  4. 模块地址 (大小:4bytes ,属性:读写) )
    模块的默认地址为0xFFFFFFFF,可通过指令修改,数据包的地址域必须与该地址相配,命令包/数据包才被系统接收。注:与上位机通讯必须是默认地址 0xFFFFFFFF !

  5. 模块口令 (大小:4bytes ,属性:写)
    系统默认口令为 0,可通过指令修改。若默认口令未被修改,则系统不要求验证口令,
    上位机和 MCU 与芯片通讯;若口令被修改,则上位机与芯片通讯的第一个指令必须是验证
    口令,只有口令验证通过后,芯片才接收其它指令。注:不建议修改口令!

  6. 数据包大小设置(大小:1bytes ,属性:读写)
    发送数据包和接收数据包的长度根据该值设定。

  7. 波特率数 系数 N 设置 (大小:1bytes ,属性:读写)
    USART 波特率=N×9600,N=1~12。

  8. 安全等级 level 设置(大小:1bytes ,属性:读写)
    系统根据安全等级设定比对阀值,level=1~5。安全等级为 1 时认假率最高,拒认率最低。
    安全等级为 5 时认假率最低,拒认率最高。

六、 开发流程

图片

图片

七、 使用原理

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

八、 STM32程序

  1. AS608.H
  #ifndef __AS608_H
  #define __AS608_H
  #include <stdio.h>
  #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