CMRF800系列CMRF810系列程序库函数.docx

上传人:b****7 文档编号:11432765 上传时间:2023-03-01 格式:DOCX 页数:30 大小:21.11KB
下载 相关 举报
CMRF800系列CMRF810系列程序库函数.docx_第1页
第1页 / 共30页
CMRF800系列CMRF810系列程序库函数.docx_第2页
第2页 / 共30页
CMRF800系列CMRF810系列程序库函数.docx_第3页
第3页 / 共30页
CMRF800系列CMRF810系列程序库函数.docx_第4页
第4页 / 共30页
CMRF800系列CMRF810系列程序库函数.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

CMRF800系列CMRF810系列程序库函数.docx

《CMRF800系列CMRF810系列程序库函数.docx》由会员分享,可在线阅读,更多相关《CMRF800系列CMRF810系列程序库函数.docx(30页珍藏版)》请在冰豆网上搜索。

CMRF800系列CMRF810系列程序库函数.docx

CMRF800系列CMRF810系列程序库函数

CMRF800系列

CMRF810系列

非接触式智能卡读写器

USBReader开发文档

1、版本说明(版本V1.00)

*Allrightsreserved,Specificationssubjecttochangewithoutnotice.

*版权所有,规格如有更改,恕不另行通知。

2、返回值说明:

2.1 函数返回值代码表:

0x00命令执行成功

0x01命令操作失败(失败原因请参考2.2底层单片机上传代码表)

0x02地址校验错误

0x04读写器返回超时

0x05数据包流水号不正确:

0x07接收异常

0x0A参数值超出范围

2.2 底层单片机上传代码表:

0x80:

参数设置成功

0x81:

参数设置失败

0x82:

通讯超时

0x83:

卡不存在

0x84:

接收卡数据出错

0x87:

未知的错误

0x85:

输入参数或者输入命令格式错误

0x8f:

输入的指令代码不存在()

0x8A:

在对于卡块初始化命令中出现错误(仅用于14443命令)

0x8B:

在防冲突过程中得到错误的序列号(仅用于14443命令)

0x8C密码认证没通过(仅用于14443命令)

0x90卡不支持这个命令(仅用于15693命令)

0x91命令格式有错误(仅用于15693命令)

0x92在命令的FLAG参数中,不支持OPTION模式(仅用于15693命令)

0x93要操作的BLOCK不存在(仅用于15693命令)

0x94要操作的对象已经别锁定,不能进行修改(仅用于15693命令)

0x95锁定操作不成功(仅用于15693命令)

0x96写操作不成功(仅用于15693命令)

3 SystemCommands

系统命令

5、intSetSerNum(unsignedchar*newValue,

unsignedchar*buffer);

函数功能:

设置8个字节的产品序列号。

输入参数:

           描述

*newValue      8个字节的读写器序列号

*buffer      用来返回接收到的数据的指针

输出参数:

*buffer返回STATUS后的状态,如果设置成功,则*buffer=0x80

如果设置失败,则*buffer为底层(读卡器单片机)上传的错误代码(参照底层协议代码表2.2)

返回值:

0x00,设置成功

0x01,设置失败

6、intGetSerNum(unsignedchar*buffer);

函数功能:

读取由厂家预设的1个字节的读卡器地址和8个字节序列号.

输入参数:

*buffer传入一个指针,用来返回接收到的数据

输出参数:

*bufferbuffer[0]读写器地址

buffer[1...8]8个字节的读写器序列号

返回值:

0x00,操作成功

0x01,操作失败

6、intWriteUserInfo(intnum_blk,

intnum_length,

char*user_info);

函数功能:

读卡器提供4个块(每个块不能大于120个字节),共480个字节空间的用户数据区。

用户可以根据需要,储存相应的用户信息到读写器中.

输入参数:

num_blk区域号

num_length数据长度

*user_info用户数据

返回值:

0x00,操作成功

0x01,操作失败

7、intReadUserInfo(intnum_blk,

intnum_length,

char*user_info);

函数功能:

读取读卡器中提供4个块(每个块不能大于120个字节)的数据.

输入参数:

intnum_blk区域号

intnum_length读取的数据长度

*user_info待读入的用户数据

输出参数:

*user_info如果:

操作失败,则user_info[0]为错误代码

如果:

操作成功,则user_info[0..N]为读取的用户信息数据

返回值:

0x00,操作成功

0x01,操作失败

8、intGetVersionNum(char*VersionNum);

函数功能:

读取读写器的版本号.

输入参数:

*VersionNum待读入的版本号

输出参数:

*VersionNum如果:

操作失败,则VersionNum[0]为错误代码

如果:

操作成功,则VersionNum[0..N]为读入的版本号

返回值:

0x00,操作成功

0x01,操作失败

9、intControlLED(unsignedcharfreq,

unsignedcharduration,

unsignedchar*buffer);

函数功能:

设置灯的工作状态,包括,灯亮的周期以及循环的次数

输入参数:

freq周期数

duration次数

*buffer待返回的参数

输出参数:

*buffer如果:

操作失败,则buffer[0]为错误代码(参考2.2)

如果:

操作成功,则buffer[0]为成功标志,即为0x80

返回值:

0x00,操作成功,

0x01,操作失败

10、intControlBuzzer(unsignedcharfreq,

unsignedcharduration,

unsignedchar*buffer);

函数功能:

设置蜂鸣器的工作状态,包括,蜂鸣器的工作周期以及循环的次数

输入参数:

freq周期数

duration次数

*buffer待返回的参数

输出参数:

*buffer如果:

操作失败,则buffer[0]为错误代码(参考2.2)

如果:

操作成功,则buffer[0]为成功标志,即为0x80

返回值:

0x00,操作成功

0x01,操作失败

4、ISO14443Type-ACommands

4.1Type-ACommands

4.1.1intMF_Request(

unsignedcharinf_mode,

unsignedchar*buffer);

函数功能:

发送ISO14443A寻卡指令.

输入参数:

inf_mode寻卡模式

0x01–Idle模式(一次只对一张卡操作)

0x00–All模式(一次可对多张卡操作)

*buffer待返回的参数

输出参数:

*buffer如果:

操作失败,则buffer[0]为错误代码

如果:

操作成功,则buffer[0..1],返回2个字节的数据串

返回值:

0x00,操作成功

0x01,操作失败

4.1.2intMF_Anticoll(

unsignedchar*snr,

unsignedchar&status);

函数功能:

检测卡片数量,单卡或多卡,并返回4个字节的卡号。

(如果有多张卡,就返回其中一张卡的卡号)

输入参数:

*snr传送一个指针,返回4个字节的卡号

&Status传送一个指针,返回卡片的数量

输出参数:

如果操作成功

Status检测到的卡片的数量(0x00表示检测到单卡,0x01表示检测到多卡)

*snr4个字节的卡号(snr[0..3])

如果操作失败

*snr为错误代码(具体参考2.2)

返回值:

0x00,操作成功,

0x01,操作失败

4.1.3intMF_Select(

unsignedchar*snr);

函数功能:

选择卡,使卡进入被选择的状态…

输入参数:

*snr传送一个指针,传入4个字节卡号,并且返回4个字节的卡号

输出参数:

Status检测到的卡片的数量

*snr4个字节的卡号(snr[0..3])

返回值:

0x00,操作成功,

0x01,操作失败

4.1.4intMF_Halt();

函数功能:

选择卡,使卡进入被中断的状态…

输入参数:

返回值:

0x00,操作成功,

0x01,操作失败

4.2MifareAppilicationCommands

4.2.1intMF_Read(unsignedcharmode,

unsignedcharblk_add,

unsignedcharnum_blk,

unsignedchar*snr,

unsignedchar*buffer);

函数功能:

在指定位置读取指定长度的数据

输入参数:

mode,读取模式

(RequestIdle+KeyAmode=00,RequestIdle+KeyBmode=02,

RequestAll+KeyAmode=01,RequestAll+KeyBmode=03)

(以上数字均为十六进制数字)

blk_add,读取块地址

num_blk,读取块数目

*snr,一个指针,传递的是六个字节的密钥

*buffer等待接受输出的指针变量

输出参数:

如果操作成功

*snr,4个字节的卡号

*buffer,读取到的数据(具体数量为:

num_blk*16)

如果操作失败

buffer[0]错误代码(具体参考2.2)

返回值:

0x00,操作成功,

0x01,操作失败

4.2.2intMF_Write(unsignedcharmode,

unsignedcharblk_add,

unsignedcharnum_blk,

unsignedchar*snr,

unsignedchar*buffer);

函数功能:

在指定位置写入数据

输入参数:

mode,要写的模式

(RequestIdle+KeyAmode=00,RequestIdle+KeyBmode=02,

RequestAll+KeyAmode=01,RequestAll+KeyBmode=03)

blk_add,要写块地址

num_blk,要写块数目

*snr,待写入的数据

*buffer,传入的指针符号..用来传出数据

输出参数:

如果操作成功

snr[0..3],4个字节的卡号

如果操作失败

buffer[0]错误代码(具体参考2.2)

返回值:

0x00,操作成功,

0x01,操作失败

4.2.3intMF_InitVal(

unsignedcharmode,

unsignedcharSectNum,

unsignedchar*snr,

unsignedchar*value);

函数功能:

初始化卡

输入参数:

mode,初始化模式

(RequestIdle+KeyAmode=00,RequestIdle+KeyBmode=02,

RequestAll+KeyAmode=01,RequestAll+KeyBmode=03)

SectNum,要初始化的扇区号00-0F

*snr,6字节密钥(以指针的形式传入)

*value4字节的要初始化的数据

输出参数:

如果操作成功:

snr[0..3],4个字节的卡号

如果操作失败:

snr[0],错误代码(具体参考2.2)

返回值:

0x00,操作成功,

0x01,操作失败

4.2.4intMF_Dec(

unsignedcharmode,

unsignedcharSectNum,

unsignedchar*snr,

int*value);

函数功能:

对卡的指定扇区进行减值操作。

输入参数:

mode,模式控制

(RequestIdle+KeyAmode=00,RequestIdle+KeyBmode=02,

RequestAll+KeyAmode=01,RequestAll+KeyBmode=03)

SectNum,要写值的扇区号00-0F

*snr,6字节密钥(以指针的形式传入)

value要减的值,4个字节长度

输出参数:

如果操作成功

snr[0..3],4个字节的卡号

value[0..3]4个字节操作后的数据串

如果操作失败

snr[0]错误代码(具体参考2.2)

返回值:

0x00,操作成功,

0x01,操作失败

4.2.5intMF_Inc(

unsignedcharmode,

unsignedcharSectNum,

unsignedchar*snr,

int*value);

函数功能:

对卡的指定扇区进行加值操作。

输入参数:

mode,模式控制

(RequestIdle+KeyAmode=00,RequestIdle+KeyBmode=02,

RequestAll+KeyAmode=01,RequestAll+KeyBmode=03)

SectNum,要加值的扇区号00-0F

*snr,6字节密钥(以指针的形式传入)

value要加的值,4个字节长度

输出参数:

如果操作成功

snr[0..3],4个字节的卡号

value[0..3]4个字节操作后的数据串

如果操作失败

snr[0]错误代码(具体参考2.2)

返回值:

0x00,操作成功,

0x01,操作失败

4.2.6intMF_Getsnr(

unsignedcharmode,

unsignedcharhalt,

unsignedchar*snr

unsignedchar*value);

函数功能:

返回1个字节的单卡或多卡标识,4个字节的卡号。

输入参数:

mode,模式控制(模式控制26or52)

0x26–Idle模式(一次只对一张卡操作)

0x52–All模式(一次可对多张卡操作)

halt,是否需要halt卡(halt选择00or01)

00不需要执行halt指令

01读写器执行halt指令

snr,返回的1个字节的单卡或多卡标识(如果读卡不成功,返回错误码)

value返回的4个字节的卡号

输出参数:

如果操作成功

snr[0],1个字节的单卡或多卡标识

value[0..3]返回的4个字节的卡号

如果操作失败

snr[0]错误代码(具体参考2.2)

返回值:

0x00,操作成功,

0x01,操作失败

4.2.7intMF_Restore(

unsignedcharmode,

intcardlength,

unsignedchar*carddata);

函数功能:

按照选择的模式,进行数据的发送

输入参数:

mode,模式控制0x00—不需要进行CRC校验

0x01—需要进行CRC校验

cardlength,卡数据长度

*carddata,发送时(卡数据)接收时(返回数据)

输出参数:

如果操作成功

carddata[0..N],接收返回数据

如果操作失败

carddata[0]错误代码(具体参考2.2)

返回值:

0x00,操作成功,

0x01,操作失败

5.ISO14443Type-BCommands

5.1intRequestType_B(

unsignedchar*buffer)

函数功能:

该命令执行ISO14443B中的REQB命令,获取卡片的PUPI代码

输入参数:

*buffer,卡片复位后的数据串(ATQB)

输出参数:

如果操作成功:

*buffer,卡片复位后的数据串(ATQB)

buffer[0]卡片复位数据的长度

buffer[1..N]操作后的数据串(ATQB)

如果操作失败:

buffer[0]错误代码(具体参考2.2)

返回值:

0x00,操作成功,

0x01,操作失败

5.2intAntiType_B(

unsignedchar*buffer);

函数功能:

该命令执行ISO14443B中的AnticollB命令

输入参数:

*buffer,卡片返回的数据串(ATQB)

输出参数:

如果操作成功:

buffer[0..N],卡片返回的数据串(ATQB)

如果操作失败:

buffer[0]错误代码(具体参考2.2)

返回值:

0x00,操作成功,

0x01,操作失败

 

5.3intSelectType_B(

unsignedchar*SerialNum);

函数功能:

该命令执行ISO14443B中的ATTRIB命令,给已知PUPI的卡片分配一个识别号CID

输入参数:

*SerialNum,卡的序列号

返回值:

0x00,操作成功,

0x01,操作失败

5.4intRequest_AB(

unsignedchar*buffer);

函数功能:

该命令执行几集成了ISO14443B中的,REQUEST和ATTRIB命令,通过一个命令使卡复位。

输入参数:

*buffer,返回操作后的卡的序列号4个字节

输出参数:

如果操作成功:

buffer[0..3],返回操作后的卡的序列号4个字节

如果操作失败:

buffer[0],错误代码(具体参考2.2)

返回值:

0x00,操作成功,

0x01,操作失败

5.5intAPI_ISO14443TypeBTransCOSCmd(

unsignedchar*cmd,

intcmdSize,

unsignedchar*buffer);

函数功能:

ISO14443传送命令,可以通过此命令向卡发任意有效的命令,数据

输入参数:

*cmd,待发送的数据

cmdSize,数据长度

*buffer,回收的数据

输出参数:

*buffer,回收的数据

如果:

操作成功,则buffer[0..N]为从卡返回的数据

操作失败,则buffer[0]为错误代码

返回值:

0x00,操作成功,

0x01,操作失败

6ISO15693COMMANDS

6.1ISO15693_Inventory(unsignedchar*Cardnumber,

unsignedchar*pBuffer);

 

函数功能:

此命令通过防冲突用于得到读卡区域内所有卡片的序列号(能得到的卡片数量与模块天线的输出功率有关,一般能对2~6卡进行防冲突)

输入参数:

*Cardnumber,返回的卡的数量(一个字节)

*pBuffer返回的数据(包括FLAG和DSFID和8*n个字节的卡号)

输出参数:

如果:

操作成功

*Cardnumber返回的卡的数量(一个字节)

*pBuffer返回的数据(包括FLAG和DSFID和8*n个字节的卡号)

如果:

操作失败

*Cardnumber为错误代码

返回值:

0x00,操作成功,

0x01,操作失败

6.2intISO15693_Read(

unsignedcharflags,

unsignedcharblk_add,

unsignedcharnum_blk,

unsignedchar*uid,

unsignedchar*buffer);

函数功能:

用来读取1个或多个扇区的值,如果要读每个块的安全位,将FLAGS中Option_flag置为1,即FLAG=0X42,每个扇区将返回5个字节,包括1个表示安全状态字节和4个字节的块内容,这时候每次最多能读12个块。

如果FLAG=02,将只返回4字节的块内容,这时候每次最多能读63个块。

输入参数:

flags0x02不带uid

0x22带uid

0x42不带uid但是要读安全位

blk_add,要读的起始块号

num_blk,块的数量

*uidUID信息

*buffer返回值

输出参数:

如果:

返回操作成功

buffer[0]返回的flagbuffer[1..N]Data

操作失败,

buffer[0]为错误代码

返回值:

0x00,操作成功,

0x01,操作失败

6.3intISO15693_Write(

unsignedcharflags,

unsignedcharblk_add,

unsignedcharnum_blk,

unsignedchar*uid,

unsignedchar*data);

函数功能:

对一个块进行写操作(每次只能写一个块)

输入参数:

flags0x02不带uid

0x22带uid

0x42不带uid但是要读安全位

blk_add,要写的起始块号

num_blk,写的块的数量

*uidUID信息

*data写入的数据

输出参数:

如果:

操作失败,则data[0]为错误代码

返回值:

0x00,操作成功,

0x01,操作失败

6.4intISO15693_Lock(

unsignedcharflags,

unsignedcharnum_blk,

unsignedchar*uid

unsignedchar*buffer);

函数功能:

用于锁定块内容。

注意:

此过程不可逆(不能解锁)块锁定后内容不能在修改。

 

输入参数:

flags0x02不带uid

0x42不带uid但是要读安全位

0x22带uid

num_blk,要锁的块号

*uidUID信息

*buffer返回值

输出参数:

如果:

操作成功,则buffer[0]值为0x80

如果:

操作失败,则buffer[0]为错误代码

返回值:

0x00,操作成功,

0x01,操作失败

6.5intISO15693_StayQuiet(

unsignedcharflags,

unsignedchar*uid,

unsignedchar*buffer);

函数功能:

此命令用于将卡置于静止的状态,必须用地址模式,如果发送的数据与被操作的卡的序列号相同,操作成功后,卡将进入静止状态,否则状态不变。

输入参数:

flags标识字节1个字节

*uidUID信息

*buffer返回值

输出参数:

如果:

操作成功,则buffer[0]返回的0x80,表示操作成功

如果

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1