读写器通讯协议
[0~3] , 帧校验
0x05,0x01, 卡 号 密码认证成功,卡片序列号已知,但读取扇区内容失败
[0~3] , 帧校验
0x35,0x02, 卡 号 第 0 块读出,但第 1、2 块没读出,仅扇区内容前 16 个字节
[0~3], 扇 区 内 容 的数据有效
[0~47] , 帧校验
0x35,0x03, 卡 号 第 0、1 块读出,但第 2 块没读出,仅扇区内容前 32 个字节
控制字:
推荐使用方法如下: //先定义以下常量 #define NEEDSERIAL 0x08 举例: //以下控制字含义:只改动指定序列号的卡 控制字= NEEDSERIAL
//以下控制字含义:改动任何卡 控制字= 0
卡号序列号:如果在控制字的 bit3 为 0 ,则 Serial 数组的内容无需赋值,否则需要 赋值以便使其寻找指定的卡号。
读写器开发使用说明
IC 卡内部存储结构知识: 本读写器支持 ISO14443 TYPE A 标准的 Mifare One 系列卡。Mifare One 卡的内部存储 结构分为 16 个扇区,从第 0 区到第 15 区,每个扇区有独立的密码和权限控制字,可作为独 立的电子钱包,每个扇区有 4 个块,序号为第 0 块、第 1 块、第 2 块、第 3 块,每块 16 个 字节,第 3 块是卡的密码和权限控制字专用块,禁止在此存放数据。第 0 块、第 1 块、第 2 块可随意存放数据。但第 0 区的第 0 块已被固化了 IC 卡出厂信息,此块只能读出信息,不 可更改。 每张卡都有一个全球统一的 4 个字节的序列号。许多公司销售的读卡模块只有读取卡序 列号的功能,也能用于一般的考勤系统。但这类读卡模块跟本公司的读写器有着本质的不同, 本公司的读写器不仅能读序列号,而且还有服务于 IC 卡所有用途的功能,比如选中卡、认 证、读卡、写卡、改密码、休眠卡能功能。
卡号序列号:如果在控制字的 bit3 为 0 ,则 Serial 数组的内容无需赋值,否则需要 赋值以便使其寻找指定的卡号。
区号指需要写进的区号,则 0-15 中的某个数,一张卡有 16 个区,各个区有单独密 码,可独立使用
A/B 密码为 0 时以 B 密码来认证,为非 0 时以 A 密码来认证。刚出厂的卡以 A 密 码来认证。
二、单片机串/UART/232 接口控制协议 硬件接口提示
波特率参数为:19200,N,8,1
发送帧格式 帧长度(1 字节) 帧内容(不超过 50 个字节)
接收帧格式 帧长度(1 字节) 帧内容(不超过 50 个字节)
注:帧长度仅指帧内容的字节数
帧内容的和校验(1 字节) 帧内容的和校验(1 字节)
寻不到卡 有两张以上卡片同时在感应区,发生冲突 无法选择激活卡片 密码装载失败,卡片序列号已知
密码认证失败,卡片序列号已知
改密码成功
7
4
推荐使用方法如下: //先定义以下常量 #define BLOCK0_EN 0x01//写第 0 块 #define BLOCK1_EN 0x02//写第 1 块 #define BLOCK2_EN 0x04//写第 2 块 #define NEEDSERIAL 0x08//是否指定卡序列号 #define EXTERNKEY 0x10//用帧内容中的密码认证或用事先已设定在读卡器中 的密码认证 举例: //以下控制字含义:写块 0、块 1、块 2,仅写指定序列号的卡,需要每次指定密码 控 制 字 = BLOCK0_EN + BLOCK1_EN + BLOCK2_EN + NEEDSERIAL+ EXTERNKEY //以下控制字含义:写块 0、块 2,可写任意卡,需要每次指定密码 控制字= BLOCK0_EN + BLOCK2_EN + EXTERNKEY //以下控制字含义:写块 0、块 2,可写任意卡,启用芯片内部密码 控制字= BLOCK0_EN + BLOCK2_EN
1
功能 发送
只读取 IC 卡序列号
注:0xF0 前面的 0x 表示 F0 为十六进制数据,等于十进制的 240 如:01 F0 F0
寻到卡时返回:
返回
如: 发送:01 F0 F0 ,有卡时返回:05 00 40 AD 8B 28 4E 其中 4E = 00 异或 40 异或 AD 异或 8B 异或 28;
00 00 00 00 00 4E 控制字:
推荐使用方法如下: //先定义以下常量 #define BLOCK0_EN 0x01//读第 0 块 #define BLOCK1_EN 0x02//读第 1 块 #define BLOCK2_EN 0x04//读第 2 块 #define NEEDSERIAL 0x08//是否指定卡序列号 #define EXTERNKEY 0x10//用帧内容中的密码认证或用事先已设定在读卡器中 的密码认证 举例: //以下控制字含义:读块 0、块 1、块 2,仅读指定序列号的卡,需要每次指定密码 控 制 字 = BLOCK0_EN + BLOCK1_EN + BLOCK2_EN + NEEDSERIAL+ EXTERNKEY //以下控制字含义:读块 0、块 2,可读任意卡,需要每次指定密码 控制字= BLOCK0_EN + BLOCK2_EN + EXTERNKEY //以下控制字含义:读块 0、块 2,可读任意卡,启用芯片内部密码 控制字= BLOCK0_EN + BLOCK2_EN
5
[0~3] ,校验码 0x05,0x02, 卡 号 第 0 块写入成功,但第 1、2 块写入失败 [0~3] ,校验码 0x05,0x03, 卡 号 第 0、1 块写入成功,但第 2 块写入失败 [0~3] ,校验码 0x05,0x00, 卡 号 第 0、1、2 块写入成功,如 05 00 40 AD 8B 28 4E [0~3] ,校验码
: 发送:
功能 发送
: 改扇区密码,在知道原密码的情况下改某一扇区的密码。 0x14(帧长度),0x3C(命令字),控制字,卡号序列号[0~3](4 个字节),区号,A/B 密码,卡旧密码[0~5](6 个字节),卡新密码[0~5](6 个字节),校验码。 如:14 3C 00 00 00 00 00 08 AA FF FF FF FF FF FF 88 88 88 88 88 88 9E
2
如:0E 78 17 00 00 00 00 08 AA FF FF FF FF FF FF
寻不到卡时返回:
寻到卡时返回:
如:35 00 40 AD 8B 28 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
卡密码出厂时为 6 个 0xFF
返回
0x01,0x08,0x08
寻不到卡
0x01,0x09,0x09
有两张以上卡片同时在感应区,发生冲突
0x01,0x0a,0x0a
无法选择激活卡片
0x05,0x0b, 卡 号 密码装载失败,卡片序列号已知
[0~3], 帧校验
0x05,0x0c, 卡 号 密码认证失败,卡片序列号已知
[0~3], 扇 区 内 容 的数据有效
[0~47] , 帧校验
0x35,0x00, 卡 号 第 0、1、2 块读出,扇区内容所有数据有效
[0~3], 扇 区 内 容
[0~47] , 帧校验
功能 发送
: 集成读卡,写卡,可以一次性写整个区的第 0 块、第 1 块、第 2 块信息。 0x35(帧长度),0x69(命令字),控制字,卡号序列号[0~3](4 个字节),区号,A/B 密码,卡密码[0~5](6 个字节),块 0 数据[0~15](16 个字节),块 1 数据[0~15] (16 个字节),块 2 数据[0~15] (16 个字节),校验码
区号指需要写进的区号,则 0-15 中的某个数,一张卡有 16 个区,各个区有单独密 码,可独立使用
A/B 密码为 0 时以 B 密码来认证,为非 0 时以 A 密码来认证。刚出厂的卡以 A 密 码来认证。
6
卡密码出厂时为 6 个 0xFF
返回 (帧内 容,不 包括 帧长 度和 帧校 检码)
0x01,0x08,0x08 0x01,0x09 0x01,0x0a 0x05,0x0b, 卡 号 [0~3],校验码 0x05,0x0c, 卡 号 [0~3] ,校验码 0x05,0x00, 卡 号 [0~3] ,校验码
寻不到卡
有两张以上卡片同时在感应 区,发生冲突 无法选择激活卡片
卡片序列号已读取
功能 发送
集成读卡,可以一次性读整个区的第 0 块、第 1 块、第 2 块共 3 块的信息,并且返 回卡序列号。 0x0e(帧长度),0x78(命令字),控制字,卡号序列号[0~3](4 个字节),区号,A/B 密码,卡密码[0~5](5 个字节),帧校验(1 个字节)。 例如:发送:
卡密码出厂时为 6 个 0xFF
返回Biblioteka Baidu
0x05,0x08,0x08 寻不到卡 0x05,0x09,0x09 有两张以上卡片同时在感应区,发生冲突 0x05,0x0a,0x0a 无法选择激活卡片 0x05,0x0b, 卡 号 密码装载失败,卡片序列号已知 [0~3],校验码 0x05,0x0c, 卡 号 密码认证失败,卡片序列号已知 [0~3] ,校验码 0x05,0x01, 卡 号 密码认证成功,卡片序列号已知,但写扇区内容失败
如:3E 69 17 00 00 00 00 08 AA FF FF FF FF FF FF 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F DC 控制字:
3
卡号序列号:如果在控制字的 bit3 为 0 ,则 Serial 数组的内容无需赋值,否则需要 赋值以便使其寻找指定的卡号。
区号指需要读出的区号,则 0-15 中的某个数,一张卡有 16 个区,各个区有单独密 码
A/B 密码为 0 时以 B 密码来认证,为非 0 时以 A 密码来认证。刚出厂的卡以 A 密码 来认证。