RF系列读写器使用说明

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

RF 系列非接触式 IC 卡读写器
使





RF 系列非接触式 IC 卡读写器使用手册

一. 1.1 1.2 1.3 1.4 1.5 1.6 1.7 二.

RF 系列非接触式 IC 卡读写器简介 ....................................................................................... 3 概述............................................................................................................................................ 3 特性............................................................................................................................................ 3 设备接口.................................................................................................................................... 3 读写器装箱清单 ........................................................................................................................ 4 程序安装.................................................................................................................................... 4 软件............................................................................................................................................ 4 技术指标.................................................................................................................................... 4 库函数说明................................................................................................................................ 5
2.1 函数使用说明.................................................................................................................................. 5 2.2 库函数一览表.................................................................................................................................. 6 2.3WINDOWS 32 位动态库 .................................................................................................................... 7 2.4 库函数使用范例 ............................................................................................................................ 15 2.5 函数错误类型代码 ........................................................................................................................ 15 附录 1 MIFARE ONE 射频卡的特性 ................................................................................................ 16
2


RF 系列非接触式 IC 卡读写器使用手册
一. RF 系列非接触式 IC 卡读写器简介 1.1 概述
RF 系列非接触式 IC 卡读写器是由主机、天线、串行接口等组成,通过 RS232 串行接口能实 现同 PC 机的连接。

随机提供的接口函数库可满足用户二次开发的需要;其完善、可靠的接口函 数,支持访问射频卡的全部功能。

目前该设备已广泛地应用于门禁、考勤及高速公路、油站、停 车场、公交等收费系统中。


1.2 特性
z z 适用于符合 MIFARE 标准的非接触卡 支持 MIFARE 标准 - 工作频率 13.56MHZ - 以 106kbit/s 速率高速访问射频卡 - 数据加密和双向验证 - 防冲突,可同时读取多张射频卡 - 通信错误自动侦测 功能操作:读、写、初始化值、加值、减值、读值和装载密码等 通讯接口:RS232 串口/USB 接口 波特率:9600~115200 bit/s,自动侦测 操作距离:平均 50MM 数码管显示:8 位数码管显示 控制蜂鸣器鸣响功能 提供丰富的二次开发平台和应用范例
z z
z
z
z
z z
1.3 设备接口
RS232 串口 DC5V 电源
读写器 内置天线
RF 卡
RS232 串行接口用于与上位 PC 联机通讯;
3


RF 系列非接触式 IC 卡读写器使用手册
1.4 读写器装箱清单
包装盒内配有:读写器,通讯线,驱动软盘, 5V 电源(独立包装)
1.5 程序安装
安装步骤: a. 将通讯线一端接到读写器上,另一端接至计算机串口上; b. 接通读写器电源; c. 打开计算机,进入 WINDOWS 98 或 WINDOWS2000/ME/XP,将驱动软盘插入软驱; e. 运行 setup 文件 注: 安装结束后,在 Program files 下创建一个 rfreader 的子目录,所有软件均在此目录下。


1.6 软件
RF 系列读写器软件包括:演示程序、函数库和应用范例 a. 演示程序 提供 Windows 版演示程序: DemoRF.exe。

b. 函数库 C 语言接口函数库 WINDOWS32 位动态库 c. 应用范例 EXAMPLES 目录下提供各种开发平台的应用范例,包括 VB、VC、DELPHI、C 等。


1.7 技术指标
z 支持 MIFARE 标准 - 发射频率:13.56MHz - 访问卡速率:106Kbit/s 接口功能:RS232 串行接口/USB 接口 波特率:9600~115200bit/s ,自动侦测 工作电源: DC 5V±5% 读写距离:平均为 50mm(Mifare 标准卡读写距离) 最大功耗:200mW 环境温度:0°С∼ 50°С 相对湿度:30%∼95% 重量:约 200 克
z z z z z z z
z
4


RF 系列非接触式 IC 卡读写器使用手册
二. 库函数说明 2.1 函数使用说明
函数调用应遵循如下规则: (1) 程序开始,首先要调用 rf_init( ) 函数初始化串口。

(2) 用 rf_load_kdy()将卡中某一扇区密码输入到读写器中,一次只能操作一个扇区。

( 3) 调用 rf_card()函数(相当连续调用 rf_request()、anticoll()、select()三个函数) ,成功可返 回卡的序列号。

(4) 用 rf_anthetication() 函数验证设备密码和卡中密码,一次只能验证一个扇区。

( 5) 对已验证过的扇区可进行读、写、初始化值、加值、减值等功能操作。

对其它扇区的读、 写操作必须重复上述(3) 、 (4)过程。

(6) 由于高级函数集成了若干低级函数,所以调用前可不必运行(3) 、 (4)过程。

(7) 对某张卡操作完成后,应用 rf_halt()函数中止对该卡的操作。

( 8) 程序正常退出或因错误退出之前,要用 rf_exit()函数关闭串口;否则再次执行初始化串 口时将出错。

(9) 有关调用各种函数库的具体方法,请参考\Examples\目录下的使用范例。


5


RF 系列非接触式 IC 卡读写器使用手册
2.2 库函数一览表
序号 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 usb_init() rf_init () rf_exit () rf_card () rf_authentication () rf_halt () rf_read () rf_read_hex () rf_write () rf_write_hex () rf_intival () rf_increment () rf_decrement () rf_readval () rf_restore () rf_transfer () rf_load_key () rf_load_key_hex () rf_beep () rf_disp () rf_request () rf_anticoll () Rf_select () Rf_encrypt () Rf_decrypt () Rf_get_status () Rf_reset () Rf_initval () Rf_HL_decrement () Rf_HL_inctement () Rf_HL_write () Rf_HL_read () Rf_initval_ml () Rf_decrement_ml () Rf_readval_ml () 函数 初始化串口 关闭串口 寻卡 验证卡中某一扇区密码 中止卡操作 读数据(字符) 读数据(十六进制) 写数据(字符) 写数据(十六进制) 初始化块值 加值 减值 读值 将块数据传到卡的内部寄存器 中 将寄存器的数据传到块中 向读写器下载授权密码 向读写器下载授权密码 (十六进 制) 蜂鸣器鸣叫 数码管显示数据 寻卡请求 防止卡冲突 选取一个给定序列号的卡 DES 加密算法 DES 解密算法 读取读写器的版本号 射频头复位 高级初始化值 高级增值操作 高级减值操作 高级写 高级读 ML 卡初始化值 ML 卡减值操作 ML 卡读值操作
6
说明 初始化 USB 通讯
备注
C 语言库中未提供 此函数
FoxPro For Dos 库 中未提供此函数 FoxPro For Dos 库 中未提供此函数 FoxPro For Dos 库 中未提供此函数


RF 系列非接触式 IC 卡读写器使用手册
2.3Windows 32 位动态库
(0)HANDLE usb_init(); 功 能:初始化 USB 通讯 参 数:无 返 回:成功则返回设备描述符(≥0) 例:HANDLE icdev; icdev=usb_init(); (1)HANDLE rf_init(__int16 port,long baud); 功 能:初始化串口 参 数:__int16 port:通讯口号(0~3) long baud:通讯波特率(9600~115200) 返 回:成功则返回设备描述符(≥0) 例:HANDLE icdev; icdev=rf_init(1,115200); /*初始化 com2 口以波特率 115200*/ (2)__int16 rf_exit(HANDLE icdev); 功 能:关闭串口 参 数:HANDLE icdev:rf_init()返回的设备描述符 返 回:成功返回 0 例:rf_exit(icdev); (3)__int16 rf_card(HANDLE icdev,unsigned char _Mode,unsigned long *_Snr); 功 能:寻卡,能返回在工作区域内某张卡的序列号 参 数:HANDLE icdev:rf_init()返回的设备描述符 unsigned char _Mode:寻卡模式 Mode=0: IDLE 模式,一次操作一张卡 Mode=1: ALL 模式, 一次操作多张卡 unsigned long *_Snr: 返回卡的序列号地址 返 回:成功则返回 0 例:__int16 st; unsigned long snr; st=rf_card(icdev,IDLE,&snr); 注:如果设为 IDLE 模式,则在对卡操作完成后,须执行 rf_halt()指令中止对卡的操作。

这样,只有该卡离开并重新进入操作区时,读写器才能对它再次操作。

(4)__int16 rf_authentication(HANDLE icdev ,unsigned char _Mode, unsigned char _SecNr); 功 能:验证某一扇区密码 参 数:HANDLE icdev:rf_init()返回的设备描述符 unsigned char _Mode:验证密码的方式 取值如下: 0 — 用 KEYSET0 和 KEYA 验证 1 — 用 KEYSET1 和 KEYA 验证
7


RF 系列非接触式 IC 卡读写器使用手册 2 — 用 KEYSET2 和 KEYA 验证 4 — 用 KEYSET0 和 KEYB 验证 5 — 用 KEYSET1 和 KEYB 验证 6 — 用 KEYSET2 和 KEYB 验证 unsigned char _SecNr:要验证密码的扇区号(0~15) 返 回:成功则返回 0 例:__int16 st; st=rf_authentication(icdev,0,0); 注:每张卡上有 A 密码和 B 密码,可根据实际需要确定是否使用 B 密码,这由卡的存取 控制位来决定。

此外,读写器中可以存放三套密码,可用 rf_load_key()分别装 入,只有装入后才能使用验证密码函数验证。

(5)__int16 rf_halt(HANDLE icdev); 功 能:中止卡操作 参 数:HANDLE icdev:rf_init()返回的设备描述符 返 回:成功则返回 0 例:__int16 st; st=rf_halt(icdev); 注:使用 rf_card()函数时,如果模式选择为 0 则在对卡进行读写操作完毕后, 必须执行 rf_halt(),且只能当该卡离开并再次进入操作区域时,读写器 才能够再次操作它。

(6)__int16 rf_read(HANDLE icdev,usigned char _Adr,unsigned char *_Data); 功 能:读数据,一次必须读一个块 参 数:HANDLE icdev:rf_init()返回的设备描述符 unsigned char _Adr:块地址(0~63) unsigned char *_Data:读出数据 返 回:成功则返回 0 例:__int16 st; static unsigned char data[16] st=rf_read(icdev,0,data); (7)__int16 rf_read_hex(HANDLE icdev,usigned char _Adr,unsigned char *_Data); 功 能:以十六进制读数据,一次必须读一个块 参 数:HANDLE icdev:rf_init()返回的设备描述符 unsigned char _Adr:块地址(0~63) unsigned char *_Data:读出数据 返 回:成功则返回 0 例:__int16 st; static unsigned char data[32] st=rf_read_hex(icdev,0,data); /*读出数据格式如 rf_write_hex*/ (8)__int16 rf_write(HANDLE icdev,unsigned char _Adr,unsigned char *_Data); 功 能:写数据, 一次必须写一个块 参 数:HANDLE icdev:rf_init()返回的设备描述符 unsigned char _Adr:块地址(1~63)
8


RF 系列非接触式 IC 卡读写器使用手册 unsigned char *_Data:写入数据,块长度为 16 B 返 回:成功则返回 0 例:__int16 st; static unsigned char data[16] /* 给 data 赋值*/ st=rf_write(icdev,1,data); /*写入块 1*/ (9)__int16 rf_write_hex(HANDLE icdev,unsigned char _Adr,unsigned char *_Data); 功 能:以十六进制写数据, 一次必须写一个块 参 数:HANDLE icdev:rf_init()返回的设备描述符 unsigned char _Adr:块地址(1~63) unsigned char *_Data:写入数据,块长度为 32Byte 返 回:成功则返回 0 例:__int16 st; unsigned char data[32]="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; /* data 赋值为 16 个 0xaa*/ st=rf_write_hex(icdev,1,data); /*写入块 1*/ (10)__int16 rf_initval(HANDLE icdev,unsigned char _Adr,unsigned long _Value); 功 能:初始化块值 参 数:HANDLE icdev:rf_init()返回的设备描述符 unsigned char _Adr:块地址(1~63) unsigned long _Value:初始值 返 回:成功则返回 0 例:__int16 st; unsigned long value; value=1000; st=rf_initval(icdev,1,value); /*将块 1 的值初始化为 value*/ 注:作为数值处理的块,是以特殊格式存贮的,所以必须用初始化值函数初始化, 初始化之后方可进行读、减、加的处理。

(11)__int16 rf_increment(HANDLE icdev,unsigned char _Adr,unsigned long _Value); 功 能:块增值操作 参 数:HANDLE icdev:rf_init()返回的设备描述符 unsigned char _Adr:块地址(1~63) unsigned long _Value:要增加的值 返 回:成功则返回 0; 例:__int16 st; unsigned long value; value=1; st=rf_increment(icdev,1,value); /*将块 1 的值增加 value*/ (12)__int16 rf_decrment(HANDLE icdev,unsigned char _Adr,unsigned long _Value); 功 能:块减值操作 参 数:HANDLE icdev:rf_init()返回的设备描述符 unsigned char _Adr:块地址(1~63)
9


RF 系列非接触式 IC 卡读写器使用手册 unsigned long _Value:要减少的值 返 回:成功则返回 0 例:__int16 st; unsigned long value; value=1; st=rf_decrement(icdev,1,value);
/*将块 1 的值减少 value*/
(13)__int16 rf_readval(HANDLE icdev,unsigned char _Adr,unsigned long *_Value); 功 能:读值 参 数:HANDLE icdev:rf_init()返回的设备描述符 unsigned char _Adr:块地址(0~63) unsigned long *_Value:返回读出值的地址 返 回:成功返回 0 例:__int16 st; unsigned long value; st=rf_readval(icdev,1,&value); /*读出块 1 的值,放入 value*/ (14)__int16 rf_restore(HANDLE icdev,unsigned char _Adr); 功 能:将某块的数据传入卡的内部寄存器中 参 数:HANDLE icdev:rf_init()返回的设备描述符 unsigned char _Adr:要进行回传的地址 返 回:成功返回 0 例:__int16 st; st=rf_restore(icdev,1); 注:用此函数将某一块内的数值传入卡的内部寄存器,然后用 rf_transfer()函数 将寄存器的数据再传送到另一块中去,即实现了块与块之间的数值传送。

(15)__int16 rf_transfer(HANDLE icdev,unsigned char _Adr); 功 能:将寄存器的数据传送到某一块中 参 数:HANDLE icdev:rf_init()返回的设备描述符 unsigned char _Adr:要传送的地址(0~63) 返 回:成功返回 0 例:__int16 st; st=rf_transfer(icdev,1); 注:见 rf_restore()的说明。

(16)__int16 rf_load_key(HANDLE icdev,unsigned char _Mode,unsigned char SecNr, unsigned char * _Nkey); 功 能:向读写器的 RAM 装入密码 参 数:HANDLE icdev:rf_init()返回的设备描述符 unsigned char _Mode :同 rf_authentication() unsigned char _SecNr:同 rf_authentication() unsigned char *_Nkey:包含了要写入硬件系统 RAM 中的卡密码 返 回:成功则返回 0 例://key A and key B unsigned char tk[2][7]= { {0xa0,0xa1,0xa2,0xa3,0xa4,0xa5},
10


{0xb0,0xb1,0xb2,0xb3,0xb4,0xb5} };
/*装入1扇区的A密码 0套,*/
if((rf_load_key(icdev,0, 1,tk[1]))!=0)
{
printf("Load key error!");
rf_exit();
exit(1);
}
注:*_Nkey是与卡中的密码相对应的密码。

(17)__int16 rf_load_key_hex(HANDLE icdev,unsigned char _Mode,
unsigned char SecNr,char * _Nkey);
功能:向读写器的RAM装入16进制密码
参数:HANDLE icdev:rf_init()返回的设备描述符
unsigned char _Mode :同 rf_authentication()
unsigned char _SecNr:同 rf_authentication()
unsigned char *_Nkey:要写入读写器RAM中的卡密码
返回:成功则返回 0
例://key A
unsigned char tk[]= "a0a1a2a3a4a5"/*等同于{0xa0_.0xa5}*/
/*装入1扇区的A密码|0套,*/
if((rf_load_key_Hex(icdev,0, 1,tk))!=0)
{
printf("Load key error!");
rf_exit();
exit(1);
}
注:*_Nkey是与卡中的密码相对应的密码。

(18)_int16 rf_get_status(unsigned char *_Status);
功能:取得读写器的版本号
参数:unsigned char *_Status:返回读写器版本信息
返回:成功则返回 0
例:int st;
unsigned char status[32];
st=rf_get_status(status);
(19) __int16 rf_request(int icdev,unsigned char _Mode, unsigned int *TagType); 功能:寻卡请求
参数: HANDLE icdev:设备描述符
unsigned char _Mode:寻卡模式,为0或1
Mode=0:IDLE模式,一次只选一张卡
Mode=1:ALL模式,一次可选多张卡
unsigned int *Tagtype:指向返回的卡类型值
返回:成功则返回 0
例:int st;
st=rf_request(icdev,IDLE,tagtype);
注:对卡操作前先执行寻卡指令
(20)__int16 rf_anticoll(int icdev,unsigned char _Bcnt,unsigned long *_Snr);
功能:防止卡冲突;返回卡的序列号
参数:HANDLE icdev: 设备描述符
unsigned char _Bcnt: 预选卡所用的位数,标准值为0(不考虑系列号)
unsigned long *_Snr: 返回的卡序列号地址
返回:成功则返回 0
例:int st;
st=rf_anticoll(0,snr);
注:request指令之后应立即调用anticoll,除非卡的序列号已知。

(21)__int16 rf_select(int icdev,unsigned long _Snr,unsigned char *_Size);
功能:从多个卡中选取一个给定序列号的卡
参数:HANDLE icdev:设备描述符
unsigned long _Snr:卡序列号
unsigned char *_Size:指向返回的卡容量的数据
返回:成功则返回 0
例: int st;
snr=239474;
st=rf_select(snr,size); /* 返回239474卡的容量 */
注:上述rf_card()寻卡函数包含了19~21三个低级函数。

每次对卡重新操作时首先要调用rf_card()函数(或连续调用19~21三个函数)。

(22)__int16 rf_encrypt(char *key,char *ptrsource,unsigned __int16 msglen,
char *ptrdest);
功能:DES算法加密
参数:char *key:加密的密码,长度为8
char *ptrsource:原文
unsigned __int16 msglen:原文长度
char *ptrdest:密文
返回:成功则返回0
例:/* 将长度为16的”abcdefghabcdefgh”用密码“12345678”加密 */
rf_encrypt(“12345678”,”abcdefghabcdefgh”,16,ptrdest)
(23)__int16 rf_decrypt(char *key,char *ptrsource,unsigned __int16 msglen,
char *ptrdest);
功能:DES算法解密函数
参数:char *key:加密的密码,长度为8
char *ptrsource:加密后密文
unsigned __int16 msglen:原文长度
char *ptrdest:原文
返回:成功则返回0
例:略,使用过程与rf_encrypt相反。

(24)__int rf_beep(unsigned int _Msec);
功能:蜂鸣
参数:unsigned int _Msec:蜂鸣时间的长短,单位是10毫秒;
返回:成功则返回 0
例:int st;
st=rf_beep(10); /*鸣叫100毫秒*/
(25)__int rf_disp(HANDLE icdev,unsigned char pt_mode,unsigned int digit);
功能:使读写器的数码管显示数字
参数:HANDLE icdev:rf_init()返回的设备描述符
unsigned char pt_mode: 小数点显示模式
取值如下:
0 —小数点熄灭
1 —个位后的小数点位亮
2 —十位后的小数点位亮
3 —百位后的小数点位亮
4 —千位后的小数点位亮
unsigned int digit:要显示的数
返回:成功则返回 0
例:int st;
st=rf_disp(icdev,0,1234); /*显示整数1234*/
(26)__int16 rf_reset(HANDLE icdev,unsigned __int16 _Msec);
功能:射频头复位
参数:HANDLE icdev:rf_init()返回的设备描述符
unsigned __int16 _Msec:复位时间,0~500毫秒有效
返回:成功则返回 0
例:st=rf_reset(icdev,60);
(27)__int16 rf_HL_initval(HANDLE icdev,unsigned char _Mode,unsigned char _SecNr,
unsigned long _Value,unsigned char *_Snr);
功能:高级初始化值
参数:HANDLE icdev:rf_init()返回的设备描述符
unsigned char _Mode:寻卡模式,为0、1或2
Mode=0: IDLE模式,一次只操作一张卡
1:ALL模式,一次可操作多张卡
2:只对给定序列号的卡操作
unsigned char _SecNr:扇区号(0~15)
unsigned long _Value:初始值
unsigned char *_Snr:卡的序列号地址
返回:成功则返回 0
例:st=rf_HL_initval(icdev,0,3,100L,&Snr);
注:高级函数为几个低级函数的组合,对卡操作之前不必使用rf_card()和
rf_authentication()函数。

(28)__int16 rf_HL_decrement(HANDLE icdev,unsigned char _Mode,
unsigned char _SecNr,unsigned long _Value,
unsigned long _Snr,unsigned long *_NValue,
unsigned long *_NSnr);
功能:高级减值函数
参数:HANDLE icdev:rf_init()返回的设备描述符
unsigned char _Mode:寻卡模式,同HR_initval();
unsigned char _SecNr:扇区号(0~15)
unsigned long _Value:要减的值
unsigned long _Snr:卡的序列号
unsigned long *_NValue:减后的值的地址
unsigned long *_NSnr:返回卡的序列号地址
返回:成功则返回 0
例:st=rf_HL_decrement(icdev,0,2,1,Snr,&Nvalue,&NSnr);
(29)__int16 rf_HL_increment(HANDLE icdev,unsigned char _Mode,
unsigned char _SecNr,unsigned long _Value,
unsigned long _Snr,unsigned long *_NValue,
unsigned long *_NSnr);
功能:高级增值函数
参数:HANDLE icdev:rf_init()返回的设备描述符
unsigned char _Mode:寻卡模式,同HL_initval();
unsigned char _SecNr:扇区号(0~15)
unsigned long _Value:要加的值
unsigned long _Snr:卡的序列号
unsigned long *_NValue:加后的值的地址
unsigned long *_NSnr:返回卡的序列号地址
返回:成功则返回 0
例:st=rf_HL_increment(icdev,0,2,1,Snr,&Nvalue,&NSnr);
(30)__int16 rf_HL_write(HANDLE icdev,unsigned char _Mode,unsigned char _Adr, unsigned long *_Snr,unsigned char *_Data);
功能:高级写数据
参数:HANDLE icdev:rf_init()返回的设备描述符
unsigned char _Mode:寻卡模式,为0、1或2
Mode=0: IDLE模式,一次只操作一张卡
1:ALL模式,一次可操作多张卡
2:只对给定序列号的卡操作
unsigned char _Adr:块地址(1~63)
unsigned long *_Snr:卡的序列号地址
unsigned char *_Data:写入的数据
返回:成功则返回 0
例:st=rf_HL_write(icdev,0,3,&Snr,data);
(31)__int16 rf_HL_read(HANDLE icdev,unsigned char _Mode,unsigned char _Adr, unsigned long _Snr,unsigned char *_Data,
unsigned long *_NSnr);
功能:高级读数据
参数:HANDLE icdev:rf_init()返回的设备描述符
unsigned char _Mode:同HL_write();
unsigned char _Adr:块地址(0~63)
unsigned long _Snr:卡的序列号
unsigned char *_Data:读出的数据
unsigned long *_NSnr:返回卡的序列号地址
返回:成功则返回 0
例:st=rf_HL_read(icdev,0,3,Snr,data,&NSnr); 2.4库函数使用范例
参见随机盘\EXAMPLES目录下各种开发平台的应用范例2.5函数错误类型代码
十六进制错误类型
-0x80 读错误
-0x81 写错误
-0x82 通讯错误
-0x84 超时错误
-0x87 格式错误
附录1 Mifare One射频卡的特性
特性:
z1K字节 EEPROM
z分为16个扇区,每个扇区包括4 块,每块16个字节,以块为存取单位
z用户可自定义每个存储块的访问条件
z每张卡有唯一序列号,为32位
z具有防冲突机制,支持多卡操作
z非接触传送数据和无源(卡中无电源)
z至少10 年数据保存期
z至少10万次擦写
z读写距离: 在100mm内(与天线形状有关)
z工作频率: 13.56 MHZ
z通信速率: 106kbit/s
z典型交易过程: <100 ms(包括备份管理)
z温度范围: -20℃~50℃
存储结构:
1.1024*8 位 EEPROM存储区分为16 个扇区,每扇区分为4块(块0, 块1, 块2, 块
3),按块号编址为0~63共64块。

存储区的分布图如下:
扇区号序号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15名称块号
0 厂商代码区0
0 1 数据区 1
2 数据区 2
3 A 密码存取控制B密码扇区0控制块区 3
0 数据区 4
1 1 数据区 5
2 数据区 6
3 A密码存取控制B密码扇区1控制块区7


0 数据区60
15 1 数据区61
2 数据区62
A密码存取控制B密码扇区15控制块区63 3
厂商代码区: 第0扇区的块0(即绝对地址0块)用于存放厂商代码,已经固化,不可
更改。

最高位最低位
数据区: 所有扇区都有3块(每块16个字节)存储数据。

(扇区0只有两个数据块和
一个只读厂商代码块)
值块: 值块可用作电子钱包(有效的命令有:
read,write,increment,decrement,restore,transfer).每个值块的值为4个字节。

2.扇区控制块(块 3): 每个扇区都有一个扇区控制块包括:
z密码A和密码B(可选), 读取时返回 “0”
z访问该扇区4块的存取控制
如果不需要密码B,块3的最后6个字节可用作数据。

控制属性
各扇区的块0、块1、块2为数据块,用于存贮数据;块3为控制块,存放密码A、存取控制、密码B,其结构如下:
A0A1A2A3A4A5 FF 07 80 69 B0B1B2B3B4B5
密码A(6字节) 存取控制(4字节) 密码B(6字节)
每个扇区的密码和存取控制都是独立的,可以根据实际需要设定各自的密码及存取控制。

在存取控制中每个块都有相应的三个控制位,定义如下:
块0: C10 C20 C30
块1: C11 C21 C31
块2: C12 C22 C32
块3: C13 C23 C33
三个控制位以正和反两种形式存在于存取控制字节中,决定了该块的访问权限(如进行减值操作必须验证KEY A,进行加值操作必须验证KEY B,等等)。

三个控制位在存取控制字节中的位置如下(字节9为备用字节,默认值为0x69):
6 5 4 3 2 1 0
7
bit
字节6 C23_b C22_b C21_b C20_b C13_b C12_b C11_b C10_b
字节7 C13 C12 C11 C10 C33_b C32_b C31_b C30_b
字节8 C33 C32 C31 C30 C23 C22 C21 C20
(注: _b表示取反)
其中,黑色区控制块3,蓝色区控制块2,绿色区控制块1,红色区控制块0。

数据块(块0、块1、块2)的存取控制如下:
控制位(X=0..2) 访问条件(对块0、1、2)
C1X C2X C3X Read Write Increment Decrement
transfer
restore
0 0 0 KeyA|B KeyA|B KeyA|B KeyA|B
0 1 0 KeyA|B Never Never Never
1 0 0 KeyA|B KeyB Never Never
1 1 0 KeyA|B KeyB KeyB KeyA|B
0 0 1 KeyA|B Never Never KeyA|B
Never Never
0 1 1 KeyB KeyB
1 0 1 KeyB Never Never Never
Never Never
1 1 1 Never Never
(KeyA|B 表示密码A或密码B,Never表示任何条件下不能实现)
例如:当块0的存取控制位C10 C20 C30=100时,验证密码A或密码B正确后可读;验证密码B正确后可写;不能进行加值、减值操作。

控制块(块3)的存取控制与数据块(块0、1、2)不同,它的存取控制如下:
控制位密码A 存取控制密码B
Read Write Read Write Read Write C13
C23C33
0 0 0 Never KeyA|B KeyA|B Never KeyA|B KeyA|B
0 1 0 Never Never KeyA|B Never KeyA|B Never
1 0 0 Never KeyB KeyA|B Never Never KeyB
1 1 0 Never Never KeyA|B Never Never Never
0 0 1 Never KeyA|B KeyA|B KeyA|B KeyA|B KeyA|B
0 1 1 Never KeyB KeyA|B KeyB Never KeyB
1 0 1 Never Never KeyA|B KeyB Never Never
1 1 1 Never Never KeyA|B Never Never Never
例如:当块3的存取控制位C13 C23 C33=100时,表示:
密码A:不可读,验证KEYB正确后,可写(更改)。

存取控制:验证KEYA或KEYB正确后,可读不可写。

密码B:不可读,验证KEYB正确后,可写。

工作原理
卡片的电气部分只由一个天线和 ASIC 组成。

天线:卡片的天线是只有几组绕线的线圈,很适于封装到 IS0 卡片中。

ASIC:卡片的 ASIC 由一个高速(106KB波特率)的 RF 接口,一个控制单元和一个8K位EEPROM 组成。

读写器向 M1 卡发一组固定频率的电磁波,卡片内有一个 LC 串联谐振电路,其频率与讯写器发射的频率相同,在电磁波的激励下,LC 谐振电路产生共振,从而使电容内有了电荷,在这个电容的另一端,接有一个单向导通的电子泵,将电容内的电荷送到另一个电容内储存,当所积累的电荷达到 2V 时,此电容可做为电源为其它电路提供工作电压,将卡内数据发射出去或接取读写器的数据。

功能介绍:
1.Request Standard/ALL:一张卡上电复位后就可以响应读写器发出的寻卡命令。


写器向天线范围内的所有卡片发出命令,并识别卡片的型号。

2.Anticollision Loop:在防冲突循环中将读出卡片的系列号。

如果有几张卡
片都在读写器的读写范围内,可以通过唯一的系列号区别它们,并选中其中一张卡
片,其余没有选中的卡片将进入等待状态,等待下一次寻卡命令。

3.Select Card:用选卡命令读写器选择一张卡片来进行密码验证和有关的
存储操作。

卡片将对代码为08h 的选卡命令ATS 做出响应,该命令决定了所选卡
片的类型。

4. 3 Pass Authentication:读写器选中一张卡片后就指定了后续存取访问的存储空间,
并以次响应开始3重密码验证。

5. HALT:调用rf_halt () 函数来停止对卡片的所有操作,卡片进入HALT状态。

6. Memory Operations:密码验证通过后,可进行以下操作:
z读块:读取一个存储块的内容
z写块:写入一个存储块的内容.
z减值:减少一个块的值并保存在内部寄存器内
z增值:增加一个块的值并保存在内部寄存器内
z保存:将块的内容写入数据寄存器中
z传输:将内部寄存器的内容写入某一块中
注:用rf_ restore () 函数将某一块的内容传到内部寄存器内,然后用rf_truansfer() 函数将内部寄存器的内容传到卡片其余块中。

通过这种方法,可以将数据从一块传向另一块。

相关文档
最新文档