• R302指识别开发笔记


    一、相关概念

    1.存储容量:500枚指纹,地址范围0-499。

    2.用户记事本:模块内部为用户开辟了512Bytes的FLASH空间用于存放用户数据该存储空间称为用户记事本,该记事本逻辑上被分成16个页,每页32字节,写记事本命令用于写入用户的32字节数据到指定的记事本页。

    3通信包:命令包、数据包、结束包。

    4.缓冲区:模块内有1个72字节的指纹图像缓冲区ImageBuffer,与3个各810字节的指纹特征文件缓冲区CharBuffer1、CharBuffer2。都是可读可写的。CharBuffer1和CharBuffer2可存放普通指纹特征数据(单次指纹图像生成的特征),也可以存放指纹特征模板(由两个普通指纹特征数据合成)。通过上位机从ImageBuffer获取的指纹图像不是完全从ImageBuffer中读取的,只读取了每字节的高四位,图像无关紧要,上传速度才是关键。810字节就是一个指纹最大的有效数据,没有更多了,只能更少。

    5.接口类型:串口、USB

    6.安全等级:1-5级,影响到拒真率和认假率。

    7.拒真率:也叫拒识率。指将相同的指纹误认为是不同的指纹,而加以拒绝的出错概率。其定义为:FRR=拒识的指纹数目/考察的指纹总数目×100%。

    8.认假率:也叫误判率。指将不同的指纹误认为是相同的指纹,而加以接收的出错概率。其定义为:FAR=错判的指纹数目/考察的指纹总数目×100%。

    二、R302模块操作要点

    1.上电后模块初始化时间约500ms。

    2.默认波特率为57600bps,可通过命令设置为9600-115200bps。传送的帧格式为 10位,1位0电平起始位,8位数据(低位在前)和1位停止位,无校验位。

    3. 模块地址(FFh×4)默认。

    三、问题解决

    问1.记事本有什么鬼用

    答1.这个记事本和指纹库从应用上来说是没有什么太大关系的,这个记事本只是用来记录一些用户数据,你要拿来记录和指纹不相关的数据也完完全全可以的,就把它当做普通的内存就好了,只有16页,省着点用,偶尔还是有什么卵用的^_^。

    问2.通过上位机上传的指纹库的数据大小是怎么计算的?哪些是有效数据?

    答2.数据包格式的大小有64/128/256字节格式,这个值就是有效的数据大小,实际传输的数据包的大小不止这些,还要包括包头、命令字、校验码等内容。

    问3.安全等级反映什么特性?为什么数据包的大小是可以设置的?它和安全等级有没有半毛钱的关系?

    答3.安全等级越高,指纹模块的认假率和拒真率越小,即意味着“认为是自己人”“认为不是自己人”的出错概率越小。通常安全等级选择等级3。安全等级主要体现在匹配指纹库的过程中,并不影响指纹库数据的录入。继续问题的回答。首先清楚数据包和指纹库中存放的指纹特征数据不是一回事。经过试验测试,每次录入指纹模块特征数据的大小都是不一样的,我想这个是和手指与电容模板的接触面积有关。当我们想把指纹库中的数据上传到主机时,先发GR_UpChar指令,然后先收到该指令的应答包,接着开始接收数据包,数据包的格式如下:

    数据包的大小和包长度是同一个概念,其实按照语文上的理解应该是不一样的,我想这是写R302模块的技术人员的怎样理解问题。通过设置数据包的大小可以改变读指纹数据到上位机的次数,本质上并没有什么区别。

    问4.通信包里的校验和是指那部分的数据的和?

    答4.模块地址和校验和之间的数据之和,不包括模块地址和校验和字节数据。

    问5.在Flash指纹库中一个指纹特征模板有多少字节?

    答5.从上位机读出来的数据来看是0x370字节即810字节。

    实际程序测试证明:录入一个指纹到指纹库地址0,然后通过GR_UpChar指令将指纹库中地址0处的指纹打印出来。数据包的大小默认是128字节的,因此加上包头等部分,一次通讯包大小就有128+11=139字节,注意判断数据包的结束包,即每读一次数据包就判断其第7字节值是不是0x08,如果是,代表该个包是结束包而不是数据包。从打印的结果来看,一共打印了7次,虽然最后一次是结束包,但是他的数据部分也还是指纹特征数据。也就是说一个指纹特征数据大小是7*128=896字节。实验测试方法是:把这7次读出来的指纹特征数据制成数据包之后发送回指纹模块中保存到指定flash位置,然后再去搜索指纹库,看能不能匹配到对应自己的那个指纹。

  • 相关阅读:
    为什么使用CWinApp类编译以后的文件会比CWinAppEx类小呢?
    遇到问题——IntelliSense: #error directive: Please use the /MD switch for _AFXDLL builds
    理解C++中复杂的指针声明
    运行没有错,但是窗口没有显示出来——Windows编程中的CreateWindow返回值为空?
    错误argument of type "char *" is incompatible with parameter of type "LPCWSTR"的解决方法
    游戏坐标和窗口坐标的变换公式
    一路风雨走过来:那些我亲密接触过的项目
    10 Fun Things to do with Tessellation
    irrlicht引擎:中文支持
    魔兽世界客户端数据研究(一)
  • 原文地址:https://www.cnblogs.com/lubiao/p/4716990.html
Copyright © 2020-2023  润新知