CMRF800系列CMRF810系列程序库函数.docx
- 文档编号:11432765
- 上传时间:2023-03-01
- 格式:DOCX
- 页数:30
- 大小:21.11KB
CMRF800系列CMRF810系列程序库函数.docx
《CMRF800系列CMRF810系列程序库函数.docx》由会员分享,可在线阅读,更多相关《CMRF800系列CMRF810系列程序库函数.docx(30页珍藏版)》请在冰豆网上搜索。
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,表示操作成功
如果
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- CMRF800 系列 CMRF810 程序库 函数