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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

RC500系列C51开发指南.docx

1、RC500系列C51开发指南RC500系列MIFARE系列射频卡C51开发指南 2002/01/10 版本 1.1 目 录 简介第一章 电子钱包两种存储形式的转换第二章 常用常量定义第三章 开发指南第四章 模块命令集 简 介本手册介绍了RC500系列MIFARE模块的接口命令,以及与其有关的常量定义和基本概念,并对每个命令给出了C51语言描述的调用示例。本手册主要应用于将RC500系列模块嵌入到用户自己的主系统中,并用户系统由C51语言编写调试。请详细参阅我们提供的C51语言编写的DEMO应用程序,相信对你的工作有所帮助。请参阅RC500系列MIFARE开发指南。一、 标准通信命令为方便用户开

2、发,请用户尽量使用我们在DEMO目录中提供的标准通信函数Mf_sendcmd(),此命令已经过我们完整的测试。用户只需了解此函数的入口、出口参数即可。 此函数采用全局数组write_buff 存放入口、出口参数,用户亦可以按照自身的实际要求,修改此函数。 调用格式: unsigned char cmd; unsigned char length; /*对cmd 赋值*/ /*对length 赋值*/ /*对write_buff 赋值*/ unsigned char status=Mf_sendcmd(cmd,length) /* 处理 status 以及 出口参数 write_buff*/ 参

3、 数: write_buff: 命令块数组,系统默认的参数传入、传出数组 cmd : 是发给模块的命令码 length : 是命令块长度 返回状态: 参见“错误代码表” MI_OK: 命令执行正确 MI_ERR: 命令执行错误 描 述: 此命令用来与模块通讯。调用前必须设置命令代码和命令块长度。 如是入口参数,则从write_buff数组传入(参见示例a.) 如是出口参数,则从write_buff数组取出(参见示例b.) 示 例: a模块设备的控制(传入参数的情况) unsigned char status; write_buff0=REDLED|BELL; write_buff1=10; w

4、rite_buff2=20; write_buff3=3; status=Mf_sendcmd(ALARM,4); 说明:灯控命令,命令码是ALARM,命令块长度是4,4个参数存放于 write_buff数组中,无回传参数 b读取模块号(传出参数的情况) unsigned char status; unsigned char McmNo; status=Mf_sendcmd(MCMNO,0); McmNo=write_buff0; 说明:读取模块号命令,命令码是MCMNO,命令块长度是0,有一个回传参数 第一章 电子钱包两种存储形式的转换 Mifare 1卡中电子钱包是一个LONG型数据,在内

5、存中占用4字节。在C51中这两种数据类型转换如下: 1 数组转换到长整型 unsigned long longvalue; unsigned char value4; longvalue=0; for(unsigned char i=0;i4;i+) longvalue+=valuei(8*i); 2 长整型转换到数组 unsigned long longvalue; unsigned char value4; longvalue=0x10203040; for(unsigned char i=0;i(8*i); 第二章 常用常量定义 本指南预定义了几组用户需要用到的常量,定义如下:21 设备

6、号定义 #define REDLED 1 #define GREENLED 2 #define BELL 422 呼叫方式定义 #define IDLE 0 #define ALL 123 命令返回码定义 #define MI_OK 0 #define MI_ERR 124 密码常量定义 #define KEYA 0 /*密码A */ #define KEYB 4 /*密码B */ 25 通信方式设置 #define RS232 1 #define LDSTD 026 命令代码定义(Command Code) #define CONNECT 0x00 #define MCMVER 0x22 #

7、define ALARM 0x7A #define MCMNO 0xA1 #define TRANSKEY 0xA4 #define AUTHMODE 0xA9 #define GETTYPE 0xAA #define GETSNR 0xAB #define READBLOCK 0xAC #define WRITEBLOCK 0xAD #define WRITEKEY 0xAE #define READVALUE 0xAF #define WRITEVALUE 0xB0 #define INCREMENTVALUE 0xB1 #define DECREMENTVALUE 0xB2 #defin

8、e LOADKEY 0xB4 #define REQUEST 0xB5 #define ANTICOLL 0xB6 #define SELECT 0xB7 #define AUTHENTICATION 0xB8 #define READ 0xB9 #define WRTIE 0xBA #define INCREMENT 0xBB #define DECREMENT 0xBC #define HALT 0xBD第三章 开发指南RC500系统模块提供了两组操作命令用于用户的开发工作:高级指令和基础指令。基础指令提供了RC500系列MIFARE读写器最基本的指令,适用于有特殊要求和极高安全要求的用户

9、。使用基础指令开发难度较大,且需要对MIFARE射频卡有较深入的了解。高级指令是为方便用户操作,将基础指令集成,提供了相对强大的功能,用高级指令集开发系统,开发速度快,总的执行时间短,易于用户维护。常见的用户数据有两种:通用数据和钱包数据。通用数据指用户存放的文本数据、二进制数据,模块高级指令中提供的读写通用数据的命令有两条:READBLOCK(读),WRITEBLOCK(写)。 钱包数据是一个长整形数据(M1卡)或整形数据(ML10卡)。对M1卡,模块高级指令中提供了4条操作命令:READVALUE(读),WRITEVALUE(写),INCREMENTVALUE(加),DECREMENTVA

10、LUE(减);对ML10卡,模块高级指令中提供了3提供了3条操作命令:READVALUE(读)、WRITEVALUE(写)、DECREMENTVALUE(减)。在M1卡中,每个BLOCK都可以存放通用数据或钱包数据,但要注意的是在一个BLOCK中必须使用WRITEVALUE命令后,才能作为一个钱包数据进行加减读操作。否则,会发生错误。在ML10卡中,有两个专门的BLOCK存放钱包数据,其他BLOCK不能存放钱包数据,操作钱包数据时不需传递钱包数据的地址(BLOCK号),在不需要钱包数据时,存放钱包数据的BLOCK可以存放普通的数据。 利用高级指令开发应用系统时,对卡的操作请遵循以下的顺序:1

11、加载密码在系统上电后,如果每张卡的密码都一样,则只要向系统传递一次密码即可系统采用M1卡时,可以有两个密码加载命令,TRANSKEY、LOADKEY。建议使用TRANSKEY。对ML10卡,则只能使用LOADKEY命令传递密码。参见以下命令集 2 系统可以通过GETTYPE命令来判定是否有卡进入操作区当GETTYPE命令正确返回时,说明有卡进入操作区。GETTYPE命令返回卡的类型根据卡的不同类型,用户执行相应的操作。3 读卡序列号(GETSNR)GETSNR命令返回卡的序列号,用户应当保存卡的序列号,以作为读/写/加/减命令的参数。 4读、写数据块,读、写、加、减电子钱包,修改密码 采用高级

12、指令进行操作,模块在一个时刻只能处理一张卡,当有多张卡同时进入模 块的操作区时,模块不能有效处理每一张卡。在需要同时处理多张卡时,应该采用基础指令集进行操作。在对卡进行写、加、减操作时,模块都会返回该BLOCK当前的数值。模块对M1卡和ML10卡的操作命令相同,但参数和参数的含义在某些命令中会有一些区别。用户应当注意这些区别。第四章 模块的命令集4.1 通用命令 通用命令是一组对模块识别、测试、和声光控制的指令,共有四条这些命令适用于本公司生产的所有智能卡读写模块。4.1.1 模块设备的操作功能说明:此命令用来控制模块所提供的三个基本设备:红色LED,绿色LED, 蜂鸣器。可以控制三个设备的打

13、开时间、关闭时间、动作次数以及动作方式。命 令 字:ALARM调用示例: unsigned char mode; unsigned char actiontime; unsigned char intervaltime; unsigned char count; write_buff0=mode; write_buff1=actiontime; write_buff2=intervaltime; write_buff3=count; unsigned char status=Mf_sendcmd(ALARM,4);参 数: mode :设备号 是三个设备:REDLED、GREENLED、BEL

14、L的或集 例如:mode=REDLED|BELL actiontime :单次动作时间(设备打开时间) 单位是10ms 例如:actiontime=15,则单次动作时间为15*10ms intervaltime:动作间歇时间(设备关闭时间) 单位是10ms 例如:intervaltime=15,则动作间歇为15*10ms count: :连续动作次数(设备打开次数)返 回 值: MI_OK,MI_ERR;4.1.2 联结功能说明:此命令用来测试主系统与模块的连接是否正确命 令 字:CONNECT调用示例: unsigned char status=Mf_sendcmd(CONNECT,0);参

15、 数:无返 回 值:MI_OK,MI_ERR; 4.1.3 读取模块号功能说明:此命令用来读取模块的设备号。命 令 字:MCMNO调用示例: unsigned char mcmno; status=Mf_sendcmd(MCMNO,0); mcmno=write_buff0;参 数: mcmno: 模块返回的模块代码 mcmno=17 170模块 mcmno=20 200模块 mcmno=50 500模块 mcmno=70 TEMIC模块 mcmno=90 MEMORY模块 返 回 值:MI_OK,MI_ERR;4.1.4 读取模块控制软件版本号功能说明:此命令读取模块中的控制软件的版本号,如

16、:mcmver=“VER1.00A”命 令 字:MCMVER调用示例: unsigned char mcmver8; unsigned char status=Mf_sendcmd(MCMVER,0); for(unsigned char i=0;i8;i+) mcmveri=write_buffi; 参 数: mcmver: 模块的控制软件版本号返 回 值:MI_OK,MI_ERR;4.2 高级指令 高级指令是相对于基础指令集而言,高级指令集成了基础指令的功能,简化了模块的应用。4.2.1 密码认证方式功能说明:此命令指定密码认证的方式,本命令仅适应于ML10。命 令 字:AUTHMODE调

17、用示例: unsigned char mode; write_buff0=mode; unsigned char status=Mf_sendcmd(AUTHMODE,1);参 数: mode : 密码认证的方式 0:用密码A认证 1:用密码B认证返 回 值:MI_OK,MI_ERR;4.2.2 密码加载功能说明:此命令将一个新密码加载到指定扇区 此命令用于单密码系统,即每个扇区只用一组密码进行认证(密码B=密码A)。命 令 字:TRANSKEY调用示例: unsigned char sector; unsigned char mima6; write_buff0=sector ; for(u

18、nsigned char i=0;i6;i+) write_buff1+i=mimai; unsigned char status=Mf_sendcmd(TRANSKEY,7);参 数: sector : 要加载密码的扇区的扇区号 mima6: 要加载的密码返 回 值: MI_OK,MI_ERR;4.2.3 读卡类型功能说明:此命令用于检测卡并检测卡类型命 令 字:GETTYPE调用示例: unsigned int cardtype; unsigned char status=Mf_sendcmd(GETTYPE,0); cardtype=write_buff0; cardtype+=writ

19、e_buff18;参 数: cardtype: 卡类型 cardtype=0x0004 Mifare 1 卡 cardtype=0x0010 Mifare Light 10卡返 回 值: MI_OK,MI_ERR;4.2.4 读卡序列号功能说明:此命令读取卡的序列号,此序列号将在读/写命令中用作参数命 令 字:GETSNR调用示例: unsigned char snr4; status=Mf_sendcmd(GETSNR,0) for(unsigned char i=0;i4;i+) snri=write_buffi; 参 数: snr4: 卡片序列号返 回 值:MI_OK,MI_ERR;4.

20、2.5 读数据块功能说明:此命令从指定卡的指定数据块读出数据, 读数据块前必须先读出卡序列号,存放于snr中。命 令 字:READBLOCK调用示例:(For M1卡) unsigned char BlockNo; extern unsigned char snr4; unsigned char dat16; write_buff0=BlockNo; for(i=0;i4;i+) write_buff1+i=snri unsigned char status=Mf_sendcmd(READBLOCK,5); for(i=0;i16;i+) dati=write_buffi; 调用示例(For

21、ML10卡): unsigned char BlockNo; extern unsigned char snr4; unsigned char dat4; write_buff0=BlockNo; for(i=0;i4;i+) write_buff1+i=snri unsigned char status=Mf_sendcmd(READBLOCK,5); for(i=0;i4;i+) dati=write_buffi; 参 数: BlockNo : “数据块”的地址 snr4 : 卡序列号。通过GETSNR命令得到 dat16 : 返回的16字节数据 返 回 值: MI_OK,MI_ERR;

22、4.2.6 写数据块功能说明:此命令将16字节(M1卡)或4字节(ML10卡)数据写入指定卡的指定数据块 中,如果写入成功,系统回读写入的数据。 写数据块前必须先读出卡序列号,存放于snr中命 令 字:WRITEBLOCK返 回 值: MI_OK,MI_ERR;调用示例:(For M1 卡) unsigned char BlockNo; extern unsigned char snr4; unsigned char indata16; unsigned char outdata16; write_buff0=BlockNo; for(unsigned char i=0;i4;i+) writ

23、e_buff1+i=snri for(i=0;i16;i+) write_buff5+i=indatai; unsigned char status=Mf_sendcmd(READBLOCK,21); for(i=0;i16;i+) outdatai=write_buffi; 参 数: BlockNo : “数据块”的地址 snr4 : 卡序列号。通过GETSNR命令得到 indata16 : 要写入的16字节数据 outdata16: 回读的16字节数据调用示例:(For ML10 卡) unsigned char BlockNo; extern unsigned char snr4; un

24、signed char indata4; unsigned char outdata4; write_buff0=BlockNo; for(unsigned char i=0;i4;i+) write_buff1+i=snri for(i=0;i4;i+) write_buff5+i=indatai; unsigned char status=Mf_sendcmd(READBLOCK,9); for(i=0;i4;i+) outdatai=write_buffi; 参 数: BlockNo : “数据块”的地址 Mifare Light 中可以修改的BlockNo有 2,3,4,5,6,7,8

25、,9,10,11 Block 4,5 常用作16位的“电子钱包” Block 6, 7 是密码A(6字节)和存取状态码(1字 节)以及存取状态码的反码(1字节)Block 8, 9 是 密码B(6字节)和存取状态码(1字节)以及存取状 态码的反码(1字节) snr4 : 卡序列号。通过GETSNR命令得到 indata4 : 要写入的4字节数据 outdata4 : 回读的4字节数据4.2.7 修改卡片密码功能说明:此命令将新密码写到指定扇区。写密码前必须先读出卡序列号,存放于snr中。 此命令用于单密码系统命 令 字:WRITEKEY返 回 值: MI_OK,MI_ERR;调用示例:(For

26、 M1 卡) unsigned char sector; unsigned char mima6; write_buff0=sector; for(unsigned char i=0;i4;i+) write_buff1+i=snri; for(i=0;i6;i+) write_buff5+i=mimai; unsigned char status=Mf_sendcmd(WRITEKEY,11); 参 数: sector : 指定扇区号 mima6 : 6字节新密码调用示例:(For ML10 卡) unsigned char keyset; unsigned char mima6; unsi

27、gned char keyctr; keyctr=D1WREN|D1RDEN| D2WREN|D2RDEN|KEYRWEN|VALUEWREN; sector=0; write_buff0=keyset; for(unsigned char i=0;i4;i+) write_buff1+i=snri; for(i=0;i6;i+) write_buff5+i=mimai; write_buff11=keyctr; unsigned char status=Mf_sendcmd(WRITEKEY,12);参 数: keyset : 0 修改密码A,1修改密码B 如果采用“高级指令”集操作,只有修

28、改密码A有效 keyctr : 密码控制状态代码 密码控制状态代码是对密码权限的描述 密码控制状态代码有以下的权限: D1WREN 对“数据块”2,3可写 D1RDEN 对“数据块”2,3可读 D2WREN 对“数据块”10,11可写 D2RDEN 对“数据块”10,11可读 KEYWREN 对密码可写 VALUEWREN 对16位“电子钱包”可写 有以下特殊情况:1 密码永远不能读 2对“电子钱包”一直可读(任意一组密码认证后) 3对“电子钱包”一直可减(任意一组密码认证后) mima6: 6字节新密码4.2.8 读电子钱包功能说明:此命令从指定“电子钱包”读出当前“金额”。命 令 字:RE

29、ADVALUE调用示例:(For M1 卡) unsigned char snr4; unsigned char BlockNo; unsigned char curvalue4; BlockNo=4; write_buff0=BlockNo; for(i=0;i4;i+) write_buff1+i=snri; unsigned char status=Mf_sendcmd(READVALUE,5); for(i=0;i4;i+) curvaluei=write_buffi; 参 数: snr4 : 要操作的卡的卡序列号 BlockNo : “电子钱包”的地址 curvalue4 : “电子钱包”当前的“金额” 返 回 值:MI_OK,MI_ERR; 调用示例:(For ML10

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

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