SAM 通信协议
一、通信方式:
SAM 模块提供两种通信方式:UART 和 USB,同一时间只允许选择其中一种。
二、通讯配置:
起始位
数据位
停止位
校验位
表 1 UART 接口参数说明
1 位
8 位
1 位
无
波特率 默认 115200bps.可以设置为 57600bps、38400bps、19200bps、9600bps
表 2 USB 接口参数说明
速度
输入管道
输出管道
供电模式
设备远程唤醒特性
全速(12Mbps)
0x02(Pipe2)、0x06(Pipe6)
0x81(Pipe81)、0x85(Pipe85)
自供电
支持
三、数据传输格式:
UART 数据传输格式:
表 3 数据输入传输帧格式
Preamble
Len1
Len2
CMD
Para
Data
CHK_SUM
Preamble
Len1
Len2
SW1
SW2
SW3
Data
CHK_SUM
表 4 数据输出传输帧格式
USB 数据传输格式:
表 5 Pipe2 数据传输格式
Preamble
Len1
Len2
表 6 Pipe6 数据传输格式
CMD
Para
Data
CHK_SUM
表 7 Pipe81 数据传输格式
Preamble
Len1
Len2
表 8 Pipe85 数据传输格式
SW1
SW2
SW3
Data
CHK_SUM
四、各字段含义:
1、Preamble:本帧数据的帧头,5 字节,为 0xAA、0xAA、0xAA、0x96、0x69。
2、Len1、Len2:数据帧的有效数据长度,各为 1 字节。Len1 为数据长度高字节;Len2
为数据长度低字节。 输入数据长度为:CMD、Para、Data、CHK_SUM 字
段字节数之和; 输出数据长度为:SW1、SW2、SW3、Data、CHK_SUM
字段字节数之和。
3、CHK_SUM:校验和,1 字节。 数据帧中除帧头和校验和之外
的数据逐字节按位异或的结果。
表 9 CMD 和 Para
命令
SAM 状态检测
读 SAM 管理信息
寻找证/卡
选取证/卡
读身份证信息
CMD
0x11
0x12
0x20
0x20
0x30
Para
0xFF
0xFF
0x01
0x02
0x01
表 10 SW1、SW2、SW3
SW1 SW2 SW3
0x00 0x00 0x90
0x00 0x00 0x9F
0x00 0x00 0x10
0x00 0x00 0x11
Data
意义
和具体命令有关,可能为空
操作成功
证/卡芯片管理号
寻找证/卡成功
接收数据校验和错
接收数据长度错
0x00 0x00 0x21
0x00 0x00 0x23
0x00 0x00 0x24
XX
XX
0x31
XX
XX
0x32
0x00 0x00 0x33
XX
XX
0x40
XX
XX
0x41
XX
XX
0x47
0x00 0x00 0x60
0x00 0x00 0x66
0x00 0x00 0x80
XX
XX
0x81
0x00 0x00 0x91
接收数据命令错
越权操作
无法识别的错误
证/卡认证 SAM 失败
SAM 认证证/卡失败
信息验证错误
无法识别的卡类型
读证/卡操作失败
取随机数失败
SAM 自检失败
SAM 未经授权
寻找证/卡失败
选取证/卡失败
证/卡中此项无内容
五、常用命令示例:
1、读安全模块号码(通常作为动态库授权):
以安全模块号:05.01-20101129-0001228293-0296863149 为例
协议:
AA AA AA 96 69 00 03 12 FF EE 获取安全模块号指令(PC 到 读卡器)
AA AA AA 96 69 00 14 00 00 90 05 00 01 00 09 B8 32 01 05 BE 12 00 AD C5 B1 11 63 返
回数据
数据头
数据长度 成功状态 安
全模块号前两位 05.01
从低位到高位 01 32 B8 09 转换为十进制为 0001228293
从低位到高位 00 12 BE 05 转换为十进制为 0296863149
奇偶检验位
AA AA AA 96 69
00 14
00 00 90
05 00 01 00
09 B8 32 01
05 BE 12 00
63
2、检测安全模块状态(通常用来寻找读卡器连接的串口号):
AA AA AA 96 69 00 03 11 FF ED
AA AA AA 96 69 00 04 00 00 90 94
PC 到读卡器
返回成功值
3、寻找身份证信息:
寻卡命令:AA AA AA 96 69 00 03 20 01 22
返 回 值:AA AA AA 96 69 00 08 00 00 9F 00 00 00 00 97
4、选取身份证信息:
选卡命令:AA AA AA 96 69 00 03 20 02 21
返 回 值:AA AA AA 96 69 00 0C 00 00 90 00 00 00 00 00 00 00 00 9C
5、读取身份证信息(文字+照片信息):
读卡命令:AA AA AA 96 69 00 03 30 01 32
返 回 值:1295 字节数据身份证信息
6 . 读取身份证信息(文字+照片+指纹信息):
读卡命令:AA AA AA 96 69 00 03 30 10 23
返回 值:2321 或 1809 或 1297 字节数据身份证信息
六、身份证信息(文字+照片)结构:
AA AA AA 96 69 05 08 00 00 90 01 00 04 00 +(256 字节文字信息 )+(1024 字节
照片信息)+(1 字节 CRC)
七、身份证信息(文字+照片+指纹)结构:
AA AA AA 96 69 05 08 00 00 90 01 00 04 00 04 00 +(256 字节文字信息)+
(1024 字节图片信息)+(1024 或 512 或 0 字节指纹信息)+1 字节校验位
指纹数据的具体大小由第十五和第十六字节判断 (04 00)=4*16*16=1024 (02
00)=2*16*16=512
文字信息采用 GB 13000 的 UCS-2 进行存储,各项目分配如下:
项目
姓名
性别
民族
出生
住址
公民身份号码
签发机关
有效期起始日期
有效期截止日期
备用
长度(字节)
30
2
4
16
70
36
30
16
16
36
说明
汉字
代码
代码
年月日:YYYYMMDD
汉字和数字
数字
汉字
年月日:YYYYMMDD
年月日:YYYYMMDD
有效期为长期时存储
“长期”
附录一 民族代码对照表
01
汉
15
土家
02 蒙古
03
回
04
藏
05 维吾尔
06
苗
07
彝
08
壮
09 布依
10 朝鲜
11
满
12
侗
13
瑶
14
白
97
其他
16
哈尼
17 哈萨克
18
19
20
21
22
23
24
25
26
27
28
傣
黎
傈僳
佤
畲
高山
拉祜
水
东乡
纳西
景颇
外国血
统中国
籍人士
98
附录二 性别代码对照表
土
29 柯尔克孜
30
31
32
33
34
35
36
37
38
39
40
41
42
达斡尔
仫佬
羌
布朗
撒拉
毛南
仡佬
锡伯
阿昌
普米
塔吉克
怒
克
43 乌孜别
44 俄罗斯
45 鄂温克
46 德昂
47 保安
48 裕固
49
京
50 塔塔尔
51 独龙
52 鄂伦春
53 赫哲
54 门巴
55 珞巴
56 基诺
0
1
未知
男
2
9
女
未说明
第一枚指纹信息(前 512 字节指纹数据):
pucFPMsgValue[0] 字段文件头类型,记录字符“C”(43H)
pucFPMsgValue[1] 指纹算法版本号
pucFPMsgValue[2] 指纹采集器代码
pucFPMsgValue[3] 指纹算法开发者代码
pucFPMsgValue[4] 注册结果代码,01H 表示“注册成功”,02H 表示“注册失
败”,03H 表示“未注册”,09H 表示“未知”
pucFPMsgValue[5] 指位代码 具体见指位说明
pucFPMsgValue[6] 指纹质量值,以 00H~64H 来表示,值 01H 表示最低质量,
值 64H 表示最高质量,值 00H 表示“未知”
第二枚指纹信息(后 512 字节指纹数据):
pucFPMsgValue[512] 字段文件头类型,记录字符“C”(43H)
pucFPMsgValue[513] 指纹算法版本号
pucFPMsgValue[514] 指纹采集器代码
pucFPMsgValue[515] 指纹算法开发者代码
pucFPMsgValue[516] 注册结果代码,01H 表示“注册成功”,02H 表示“注册
失败”,03H 表示“未注册”,09H 表示“未知”
pucFPMsgValue[517] 指位代码 具体见指位说明
pucFPMsgValue[518] 指纹质量值,以 00H~64H 来表示,值 01H 表示最低质量,
值 64H 表示最高质量,值 00H 表示“未知”
指位码说明:
pucFPMsgValue[5or517]
指位
11 右手拇指 0BH
12 右手食指 0CH
13 右手中指 0DH
14 右手环指 0EH
15 右手小指 0FH
16 左手拇指 10H
17 左手食指 11H
18 左手中指 12H
19 左手环指 13H