RFID非接触式IC卡读写器用户手册.docx
《RFID非接触式IC卡读写器用户手册.docx》由会员分享,可在线阅读,更多相关《RFID非接触式IC卡读写器用户手册.docx(12页珍藏版)》请在冰豆网上搜索。
RFID非接触式IC卡读写器用户手册
RFID非接触式IC卡读写器用户手册
V1.02
1、通信协议描述
1.1协议概述
该协议是上位机与读写器之间的通讯协议。
通讯的格式是:
1位起始位,1位长度标志位,若干数据位,1位异或校验位,1位结束位。
通讯的最大长度为64字节。
1.2字符定义
字符
数值
定义
STX
0x02
通讯开始
LEN
-
数据长度
DATA
-
数据
BCC
-
异或校验
ETX
0x03
通讯结束
1.3通讯过程示意图
1.4数据格式
Command(2bytes)
Data[0]……Data[m]
2、指令集
2.1指令一览表
指令码
功能
0xC001
寻卡(ISO/IEC15693)
0xC005
读取某一块的信息(ISO/IEC15693)
0xC006
将信息写入某一块(ISO/IEC15693)
0xC007
将某一块锁定(ISO/IEC15693)
0xC008
写入AFI(ISO/IEC15693)
0xC009
锁定AFI(ISO/IEC15693)
0xC00A
写入DSFID(ISO/IEC15693)
0xC00B
锁定DSFID(ISO/IEC15693)
0xC00C
获取系统信息(ISO/IEC15693)
0x3224
寻卡(ISO/IEC14443A存储卡)
0x3225
休眠卡片(ISO/IEC14443A存储卡)
0x3241
激活卡片(ISO/IEC14443A存储卡)
0x3243
读取某一块的信息(ISO/IEC14443A存储卡)
0x3244
将信息写入某一块(ISO/IEC14443A存储卡)
0x3245
读余额(ISO/IEC14443A存储卡)
0x3246
写入余额(ISO/IEC14443A存储卡)
0x3247
余额加值(ISO/IEC14443A存储卡)
0x3248
余额减值(ISO/IEC14443A存储卡)
0x324B
卡片复位(ISO/IEC14443A智能卡)
0x324C
发送应用命令(ISO/IEC14443A智能卡)
2.2状态返回值
返回值
意义
0x0000
操作成功
0xFFFF
操作失败
3、二次开发接口函数说明
3.1适用于符合ISO/IEC14443A标准的存储卡的接口函数
3.1.1MifareS50/S70卡片特性
ØS50具有1K字节的EEPROM,S70具有4K字节的EEPROM
ØS50分为16个扇区,每个扇区包括4块,每块16个字节,以块为存取单位
ØS70分为40个扇区,共256个块,每块16个字节,以块为存取单位
Ø用户可自定义每个存储块的访问条件
Ø每张卡有唯一序列号,为32位
Ø具有防冲突机制,支持多卡操作
Ø非接触传送数据和无源
Ø至少10年数据保存期
Ø至少10万次擦写
Ø读写距离在100mm内
Ø工作频率为13.56MHz
3.1.2函数使用注意事项
该二次开发接口函数库提供用于下发命令至读写器的函数,这些函数能够控制读写器对卡片进行寻卡及读写操作。
在对卡片进行操作前必须先寻卡,寻卡成功后才能对卡片进行后续操作。
卡片的读写操作是以块为单位,每块为16个字节。
不同扇区可以用不同的密钥进行认证,每个扇区又可以使用A密钥或B密钥进行认证。
3.1.3函数说明
(1)寻卡
intfind_14443(BYTE*type,BYTE*card_uid);
////////////////////////////////////////////////////////////////////////////////////////////////////////
//功能:
寻卡
//
//入口参数:
//
//出口参数:
type,指示寻卡成功的卡片为A类卡或是B类卡
//card_uid,指示用于存放UID的起始地址
//
//返回值:
返回0,通信失败
//返回1,操作成功
//返回0xff,操作失败
//
//说明:
获取卡片UID
//////////////////////////////////////////////////////////////////////////////////////////////////////
(2)HALT卡
intset_halt();
////////////////////////////////////////////////////////////////////////////////////////////////////////
//功能:
使卡片休眠
//
//入口参数:
//
//出口参数:
//
//返回值:
返回-2,尚未寻卡
//返回0,通信失败
//返回1,操作成功
//返回0xff,操作失败
//
//说明:
在HALT卡前必须已经寻卡成功
//////////////////////////////////////////////////////////////////////////////////////////////////////
(3)激活卡片
intset_active();
////////////////////////////////////////////////////////////////////////////////////////////////////////
//功能:
激活卡片
//
//入口参数:
//
//出口参数:
//
//返回值:
返回-2,尚未寻卡
//返回0,通信失败
//返回1,操作成功
//返回0xff,操作失败
//
//说明:
可以令处于休眠状态的卡片处于激活状态
//////////////////////////////////////////////////////////////////////////////////////////////////////
(4)读块
intread_block(intpage,intblock,unsignedcharpswtype,unsignedchar*psw,unsignedchar*des_data,int*des_len);
////////////////////////////////////////////////////////////////////////////////////////////////////////
//功能:
读取一个块的值
//
//入口参数:
page,指定要读取的块所在的扇区
//block,指定要读取的块的块号
//pswtype,指定用于认证的密钥的类型,其值可为0x0a或者0x0b
//psw,指示用于认证的密钥的值的起始地址
//
//出口参数:
des_data,指示用于存放读取的数据的起始地址
//des_len,指示用于存放返回读取数据长度的起始地址
//
//返回值:
返回-2,尚未寻卡
//返回-1,传入参数错误
//返回0,通信失败
//返回1,操作成功
//返回0xff,操作失败
//
//说明:
pswtype用于指于认证密钥为A密钥或为B密钥,对应A密钥pswtype必
//须为0x0a,对应B密钥pswtype必须为0x0b。
//////////////////////////////////////////////////////////////////////////////////////////////////////
(5)写块
intwrite_block(intblock,intpage,unsignedcharpswtype,unsignedchar*psw,unsignedchar*src_data,intsrc_len)
//////////////////////////////////////////////////////////////////////////////////////////////////////
//功能:
往一个块写入指定的值
//
//入口参数:
page,指定要写入的块所在的扇区
//block,指定要写入的块的块号
//pswtype,指定用于认证的密钥的类型,其值可为0x0a或者0x0b
//psw,指示用于认证的密钥的值的起始地址
//src_data,指示用于存放要写入的数据的起始地址
//src_len,指示用于存放返回写入数据的长度
//
//出口参数:
//
//返回值:
返回-2,尚未寻卡
//返回-1,传入参数错误
//返回0,通信失败
//返回1,操作成功
//返回0xff,操作失败
//
//说明:
pswtype用于指于认证密钥为A密钥或为B密钥,对应A密钥pswtype必
//须为0x0a,对应B密钥pswtype必须为0x0b。
//////////////////////////////////////////////////////////////////////////////////////////////////////
(6)读余额
intread_account(intpage,intblock,unsignedcharpswtype,unsignedchar*psw,LONG*account)
//////////////////////////////////////////////////////////////////////////////////////////////////////
//功能:
从指定的块里读取钱包的余额(在调用该函数前必须确保钱包已初始化)
//
//入口参数:
page,指定钱包所在的扇区
//block,指定钱包所在的块的块号
//pswtype,指定用于认证的密钥的类型,其值可为0x0a或者0x0b
//psw,指示用于认证的密钥的值的起始地址
//
//出口参数:
account,指示用于存放要读取的余额的起始地址
//
//返回值:
返回-2,尚未寻卡
//返回-1,传入参数错误
//返回0,通信失败
//返回1,操作成功
//返回0xff,操作失败
//
//说明:
pswtype用于指于认证密钥为A密钥或为B密钥,对应A密钥pswtype必
//须为0x0a,对应B密钥pswtype必须为0x0b。
//读余额前必须确保参数指定的扇区和块已初始化为钱包,否则可以通过调
//用write_account()函数来初始化为钱包
//////////////////////////////////////////////////////////////////////////////////////////////////////
(7)写余额(初始化)
intwrite_account(intpage,intblock,unsignedcharpswtype,unsignedchar*psw,LONGaccount)
////////////////////////////////////////////////////////////////////////////////////////////////