读写器通讯协议

读写器开发使用说明

 

 

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卡所有用途的功能,比如选中卡、认证、读卡、写卡、改密码、休眠卡能功能。

 

 

二、单片机串/UART/232接口控制协议

硬件接口提示

 

波特率参数为:19200N81

 

发送帧格式

帧长度(1字节)

帧内容(不超过50个字节)

帧内容的和校验(1字节)

 

接收帧格式

帧长度(1字节)

帧内容(不超过50个字节)

帧内容的和校验(1字节)

 

注:帧长度仅指帧内容的字节数

 

 

 

 

 

 

1、读IC卡号

功能

只读取IC卡序列号

发送

:0xF0前面的0x表示F0为十六进制数据,等于十进制的240

 

如:01 F0 F0

 

寻到卡时返回:

如:

发送:01 F0 F0 ,有卡时返回:05 00 40 AD 8B 28 4E

其中4E  =  00 异或 40异或AD异或8B异或28

 

返回

寻不到卡

有两张以上卡片同时在感应区,发生冲突

无法选择激活卡片

卡片序列号已读取

 

 

 

2、集成读卡

功能

集成读卡,可以一次性读整个区的第0块、第1块、第2块共3块的信息,并且返回卡序列号。

发送

0x0e(帧长度)0x78(命令字),控制字,卡号序列号[0~3](4个字节)区号A/B密码,卡密码[0~5](5个字节),帧校验(1个字节)

例如:发送:

如: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 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

 

 

卡号序列号:如果在控制字的bit30 ,则Serial数组的内容无需赋值,否则需要赋值以便使其寻找指定的卡号。

 

区号指需要读出的区号,则0-15中的某个数,一张卡有16个区,各个区有单独密码

          

A/B密码0时以B密码来认证,为非0时以A密码来认证。刚出厂的卡以A密码来认证。

 

卡密码出厂时为60xFF

 

返回

 

0x01,0x08,0x08

寻不到卡

0x01,0x09,0x09

有两张以上卡片同时在感应区,发生冲突

0x01,0x0a,0x0a

无法选择激活卡片

0x05,0x0b,卡号[0~3], 帧校验

密码装载失败,卡片序列号已知

0x05,0x0c,卡号[0~3] , 帧校验

密码认证失败,卡片序列号已知

0x05,0x01,卡号[0~3] , 帧校验

密码认证成功,卡片序列号已知,但读取扇区内容失败

0x35,0x02,卡号[0~3],扇区内容[0~47] , 帧校验

0块读出,但第12块没读出,仅扇区内容前16个字节的数据有效

0x35,0x03,卡号[0~3],扇区内容[0~47] , 帧校验

01块读出,但第2块没读出,仅扇区内容前32个字节的数据有效

0x35,0x00,卡号[0~3],扇区内容[0~47] , 帧校验

012块读出,扇区内容所有数据有效

 

3、集成写卡

功能

集成读卡,写卡,可以一次性写整个区的第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个字节),校验码

 

如: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

控制字:

 

推荐使用方法如下:

//先定义以下常量

#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

 

 

卡号序列号:如果在控制字的bit30 ,则Serial数组的内容无需赋值,否则需要赋值以便使其寻找指定的卡号。

 

区号指需要写进的区号,则0-15中的某个数,一张卡有16个区,各个区有单独密码,可独立使用

          

A/B密码0时以B密码来认证,为非0时以A密码来认证。刚出厂的卡以A密码来认证。

 

卡密码出厂时为60xFF

 

返回

 

0x05,0x08,0x08

寻不到卡

0x05,0x09,0x09

有两张以上卡片同时在感应区,发生冲突

0x05,0x0a,0x0a

无法选择激活卡片

0x05,0x0b,卡号[0~3],校验码

密码装载失败,卡片序列号已知

0x05,0x0c,卡号[0~3] ,校验码

密码认证失败,卡片序列号已知

0x05,0x01,卡号[0~3] ,校验码

密码认证成功,卡片序列号已知,但写扇区内容失败

0x05,0x02,卡号[0~3] ,校验码

0块写入成功,但第12块写入失败

0x05,0x03,卡号[0~3] ,校验码

01块写入成功,但第2块写入失败

0x05,0x00,卡号[0~3] ,校验码

012块写入成功,如05 00 40 AD 8B 28 4E

 

 

驱动蜂鸣器响

发送:

 

 

改扇区密码

功能

改扇区密码,在知道原密码的情况下改某一扇区的密码。

发送

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

 

控制字:

 

推荐使用方法如下:

//先定义以下常量

#define NEEDSERIAL  0x08

举例:

//以下控制字含义:只改动指定序列号的卡

控制字= NEEDSERIAL

 

//以下控制字含义:改动任何卡

控制字= 0

 

卡号序列号:如果在控制字的bit30 ,则Serial数组的内容无需赋值,否则需要赋值以便使其寻找指定的卡号。

 

区号指需要写进的区号,则0-15中的某个数,一张卡有16个区,各个区有单独密码,可独立使用

          

A/B密码0时以B密码来认证,为非0时以A密码来认证。刚出厂的卡以A密码来认证。

 

卡密码出厂时为60xFF

 

 

返回(帧内容,不包括帧长度和帧校检码)

 

0x01,0x08,0x08

寻不到卡

0x01,0x09

有两张以上卡片同时在感应区,发生冲突

0x01,0x0a

无法选择激活卡片

0x05,0x0b,卡号[0~3],校验码

密码装载失败,卡片序列号已知

0x05,0x0c,卡号[0~3] ,校验码

密码认证失败,卡片序列号已知

0x05,0x00,卡号[0~3] ,校验码

改密码成功

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值