ImageVerifierCode 换一换
格式:DOCX , 页数:30 ,大小:21.11KB ,
资源ID:11432765      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11432765.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(CMRF800系列CMRF810系列程序库函数.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

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

1、CMRF800系列CMRF810系列程序库函数CMRF800系列CMRF810系列非接触式智能卡读写器USB Reader 开发文档1、版本说明(版本V1.00)* All rights reserved, Specifications subject to change without notice.* 版权所有,规格如有更改,恕不另行通知。2、返回值说明:21 函数返回值代码表:0x00 命令执行成功 0x01 命令操作失败(失败原因请参考2.2底层单片机上传代码表)0x02 地址校验错误0x04 读写器返回超时0x05 数据包流水号不正确: 0x07 接收异常0x0A 参数值超出范围22

2、 底层单片机上传代码表:0x80: 参数设置成功0x81: 参数设置失败0x82: 通讯超时 0x83: 卡不存在0x84: 接收卡数据出错0x87: 未知的错误0x85: 输入参数或者输入命令格式错误0x8f: 输入的指令代码不存在()0x8A: 在对于卡块初始化命令中出现错误(仅用于14443命令)0x8B: 在防冲突过程中得到错误的序列号(仅用于14443命令)0x8C 密码认证没通过(仅用于14443命令)0x90 卡不支持这个命令(仅用于15693命令)0x91 命令格式有错误(仅用于15693命令)0x92 在命令的FLAG参数中,不支持OPTION 模式(仅用于15693命令)0

3、x93 要操作的BLOCK不存在(仅用于15693命令)0x94 要操作的对象已经别锁定,不能进行修改(仅用于15693命令)0x95 锁定操作不成功(仅用于15693命令)0x96 写操作不成功(仅用于15693命令)3System Commands 系统命令5、int SetSerNum( unsigned char *newValue, unsigned char *buffer);函数功能:设置 8个字节的产品序列号。输入参数:描述*newValue 8个字节的读写器序列号*buffer 用来返回接收到的数据的指针 输出参数:*buffer 返回STATUS后的状态,如果设置成功,则*

4、buffer=0x 80如果设置失败,则*buffer为底层(读卡器单片机)上传的错误代码(参照底层协议代码表2.2)返回值:0x00,设置成功0x01,设置失败、int GetSerNum(unsigned char *buffer);函数功能:读取由厂家预设的1个字节的读卡器地址和8个字节序列号. 输入参数:*buffer 传入一个指针,用来返回接收到的数据 输出参数:*buffer buffer0 读写器地址 buffer1.8 8个字节的读写器序列号返回值:0x00,操作成功0x01,操作失败6、 int WriteUserInfo(int num_blk, int num_lengt

5、h, char *user_info);函数功能:读卡器提供4个块(每个块不能大于120个字节),共480个字节空间的用户数据区。用户可以根据需要,储存相应的用户信息到读写器中.输入参数:num_blk 区域号 num_length 数据长度*user_info 用户数据返回值: 0x00,操作成功 0x01,操作失败7、int ReadUserInfo(int num_blk, int num_length, char *user_info);函数功能:读取读卡器中提供4个块(每个块不能大于120个字节)的数据.输入参数:int num_blk 区域号 int num_length 读取的数

6、据长度*user_info 待读入的用户数据 输出参数:*user_info 如果 :操作失败, 则user_info0 为 错误代码 如果 :操作成功, 则user_info0.N 为读取的用户信息数据返回值: 0x00,操作成功 0x01,操作失败8、int GetVersionNum(char *VersionNum);函数功能:读取读写器的版本号.输入参数:*VersionNum 待读入的版本号 输出参数:*VersionNum 如果 :操作失败, 则VersionNum 0 为 错误代码 如果 :操作成功, 则VersionNum 0.N 为读入的版本号返回值: 0x00,操作成功

7、0x01,操作失败9、int ControlLED( unsigned char freq, unsigned char duration, unsigned char *buffer);函数功能: 设置灯的工作状态,包括,灯亮的周期以及循环的次数输入参数:freq 周期数 duration 次数*buffer 待返回的参数 输出参数:*buffer 如果 :操作失败, 则buffer 0 为 错误代码(参考2.2) 如果 :操作成功, 则buffer 0 为成功标志 ,即为0x80返回值: 0x00,操作成功, 0x01,操作失败 10、int ControlBuzzer(unsigned

8、char freq, unsigned char duration, unsigned char *buffer);函数功能: 设置蜂鸣器的工作状态,包括,蜂鸣器的工作周期以及循环的次数输入参数:freq 周期数 duration 次数*buffer 待返回的参数 输出参数:*buffer 如果 :操作失败, 则buffer 0 为 错误代码(参考2.2) 如果 :操作成功, 则buffer 0 为成功标志 ,即为0x80返回值: 0x00,操作成功 0x01,操作失败4、ISO14443 Type-A Commands41 Type-A Commands4.1.1 int MF_Reques

9、t(unsigned char inf_mode, unsigned char *buffer);函数功能:发送ISO14443 A 寻卡指令.输入参数:inf_mode 寻卡模式 0x01 Idle模式(一次只对一张卡操作)0x00 All模式(一次可对多张卡操作)*buffer 待返回的参数 输出参数:*buffer 如果 :操作失败, 则buffer 0 为 错误代码 如果 :操作成功, 则buffer 0.1,返回2个字节的数据串返回值: 0x00,操作成功 0x01,操作失败 4.1.2 int MF_Anticoll(unsigned char *snr,unsigned char

10、 &status);函数功能:检测卡片数量,单卡或多卡,并返回4个字节的卡号。(如果有多张卡,就返回其中一张卡的卡号) 输入参数:*snr 传送一个指针,返回4个字节的卡号&Status 传送一个指针,返回卡片的数量输出参数:如果操作成功Status 检测到的卡片的数量(0x00表示检测到单卡,0x01表示检测到多卡)*snr 4个字节的卡号(snr0.3) 如果操作失败*snr 为 错误代码(具体参考2.2)返回值: 0x00,操作成功, 0x01,操作失败 4.1.3 int MF_Select(unsigned char *snr);函数功能:选择卡,使卡进入被选择的状态输入参数:*sn

11、r 传送一个指针,传入4个字节卡号,并且返回4个字节的卡号输出参数:Status 检测到的卡片的数量*snr 4个字节的卡号(snr0.3) 返回值: 0x00,操作成功, 0x01,操作失败 4 .1.4 int MF_Halt( ); 函数功能:选择卡,使卡进入被中断的状态输入参数:无返回值:0x00,操作成功, 0x01,操作失败4.2 Mifare Appilication Commands 4.2.1 int MF_Read( unsigned char mode, unsigned char blk_add,unsigned char num_blk, unsigned char

12、*snr, unsigned char *buffer);函数功能:在指定位置读取指定长度的数据输入参数:mode, 读取模式( Request Idle + Key A mode=00 , Request Idle + Key B mode= 02, Request All + Key A mode=01 , Request All + Key B mode=03)(以上数字均为十六进制数字)blk_add, 读取块地址num_blk, 读取块数目*snr, 一个指针,传递的是六个字节的密钥*buffer 等待接受输出的指针变量输出参数:如果操作成功*snr, 4个字节的卡号*buffer,

13、 读取到的数据(具体数量为: num_blk*16)如果操作失败buffer0 错误代码(具体参考2.2)返回值:0x00,操作成功, 0x01,操作失败4.2.2 int MF_Write(unsigned char mode,unsigned char blk_add,unsigned char num_blk,unsigned char *snr, unsigned char *buffer);函数功能:在指定位置写入数据输入参数:mode, 要写的模式( Request Idle + Key A mode=00 , Request Idle + Key B mode= 02, Requ

14、est All + Key A mode=01 , Request All + Key B mode=03)blk_add, 要写块地址num_blk, 要写块数目*snr, 待写入的数据*buffer, 传入的指针符号.用来传出数据输出参数:如果操作成功snr0.3, 4个字节的卡号如果操作失败buffer0 错误代码(具体参考2.2)返回值:0x00,操作成功, 0x01,操作失败4.2.3 int MF_InitVal(unsigned char mode,unsigned char SectNum,unsigned char *snr, unsigned char *value);函数

15、功能:初始化卡输入参数:mode, 初始化模式( Request Idle + Key A mode=00 , Request Idle + Key B mode= 02, Request All + Key A mode=01 , Request All + Key B mode=03)SectNum, 要初始化的扇区号00-0F*snr, 6字节密钥(以指针的形式传入)*value 4 字节的要初始化的数据输出参数:如果操作成功:snr0.3, 4个字节的卡号如果操作失败:snr0, 错误代码(具体参考2.2)返回值:0x00,操作成功, 0x01,操作失败4.2.4 int MF_Dec

16、(unsigned char mode,unsigned char SectNum,unsigned char *snr, int *value);函数功能:对卡的指定扇区进行减值操作。输入参数:mode, 模式控制( Request Idle + Key A mode=00 , Request Idle + Key B mode= 02, Request All + Key A mode=01 , Request All + Key B mode=03)SectNum, 要写值的扇区号00-0F*snr, 6字节密钥(以指针的形式传入)value 要减的值,4个字节长度输出参数:如果操作成功

17、snr0.3, 4个字节的卡号value0.3 4个字节操作后的数据串如果操作失败snr0 错误代码(具体参考2.2)返回值:0x00,操作成功, 0x01,操作失败4.2.5 int MF_Inc (unsigned char mode,unsigned char SectNum,unsigned char *snr, int *value);函数功能:对卡的指定扇区进行加值操作。输入参数:mode, 模式控制( Request Idle + Key A mode=00 , Request Idle + Key B mode= 02, Request All + Key A mode=01

18、, Request All + Key B mode=03)SectNum, 要加值的扇区号00-0F*snr, 6字节密钥(以指针的形式传入)value 要加的值,4个字节长度输出参数:如果操作成功snr0.3, 4个字节的卡号value0.3 4个字节操作后的数据串如果操作失败snr0 错误代码(具体参考2.2)返回值:0x00,操作成功, 0x01,操作失败4.2.6 int MF_Getsnr (unsigned char mode, unsigned char halt, unsigned char *snrunsigned char *value);函数功能:返回1个字节的单卡或多

19、卡标识,4个字节的卡号。输入参数:mode, 模式控制 (模式控制 26 or 52 )0x26 Idle模式(一次只对一张卡操作)0x52 All模式(一次可对多张卡操作) halt, 是否需要halt卡 (halt选择 00 or 01 ) 00不需要执行halt指令 01读写器 执行halt指令snr, 返回的1个字节的单卡或多卡标识(如果读卡不成功,返回错误码)value 返回的4个字节的卡号输出参数:如果操作成功snr0, 1个字节的单卡或多卡标识value0.3 返回的4个字节的卡号如果操作失败snr0 错误代码(具体参考2.2)返回值:0x00,操作成功, 0x01,操作失败4.

20、2.7 int MF_Restore( unsigned char mode, int cardlength, unsigned char *carddata );函数功能:按照选择的模式,进行数据的发送输入参数:mode, 模式控制 0x00 不需要进行CRC校验0x01 需要进行CRC校验 cardlength, 卡数据长度*carddata, 发送时(卡数据) 接收时(返回数据)输出参数:如果操作成功carddata0.N, 接收返回数据如果操作失败carddata0 错误代码(具体参考2.2)返回值:0x00,操作成功, 0x01,操作失败5. ISO14443 Type-B Comm

21、ands5.1 int RequestType_B( unsigned char *buffer)函数功能:该命令执行ISO14443B中的REQB命令,获取卡片的PUPI代码输入参数:*buffer, 卡片复位后的数据串 (ATQB)输出参数:如果操作成功:*buffer, 卡片复位后的数据串 (ATQB)buffer0 卡片复位数据的长度buffer1.N 操作后的数据串(ATQB)如果操作失败:buffer0 错误代码(具体参考2.2)返回值:0x00,操作成功, 0x01,操作失败5.2 int AntiType_B(unsigned char *buffer);函数功能:该命令执行I

22、SO14443B中的AnticollB命令输入参数:*buffer, 卡片返回的数据串 (ATQB)输出参数:如果操作成功:buffer0.N, 卡片返回的数据串 (ATQB)如果操作失败:buffer0 错误代码(具体参考2.2)返回值:0x00,操作成功, 0x01,操作失败5.3 int SelectType_B (unsigned char *SerialNum);函数功能:该命令执行ISO14443B中的ATTRIB命令,给已知PUPI的卡片分配一个识别号CID输入参数:*SerialNum, 卡的序列号返回值:0x00,操作成功, 0x01,操作失败5.4 int Request_

23、AB(unsigned char * buffer);函数功能:该命令执行几集成了ISO14443B中的,REQUEST和ATTRIB命令,通过一个命令使卡复位。输入参数:* buffer, 返回操作后的卡的序列号4个字节输出参数:如果操作成功: buffer0.3, 返回操作后的卡的序列号4个字节 如果操作失败: buffer0, 错误代码(具体参考2.2)返回值:0x00,操作成功, 0x01,操作失败5.5 int API_ISO14443TypeBTransCOSCmd(unsigned char *cmd, int cmdSize,unsigned char *buffer);函数功

24、能: ISO14443传送命令,可以通过此命令向卡发任意有效的命令,数据输入参数:*cmd, 待发送的数据cmdSize, 数据长度* buffer, 回收的数据输出参数:* buffer, 回收的数据如果:操作成功,则buffer0.N 为从卡返回的数据 操作失败,则buffer0 为错误代码返回值:0x00,操作成功, 0x01,操作失败6 ISO15693 COMMANDS6.1 ISO15693_Inventory(unsigned char *Cardnumber,unsigned char *pBuffer);函数功能: 此命令通过防冲突用于得到读卡区域内所有卡片的序列号(能得到的

25、卡片数量与模块天线的输出功率有关,一般能对26卡进行防冲突)输入参数:*Cardnumber, 返回的卡的数量(一个字节)*pBuffer 返回的数据(包括FLAG和DSFID和8*n个字节的卡号)输出参数:如果:操作成功*Cardnumber 返回的卡的数量(一个字节)*pBuffer 返回的数据(包括FLAG和DSFID和8*n个字节的卡号) 如果:操作失败*Cardnumber 为错误代码返回值:0x00,操作成功, 0x01,操作失败6.2 int ISO15693_Read ( unsigned char flags, unsigned char blk_add,unsigned c

26、har num_blk, unsigned char *uid, unsigned char *buffer);函数功能: 用来读取1个或多个扇区的值,如果要读每个块的安全位,将FLAGS中Option_flag置为1,即FLAG = 0X42,每个扇区将返回5个字节,包括1个表示安全状态字节和4个字节的块内容,这时候每次最多能读12个块。如果FLAG = 02,将只返回4字节的块内容,这时候每次最多能读63个块。输入参数:flags 0x02 不带uid 0x22 带uid 0x42 不带uid但是要读安全位blk_add, 要读的起始块号num_blk, 块的数量*uid UID信息*bu

27、ffer 返回值输出参数:如果:返回操作成功 buffer0 返回的flag buffer1.N Data 操作失败,buffer0为错误代码返回值:0x00,操作成功, 0x01,操作失败6.3 int ISO15693_Write(unsigned char flags,unsigned char blk_add,unsigned char num_blk,unsigned char *uid, unsigned char *data);函数功能: 对一个块进行写操作(每次只能写一个块)输入参数:flags 0x02 不带uid 0x22 带uid 0x42 不带uid但是要读安全位blk

28、_add, 要写的起始块号num_blk, 写的块的数量*uid UID信息*data 写入的数据输出参数:如果:操作失败,则data0为错误代码返回值:0x00,操作成功, 0x01,操作失败6.4 int ISO15693_Lock(unsigned char flags,unsigned char num_blk,unsigned char *uidunsigned char *buffer);函数功能:用于锁定块内容。注意:此过程不可逆(不能解锁)块锁定后内容不能在修改。输入参数:flags 0x02 不带uid 0x42 不带uid但是要读安全位 0x22 带uidnum_blk,

29、要锁的块号*uid UID信息*buffer 返回值输出参数:如果:操作成功,则buffer0 值为0x80 如果:操作失败,则buffer0为错误代码返回值:0x00,操作成功, 0x01,操作失败6.5 int ISO15693_StayQuiet(unsigned char flags,unsigned char *uid, unsigned char *buffer );函数功能:此命令用于将卡置于静止的状态, 必须用地址模式,如果发送的数据与被操作的卡的序列号相同,操作成功后,卡将进入静止状态,否则状态不变。输入参数:flags 标识字节1个字节*uid UID信息*buffer 返回值输出参数:如果:操作成功 , 则buffer0 返回的0x80,表示操作成功 如果

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

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