物理层采用串口通讯,波特率 57600,8 位数据位,1 位停止位,无奇偶校验位。
模块采用 UART 与上位机通讯,对命令、数据、结果的接收和发送,都采用数据包的形式。对于多字节的,高字节在前低字节在后(如 2 bytes 的 00 06 表示 0006,不是 0600)。数据包格式及其定义见表 4.1 和表 4.2 所示。
表 4.1 数据包格式
包头 | 地址 | 包标识 | 包长度 | 包内容(指令/数据/参数/确认码) | 校验和 |
2 Bytes | 4 Bytes | 1 Byte | 2 Bytes | 2 Bytes |
表 4.2 数据包详细定义表
名称 | 符号 | 长度(Bytes) | 说明 |
包头 | Start | 2 | Checksum |
地址 | Addr | 4 | 默认值为 0xFFFFFFFF,用户可通过指令修改地址,模块会拒绝地址错误的指令。传送时高字节在前。 |
包标识 | Pid | 1 | 0x01:表示指令包,可以跟数据包。 0x02:表示数据包,且有后续包。数据包必须跟在指令包或应答包后面。 0x07:表示应答包,可以跟数据包。 0x08:表示最后一个数据包,即结束包。 |
包长度 | Length | 2 | 包长度=包内容长度+校验和长度。传送时高字节在前。 |
包内容 | Data | - | 包括指令、数据、参数、确认码等。 |
校验和 | Checksum | 2 | “包标识+包长度+包内容”所有字节的累加和。传送时高字节在前。 |
代码 | 指令名 | 功能说明 |
0x01 | GetImage | 从传感器上读入图像存于图像缓冲区 |
0x02 | GenChar | 根据原始图像生成指纹特征存于 CharBuffer 中 |
0x03 | Match | 比对几个 CharBuffer 中的特征文件 |
0x04 | Search | 以 CharBuffer 中的特征文件搜索整个或部分指纹库 |
0x05 | RegModel | 将 CharBuffer 中的特征文件合并生成模板存在特征缓冲区内 |
0x06 | StoreChar | 将特征缓冲区内的模板储存到 flash 指纹库中 |
0x07 | LoadChar | 从 flash 指纹库中读取一个模板到特征缓冲区 |
0x08 | UpChar | 将特征缓冲区中的文件上传 |
0x09 | DownChar | 下载一个特征文件到特征缓冲区 |
0x0a | UpImage | 上传图像缓冲区内的图像数据 |
0x0b | DownImage | 下载图像数据到图像缓冲区 |
0x0c | ?DeleteChar | 删除 flash 指纹库中的一个模板文件 |
0x0d | Empty | 清空 flash 指纹库 |
0x0e | SetSysPara | 设置系统参数 |
0x0f | ReadSysPara | ?读系统参数 |
0x12 | SetPwd | 设置口令 |
0x13 | VfyPwd | 效验口令 |
0x14 | GetRandomCode | 获取随机数 |
0x15 | SetAddr | 设置模块地址 |
0x16 | ReadInfPage | ?读取信息页 |
0x18 | WriteNotepad | 写记事本 |
0x19 | ReadNotepad | 读记事本 |
0x1d | ValidTemplateNum | 读有效模板个数 |
0x1f | ReadIndexTable | 读指纹模板索引表 |
0x28 | GetImageEx | 采集指纹图像扩展指令 |
0x30 | Cancel | 取消指令 |
0x40 | HandShake | 握手 |
0x36 | CheckSensor | 检测传感器 |
0x39 | GetAlgVer | 获取算法库版本 |
0x3a | GetFwVer | 获取固件版本 |
0x3c | ReadProdInfo | ?读取产品信息 |
0x3d | SoftRst | ?软复位 |
0x35 | AuraLedConfig | 光环控制 |
指令只能由上位机下发给模块,模块向上位机应答。
模块收到指令后,会通过应答包,将有关命令执行情况与结果上报给上位机。应答包含有参数,并可跟后续数据包。
指令后如果需要跟数据包,则上位机在发送指令包,并收到应答包后才能确认是否可以继续发数据包。
上位机只有在收到模块的应答包后才能确认模块的收包情况与指令执行情况。应答包的内容包括一个字节的确认码(必须有)和可能有的返回参数。确认码见表4.3。
表 4.3 确认码定义表
序号 | 确认码 | 定义说明 |
1 | 0x00 | 指令执行完毕或 OK; |
2 | 0x01 | 数据包接收错误; |
3 | 0x02 | 传感器上没有手指; |
4 | 0x03 | 录入指纹图像失败; |
5 | 0x06 | 指纹图像太乱而生不成特征; |
6 | 0x07 | 指纹图像正常,但特征点太少(或面积太小)而生不成特征; |
7 | 0x08 | 指纹不匹配; |
8 | 0x09 | 没搜索到指纹; |
9 | 0x0a | 特征合并失败; |
10 | 0x0b | 访问指纹库时地址序号超出指纹库范围; |
11 | 0x0c | 从指纹库读模板出错或无效; |
12 | 0x0d | 上传特征失败; |
13 | 0x0e | 模块不能接受后续数据包; |
14 | 0x0f | 上传图像失败; |
15 | 0x10 | ?删除模板失败; |
16 | 0x11 | 清空指纹库失败 |
17 | 0x13 | 口令不正确; |
18 | 0x15 | 缓冲区内没有有效原始图像; |
19 | 0x18 | 读写 FLASH 出错; |
20 | 0x1a | 无效寄存器号; |
21 | 0x1b | 无效数据或数据非法(包括指纹特征或指纹模板数据非法) |
22 | 0x20 | 地址码错误 |
23 | 0xFC | 不支持的命令 |
24 | 0xFD | 硬件错误 |
25 | 0xFE | 命令执行失败 |
26 | 0x21 | 必须验证口令 |
27 | 0x22 | 指纹模板为空 |
28 | 0x24 | 指纹库为空 |
29 | 0x26 | 超时 |
30 | 0x27 | 指纹已存在 |
31 | 0x29 | 传感器硬件错误 |
32 | 0x1f | 指纹库已满 |
33 | other | 系统保留 |