ZLG522S系列模块的应用
- 格式:doc
- 大小:1.84 MB
- 文档页数:45
RFID模块功能及操作说明(型号:MIFARE522)一、硬件描述 (2)二、产品参数 (2)三、功能简介 (3)四、RFID模块使用PC软件操作说明: (4)1、RFID模块与USB转TTL串口连接方式 (4)2、如何使用RS522PC_DEMO软件对IC卡进行读、写、加减值、修改密码操作 (5)3、单指令读、单指令写说明 (7)五、RFID模块与RS232转TTL串口模块、51单片机连线方式 (8)六、注意事项 (8)MIFARE522实物图如图1所示。
该模块的供电电压为直流3.3~9V,UART TTL电平输出。
接线简单,图1中J2为接线引脚,J1为生产编程引脚(用户不需要理会)。
J2的引脚描述如表1所示。
表1 J2的引脚描述引脚描述VCC5.0 电源正极输入,3.3~9VTXD 模块数据输出,接MCU的RXDRXD 模块数据输入,接MCU的TXDGND 电源地二、产品参数:产品型号:MIFARE522工作电流:13—26mA/直流3.3V空闲电流:10-13mA/直流3.3V休眠电流:<80uA峰值电流:<30mA工作频率:13.56MHz读卡距离:0~65mm接口:UART TTL数据传输速率:最大10Mbit/s读卡速度:读ID每秒7次,读块数据每秒3次物理特性:尺寸:50mm×50mm环境工作温度:摄氏-20—80度储存温度:摄氏-40—85度湿度:相对湿度5%—95%RFID模块(型号;MIFARE522)具有自动读取IC卡的ID号(即通电有IC卡靠近,就可以自动读取16进制的IC卡号,通过串口发出),及通过发送命令操作RFID模块读写卡(被动读写卡)功能。
本RFID读写模块默认情况下是通过发送命令读写卡的,若要设置成自动读卡,只要先把J1中间两个引脚(SWIM和GND)短接,然后J2引脚通电,连接设备,只要有IC卡靠近,模块就会自动读卡,通过串口发出16进制IC卡号。
rc522射频模块使用方法RC522频模块是一种被广泛应用的射频识别技术,它能够实现智能卡和其他无线认证设备之间的高级接口,以实现身份识别、信息加密、等级认证和访问控制等功能。
由于射频技术可以实现无线识别和信息传输,因此RC522频模块已经广泛应用于智能门禁系统,智能安防系统,智能家居,智能停车场,智能环境监测,智能家庭等领域。
本文将详细介绍RC522频模块的使用方法。
第二段:RC522频模块具有较小的体积、较低的功耗、较高的数据传输速率、较强的防磁干扰能力和防冲击能力等特点,使它具有广泛的适用范围。
RC522频模块能够支持ISO14443A ISO14443B准的非接触式IC 卡,并且在工作电源范围内可以实现多种快速数据传输模式,从而大大提高工作效率。
第三段:使用 RC522频模块可以轻松实现卡号识别、认证、数据加密、可信认证等功能,从而更加安全和可靠。
首先,使用者需要安装驱动程序和读写器软件,将射频模块连接到电脑,并使用驱动程序配置模块参数。
其次,将卡片放入读卡器的感应区域内,然后执行相应的指令,以让模块识别指定的卡片,并实现基本的数据传输功能。
第四段:此外,在使用 RC522频模块的过程中,还可以开发和实现多种功能,比如密码认证系统、脉冲访问控制系统、滑动访问控制系统以及智能家居访问控制等。
通过开发相应的应用程序可以轻松实现上述功能,从而更好地使用射频模块。
第五段:综上所述,RC522频模块的使用方法非常的简单,并且具有较强的安全性和防磁干扰能力,使它在智能门禁系统,智能安防系统,智能家居,智能停车场,智能环境监测,智能家庭等领域都得到了广泛的应用。
此外,RC522频模块还可以实现访问控制、加解密、一卡通安全认证等功能,提升了智能家居的安全性,也更好地满足了用户的不同需求。
●产品概述1.4路单端模拟量输出,采用32位ARM 芯片与TI 原装DAC 芯片构成4路模拟量输出。
4通道模拟量采集。
2. 采用标准MODBUS-RTU 通讯协议,可与组态软件、PLC 、工业触摸屏等组网通讯3. 带通讯状态指示灯,便捷的出厂参数设置4. 可广泛用于工业现场设备的信号采集与控制5.一年质保,终身保修●通讯协议说明写单寄存器--06例如将站号为1的模块改为站号27,即写寄存器40011,其中,设置模拟量数据为00 1B ,即0x001B ,十进制数为27,即将原站号为1的模块改为27 ;E9 C3是16进制数值,是按照CRC-16 (BISYNCH ,多项式是x16 + x15 + x2 + 1屏蔽字为0A001H)循环冗余算法得到的。
请参考MODBUS 有关资料了解进一步的算法。
返回的数据应该为:读2号设备通道1和通道2的当前输入值,40001,40002其中,通道1的值01 32 即0x0132,十进制数为306,那么输入值为306/1000 = 0.306,相同的计算方法,可计算通道2输入值。
信号的电流流动方向必须从输入正流向输入负。
模块具备外部硬件复位寄存器功能(仅针对无液晶屏模块),短接模块CFG 与GND 3秒以上,模块寄存器复位至初始状态。
● 通讯示例说明1.通讯参数说明(出厂值):9600,N ,8, 1 2、模拟量采集信号命令采集(注*):如模块为电流4-20MA 输入模块,十六进制数 3A28 转换为十进制数为14888,表示通道的采集电流大小为14.888毫安。
3、模块站号设置命令:接收01 06 00 0A 00 1B E9 C3 (HEX ) 此命令将站号为1的模块的站号改为27。
发送修改站号命令以后,返回数据,模块将永久保存该地址。
4、模块波特率设置命令:接收01 06 00 0B 00 06 78 0A (HEX ) 此命令将站号为1的模块的波特率改为19200。
si522a典型应用电路
Si522A是一款高度集成的非接触式读写器芯片,工作于13.56MHz的频率,支持ISO/IEC 14443 A/MIFARE标准,并具备自动载波侦测功能(ACD)。
它无需外部电路,内部发送器即可驱动读写器天线与兼容的卡片和应答机进行通信。
Si522A的接收器模块提供了一个强大而高效的电路,用于解调译码兼容的信号。
数字模块则处理完整的ISO/IEC 14443 A帧,并具备错误检测功能,如奇偶和CRC校验。
在ACD模式下,Si522A的大部分时间都处于休眠状态,通过3K RC定时唤醒,以超低功耗侦测13.56MHz的射频场和射频卡。
一旦检测到射频场或射频卡,芯片会自动产生中断唤醒MCU。
这种侦测功能可以单独使能,使得芯片在典型的500ms轮询周期下,电流消耗约为3.4uA。
在典型应用电路中,Si522A与MCU(微控制器)以及读写器天线进行连接。
MCU 通过适当的接口与Si522A进行通信,控制读写操作,并处理接收到的数据。
读写器天线则负责发送和接收无线信号,与Si522A内部的发送器和接收器模块相连。
此外,应用电路还可能包括一些辅助元件,如滤波器、阻抗匹配网络等,以确保信号的稳定性和可靠性。
整体而言,Si522A的典型应用电路是一个高效、可靠且低功耗的非接触式读写器系统,广泛应用于身份识别、支付、门禁控制等领域。
基于读卡模块的物流车载终端设计ZLT522GPS12李红杨晓昱(1.北京信息职业技术学院北京100070;2.机械工业信息研究院北京100037)摘要:介绍一种基于ZLT522读卡模块的物流车载GPS,系统核心采用Cortex-M3的LPC1768120MHz处理器,通过SPI接口连接LCD显示屏用于人机界面交互,连接串行Flash用于存储设备运行信息,IIC接口用于连接铁电存储器与时钟芯片,时钟芯片为系统提供时间,用于记录车辆运行的时间,在每个时刻的运行位置。
关键词:读卡模块;GPS;GPS终端中图分类号:TP391文献标识码:A文章编号:1671-7597(2012)0510058-01车载现在广泛的应用于出租车,长途客车,货物运输GPS车辆,用于监控车辆的运行状态,车辆运行位置,并且能够有效防止车辆被抢劫,被盗窃。
1系统硬件构成本文介绍了一种基于读卡模块的物流车载,车ZLT522GPS载的框图如图所示,系统核心采用-的GPS1CortexM3LPC1768120MHzSPILCD处理器,通过接口连接显示屏用于人机界面交互,连接串行用于存储设备运行信息,接口用于连接FlashIIC铁电存储器与时钟芯片,时钟芯片为系统提供时间,用于记录车辆运行的时间,在每个时刻的运行位置。
通过串口连接0GPRS1GPS实现与监控中心联网,串口连接模块,用于获取车辆运行的位置信息,并且实时上传到监控中心。
串口连接2ZLT522读卡模块,用于读取卡片,获取对车辆的驾驶权限。
图车载终端系统框图1GPS1.1主控单片机。
主控单片机采用位的处理器32LPC1768,它有四个串口且性能比较高,它在系统中负责接收GPS的输入信号,也能够接收用户手柄的输入信号。
对于获取的信号数据,按相应的算法进行分析计算,能够计算机当前信息提供点的经、纬度值。
同时,它也能接收和解析临控中心的命令信息,按中心的命令完成相应的操作,比如上传信息提供点的经纬度值、有紧急情况的报警等操作。
HSJ522W读卡模块应用指南广州慧斯佳智能科技有限公司修订历史概述HSJ522系列读卡模块简介HSJ522系列模块是基于13.56MHz频率的Mifare卡读写模块,符合ISO14443A标准,可支持Mifare1 S50、Mifare1 S70、Mifare Light、Mifare UltraLight、Mifare Pro。
TX522系列Mifare读写模块具有易用、高可靠、多种接口、体积小等特点,可帮助用户方便、快捷地将当今最流行的非接触式IC卡技术融入到系统中,提高产品的档次。
HSJ522W为自动寻卡模块,上电后无需向模块发送任何命令,只要有卡靠近模块就能主动通过韦根发送卡号。
HSJ522W是一个简单的韦根接口只读卡号模块。
可设置为韦根34或韦根26两种输出格式。
如图0.1所示为HSJ522W读卡模块。
产品特性体积小巧、简单、易用、性价比高支持各种mifare卡及其兼容卡读写卡距离远(根据应用可达10-100mm)模块内部具有看门狗,永不死机接受批量客户定制产品应用电子感应门锁门禁系统、办公/家庭安防、身份识别、出入管理、公司考勤防伪系统、身份识别票证以及其他相关应用图0.1 HSJ522W读卡模块目录概述 (1)HSJ522系列读卡模块简介 (1)产品特性 (1)产品应用 (1)1. 硬件描述 (1)1.1引脚描述 (1)1.2典型电路 (2)1.3技术参数 (2)1.4极限参数 (2)1.5直流特性 (3)1.6封装及机械尺寸 (3)2. 接口方式及典型应用 (5)2.1返回卡号说明 (5)3. 数据通讯协议 (6)3.1韦根接口协议 (6)4. 免责声明 (8)4.1开发预备知识 (8)4.2EMI 与EMC (8)4.3修改文档的权利 (8)4.4ESD静电放电保护 (8)5. 销售信息 (9)1. 硬件描述1.1 引脚描述图1.1 HSJ522系列模块管脚图表1.1 外接天线接口J1J1为模块与天线的接口,对于天线一体化(带后缀T )的模块,如果用户使用模块上的PCB 印制天线,则可以不使用该接口;对于非天线一体化(不带后缀T )的模块,用户要通过该接口来连接天线。
基于某MFRC522地RFID读卡器模块设计及实现首先,需要进行硬件设计。
设计一个扩展板,将MFRC522模块连接到单片机主控,可以选择使用Arduino等常见的开发板作为主控。
连接MFRC522模块的SPI接口,以实现与主控的通信。
同时,还需要为MFRC522模块提供合适的电源供电,一般是3.3V。
接下来,需要进行软件设计和实现。
首先,需要在主控上编写代码,以控制MFRC522模块的初始化和数据读取。
使用主控的SPI接口与MFRC522模块进行通信,发送相应的命令和接收数据。
可以使用MFRC522的库文件,方便地实现这些功能。
在代码中,首先需要初始化MFRC522模块。
这包括将MFRC522模块的寄存器设置为合适的状态,并设置其工作频率等参数。
然后,可以通过发送命令来附近的RFID卡片。
一旦找到卡片,可以读取卡片的UID和其他相关数据。
读取卡片UID后,可以通过与数据库连接,查询卡片对应的用户信息。
将卡片UID与用户信息进行关联,可以实现对卡片的身份验证和数据读取。
可以根据业务需求,设计实现需要的功能,例如门禁系统、考勤系统等。
需要注意的是,MFRC522模块在设计和使用时需要遵循一些基本的安全原则。
例如,需要设置适当的安全密钥以保护卡片数据的安全性。
在通信过程中,使用合适的加密算法以防止数据被窃取或篡改。
在实现过程中,可以参考MFRC522模块的相关资料和示例代码,例如MFRC522模块的数据手册和库文件。
此外,还可以参考其他类似的开源项目,了解设计和实现RFID读卡器模块的方法和技巧。
总结起来,基于MFRC522的RFID读卡器模块的设计和实现需要进行硬件和软件两方面的工作。
在硬件方面,需要设计一个扩展板来连接MFRC522模块和主控。
在软件方面,需要在主控上编写代码来控制MFRC522模块的初始化和数据读取。
通过合理的设计和实现,可以实现对RFID卡片的识别和数据读取功能,满足不同应用场景的需求。
ZLG500A读卡模块使用指南版本1.412005年8月20日目 录§1 概述 (3)1.1 照片 (3)1.1.1 独立模块 (3)1.1.2 天线一体化模块 (3)1.2 特征 (4)1.3 电气特性 (4)§2 硬件描述 (5)2.1 引脚描述 (5)2.2 串行接口...............................................................................................................................6 §3 ZLG500三线三线串行读串行读串行读卡模块接口规范卡模块接口规范.. (7)3.1 接口原理 (7)3.2 时序图 (7)3.3 写数据MCU ZLG500 (8)§4 ZLG500读卡模块数据传输协议 (9)4.1 介绍 (9)4.2 协议 (9)4.2.1协议描述 (9)4.2.2 数据块格式 (9)4.3 ZLG500和MCU 命令C51函数(版本号1.4) (11)4.3.1 底层函数和高级函数 (11)4.3.2 状态值列表 (12)4.3.2版本说明 (13)4.4 函数描述 (13)4.4.1 请求Request (14)4.4.2 防碰撞Anticoll (15)4.4.3 选择Select (16)4.4.4 证实Authentication (17)4.4.5 暂停Halt (18)4.4.6 读Read (19)4.4.7 写Write (20)4.4.8 加Increment (21)4.4.9 减Decrement (22)4.4.10 恢复Restore (23)4.4.11 传送Transfer (24)4.4.12 装载密钥Load Key (25)4.4.13 复位Reset (26)4.4.14 获取信息Get Info (27)4.4.15 置位控制位Set Control Bit (28)4.4.16 清除控制位Clr Control Bit (29)4.4.17 配置Config (30)4.4.18检查写—Check Write (31)4.4.19输出蜂鸣器信号Buzzer (32)4.4.20读EEPROM (33)4.4.21写EEPROM (34)4.4.22关闭RC500—Close (35)4.4.23值操作 (36)4.4.24防碰撞2—Anticoll2 (37)4.4.25 证实2—Authentication2 (38)4.4.26 直接密码证实AuthKey (39)4.4.27多层防碰撞CascAnticoll (40)4.4.28多层选择Select (41)4.4.29写UltraLight—ULWrite (42)4.4.30带内部自动传送的值操作 (43)4.4.31写寄存器 (44)4.4.32读寄存器 (45)4.5 利用SPI_INIT()初始化SPI接口 (46)4.6 全局变量 (46)4.7 SPI看门狗定时器 (46)4.8 应用程序举例 (47)1 概述1.1 照片1.1.1独立模块需外加天线才可使用实际尺寸41.5mm25.3mm1.1.2天线一体化模块实际尺寸58mm×34.5mm1.2 特征!"四层电路板设计双面表贴EMC性能优良!"采用最新PHILIPS高集成ISO14443A读卡芯片MF RC500!"三线SPI接口能与任何MCU接口!"控制线输出口!"无源蜂鸣器信号输出口能用软件控制输出频率及持续时间!"能读写RC500内EEPROM!"发光二极管指示模块当前状态!"可提供C51函数库1.3 电气特性符号参数最小典型最大单位T STR环境或存储温度范围 -40 +150 O CO C+85+25T OP工作温度范围 -25V5.5V CC工作电压范围 4.55I CC1电流消耗config成功后75 MAI CC2电流消耗close成功后7 MA2 硬件描述2.1 引脚描述如照片所示J1为与天线的接口J2为与MCU的接口如下二表所示管脚符号描述J1-1 GND 地J1-2 TX1 天线发送1J1-3 GND 地J1-4 TX2 天线发送2J1-5 GND 地J1-6 RX 天线接收管脚符号类型描述J2-1 SCLK 输入三线SPI接口时钟线总是由外部MCU产生J2-2 SDA TA 双向数据线可双向传输J2-3 SS 双向传输启动线接MCU外部中断J2-4 VCC PWR 电源正端J2-5 RST 复位模块复位端若模块名后缀不带G如zlg500A T则高电平有效若模块名后缀带G如zlg500A TG则低电平有效或该端悬空J2-6 GND PWR 电源负端J2-7 CTRL 输出控制线输出J2-8 BZ 输出蜂鸣器信号输出2.2 串行接口ZLG500模块可方便地与任何MCU 进行接口如下图所示与MCS51单片机的典型接口三线分别为片选SS 时钟线SCLK 和数据线SDATA 主控制器的MCU 和读卡模块内的MCU 通过此三线相连三根线上的实际电平是双方口线状态逻辑线与的结果3 ZLG500三线三线串行读卡模块接口规范串行读卡模块接口规范3.1 接口原理接口空闲时主机SS=1SCLK=0SDATA=0从机SS=1SCLK=1SDATA=0其中SS和DATA是双向的而时钟线SCLK是单向的即时钟只能由主控制器产生该信号必须严格遵守时序规范否则将出现通信错误读卡模块必须释放该线SS 为数据发送使能若一方有数据要发送给另一方则该方控制SS线为低并在发送结束后将该线置高接收数据方不得控制该线双方必须遵守通信协议不得同时控制该线SDATA 为数据线由数据发送端控制数据接收端必须释放该线该线在一次传输开始时还同时作为数据接收端的响应信号以下几个概念必须搞清楚数据发送器在一次传输中控制SS信号和写数据的一方数据接收器在一次传输中响应SS信号和读数据的一方MCU 外部控制器在一次数据传输中可以是数据接收器或发送器但必须产生SCLK信号ZLG500本模块在一次数据传输中可以是数据接收器或发送器但必须接收SCLK信号3.2 时序图如图所示无论数据传输的方向如何SPI线上信号的波形总是如下由图中可以看出在SS为低的情况时钟和数据线上的信号才有效且在SCLK为低时SDATA变化在SCLK为高时SDATA应保持稳定以上传输中从数据发送器请求开始至数据接收器响应的时间是不确定的取决接收器内的MCU是否忙有必要设置一个看门狗定时器对数据接收器的响应进行监视一旦接收器响应则MCU必须根数据传输的方向严格控制以下几个时间以确保数据传输无误t1—数据接收器响应至MCU产生第一个SCLK上升沿的时间t2—两个字节传输之间SCLK低电平的持续时间t3—传输最后一个字节的最后一位的SCLK信号的上升沿至SS上升沿的时间tH—SCLK信号的高电平持续时间tL—SCLK信号的低电平持续时间在数据传输的不同方向时对时间t1— t3tH 和tL 都有各自不同的要求3.3 写数据MCU ZLG500除响应信号外三根线上的信号全由MCU 产生MCU 在SS 线上产生一个下降沿发出请求数据传输的信号等待ZLG500响应后本次数据传输开始ZLG500将在SCLK 为高时读取SDATA 线上的数据传输完毕后MCU 应在SS 线上产生一个上升沿结束本次传输见下表动作序号 动作发出者动作 动作接收者 动作说明1 MCU 置SDATA为输入SCLK=0SS= ZLG500 本次数据传输开始请求 2 ZLG500 SDATA = MCU 本次数据传输响应 3 MCU 置SDATA 为输出且输出串行数据 ZLG500 数据传输4 MCU SCLK=延时 ZLG500 MCU 产生时钟脉冲高电平时ZLG500读数据 5 MCU 重复动作34传送N 8位 ZLG500 数据传输N 字节 6 MCU SS=SDATA=0SCLK =0 ZLG500 本次数据传输结束传输过程中必须严格遵守以下时间要求 t1>7s t2>14s tH>7s tL>9s t3=任意3.4读数据MCU ZLG500响应信号SCLK 信号由MCU 产生SS 信号和SDATA 信号由ZLG500产生ZLG500会在SS 线上产生一个下降沿发出请求数据传输的信号等待MCU 响应后本次数据传输开始MCU 将在SCLK 为高时读取SDATA 线上的数据传输完毕后ZLG500将会在SS 线上产生一个上升沿结束本次传输见下表动作序号 动作发出者动作动作接收者 动作说明1 ZLG500 SDATA =1SS= MCU 本次数据传输开始请求2 MCU 置SDATA 为输入 ZLG500 本次数据传输响应3 ZLG500 SDATA =串行数据 MCU 数据传输4 MCU SCLK=延时 ZLG500 MCU 产生时钟且读取数据 5 双方 重复动作34传送N 8位 双方 数据传输N 字节 6 ZLG500 SS =SDATA =0 MCU 本次数据传输结束传输过程中必须严格遵守以下时间要求t1>14s t2>16s tH>6s tL>6s t3>9s4 ZLG500读卡模块数据传输协议4.1 介绍本文档描述了MIFARE串行读卡模块ZLG500与主机微处理器之间的串行通信软件的通信协议和命令ZLG500是一个简单的串行读写模块它可以读写MIFARE无线智能卡在这个器件中包括了一个PCB天线提供了一个三线通信接口CMOS电平SPI可受控于主机微处理器4.2 协议4.2.1协议描述通信必须先由MCU发送命令和数据给ZLG500ZLG500执行命令完毕后将命令执行的状态和响应数据发回MCU开始通信前收发双方必须处于空闲状态ZLG500的RST有两种接法一是接硬件复位电路如阻容复位等这样系统上电后必须要等待ZLG500复位结束二是接外部MCU的一个I/O口由MCU控制复位推荐使用第二种方法这样在ZLG500出现异常时可由MCU控制复位首先MCU发出SS下降沿信号然后等待ZLG500在SDATA线上的响应若在50ms内未检测到此响应则退出本次传输将错误代码返回给主程序由主程序进行错误处理若ZLG500正确响应则MCU可将命令和数据发送出去然后MCU等待ZLG500发回的状态和响应数据也即等待SS线上的下降沿的产生此时的MCU可用软件查询也可用外部中断若在500ms内未检测到此信号则退出本次传输且向主程序报告错误代码若正确检测到SS信号则可接收状态和数据4.2.2 数据块格式4.2.2.1 MCU ZLG500命令模式SeqNr Command Len Data[0N] BCC INFO[0] . . . . . . INFO[n]SeqNr 1 Byte 数据交换包的序号Command 1 Byte 命令字符Len 1 Byte 数据的长度Data[]Len Byte 数据字节BCC1Byte的BCC校验4.2.2.2 ZLG500MCU响应模式SeqNr status Len Data[0N] BCC INFO[0] . . . . . . INFO[n]SeqNr 1 Byte 数据交换包的序号status 1 Byte 状态字符Len 1 Byte 数据的长度Data[]Len Byte 数据字节BCC1Byte的BCC校验4.2.2.3 数据块格式描述!"每个字节命令或数据传输时高位在先!"数据交换包的序号由MCU发送数据块时产生在经过一次正确的数据交换后主机在发送下一个命令时将数据包的序号加1ZLG500返回最近接收的包序号通常主机应用程序最好检查命令/响应包交换时的数据包的序号!"不管在执行命令时出现了任何错误响应包中的数据长度为0Len = 0!"BCC校验码计算数据块中所有的INFO字节然后将结果传送到数据块的最后一个字节如下式所示INFO[n] = BCC = ~INFO[0] ⊕ INFO[1] ⊕ ... ⊕ INFO[n-1](⊕ ... XOR~…NOT)4.3 ZLG500和MCU 命令C51函数(版本号1.4) 4.3.1 底层函数和高级函数命令 参数名称数值发送接收说明Request 0x41 _Mode _TagType 发出询问命令检查在有效范围内是否有卡存在Anticoll 0x42 _Bcnt _SNR 开始防冲突操作返回卡的序号Anticoll2 0x71 _Encoll,_Bcnt _SNR 可禁止或允许多张卡进入 CascAnticoll* 0x74 _Bcnt,_Select_Code _SNR 可实现三层防碰撞协议 Select 0x43 _SNR _Size 选择卡返回卡的存贮容量 CascSelect* 0x75_Select_Code, _SNR _Sak可实现三层选择Authentication 0x44 _Mode,_SecNr -- 开始验证操作 Authentication2 0x72 _Mode,_SecNr,_KeyNr 可选择密匙区验证 AuthKey 0x73 _Mode,_SecNr,_Key(6) -- 直接密码验证 Halt 0x45 -- -- 将卡置于挂起模式 Read 0x46 _Adr _Data 从卡中相应地址中读出一个16字节的块Write 0x47 _Adr,_Data -- 向卡中相应地址写入一16字节的数据块ULWrite* 0x76_Adr,_Data -- 向mifare UltraLight 卡中相应地址页写入4字节数据 Increment 0x48 _Adr,_Value -- 增加访问单元块的字节数并将结果保存在卡的内部寄存器Decrement 0x49 _Adr,_Value -- 减少访问单元块的字节数并将结果保存在卡的内部寄存器 Resore 0x4A _Adr -- 将所访问单元块的字节数保存在卡的内部寄存器中 Transfer 0x4B_Adr --将卡内部寄存器的内容转输到访问快的字节数Value 0x70_Mode,_Adr,_Value,_Trans_Adr 包含加减恢复函数并带自动传送ValueDebit* 0x77_Mode,_Adr,_Value -- 带内部自动传送的值操作支持Mifare Light LoadKey 0x4C _Mode,_SecNr,,_Nkey -- 改变存贮在EEPROM 中的密钥Reset 0x4E _Msec -- 关闭天线输出数ms 使卡复位 Get Info 0x4F -- _Info 读取固件信息RC500序列号 Set Control Bit0x50----将控制位置为高电平Clr Control Bit 0x51 -- -- 将控制位置为低电平 Config 0x52 -- -- 复位且配置RC500Write_Reg 0x3D_Reg,_Value写RC500内寄存器Read_Reg 0x3E _Reg *_Value 读RC500内寄存器Close 0x3F -- -- 关闭RC500 Check Write0x53_SNR,_Authmode,_Adr,_Data--将所传送的数据和上一次所写的数据进行比较Buzzer 0x60 _Freguence,_10ms -- 输出驱动无源蜂鸣器信号 Read E2 0x61 _Adr,_Length _Data 读RC500内EEPROM 的内容 Write E20x62_Adr,_Length,_Data-- 写数据到RC500内EEPROM Init_spi初始化spi 接口不与ZLG500通信4.3.2 状态值列表名称值 描述MI_OK, SPI_OK函数调用成功MI_NOTAGERR 1 在有效区域内没有卡MI_CRCERR 2 从卡中接收到了错误的CRC 校验和 MI_EMPTY 3 值溢出 MI_AUTHERR 4 不能验证MI_PARITYERR 5 从卡中接收到了错误的校验位 MI_CODEERR 6 通信错误MI_SENDRERR 8 在防冲突时读到了错误的串行码 MI_NOTAUTHERR 10 卡没有验证MI_BITCOUNTERR 11 从卡中接收到了错误数量的位 MI_BYTECOUNTERR 12 从卡中接收了错误数量的字节 MI_TRANSERR 14 调用Transfer 函数出错 MI_WRITEERR 15 调用Write 函数出错 MI_INCRERR 16 调用Increment 函数出错 MI_DECRERR 17 调用Decrment 函数出错 MI_READERR 18 调用Read 函数出错 MI_COLLERR 24 冲突错MI_QUIT 30 上一次了送命令时被打断 MIS_CHK_OK 0 Check Write 正确 MIS_CHK_FAILED 1 Check Write 出错 MIS_CHK_COMPERR 2 Check Write:写出错比较出错SPI_ERR 255 串行通信错误4.3.2版本说明一版本1.1对应于1.0增加了两个函数!"防碰撞Anticoll2可允许或禁止多张卡同时进入开线区!"证实Authentication2可选择不同的密匙区对一个扇区进行密码验证二版本1.2对应于1.1增加了一个函数!"直接密码证实AuthKey证实时6字节密码直接由主控制器MCU传入模块三版本1.3对应于1.2增加了四个函数!"多层防碰撞CascAnticoll支持多字节序列号!"多层选择CascSelect支持多字节序列号!"UL写函数ULWrite支持Mifare Ultralight四字节写!"自动传送值操作ValueDebit支持Mifare Light和pro四版本1.4相对于1.3增加了二个函数2004年8月10日升级!"写寄存器Write_Reg可直接控制RC500内的寄存器!"读寄存器Read_Reg可读出RC500内的寄存器4.4 函数描述下面是C51函数声明包含在头文件ZLG500.h中写应用程序时将其包含在应用函数中即可4.4.1 请求Request声明uchar mifs_request(uchar _Mode,uchar idata *_TagType);MCU ⇒ZLG500命令符0x41 长度 1Data[0]:_ModeZLG500 ⇒ MCU状态值MI_OK MI_NOTAGERRMI_BITCOUNTERR SPI_ERR长度2Data[0]: tagtype (低字节)Data[1]: tagtype (高字节)参数 _ModeALL=0请求天线范围内IDLE 状态的卡HALT 状态的除外ALL =1请求天线范围内的所有卡_tagtype 当发生错误时不返回任何内容Len=0描述此函数发送Request 命令检查在有效范围内是否有卡存在这个函数在选择一个新的卡是必须调用的ALL4.4.2防碰撞Anticoll声明uchar mifs_anticoll(uchar _Bcnt,uchar idata *_SNR);MCU ⇒ ZLG500命令符0x42长度 1Data[0]_BcntZLG500⇒ MCU状态值MI_OK MI_NOTAGERR MI_BITCOUNTERR SPI_RERR长度 4Data[0]snr(LL)Data[1]snr(LH)Data[2]snr(HL)Data[3]snr(HH)参数_Bcnt为预选卡所分配的位的个数通常Bcnt=0_SNR卡的序列号存贮在一个无符号的四字节数组中低字节放在地址处描述此函数开始防冲突操作必须在调用了Request命令后立即调用当知道了所要选择卡的序列号后就没有必要调用AntiColl此时调用了Request后直接调用Select函数即可4.4.3选择Select声明uchar mifs_select(uchar idata *_SNR,uchar idata *_Size);MCU ⇒ ZLG500命令符0x43长度 4Data[0]snr(LL)Data[1]snr(LH)Data[2]snr(HL)Data[3]snr(HH)ZLG500⇒ MCU状态值 MI_OK MI_QUIT MI_NOTAGERR MI_CRCERR MI_PAROTUERRMI_BITCOUNTERR SPI_ERR长度 1Data[0]_Size参数_SNR卡的序号存贮在一个无符号4字节字符数组中低字节放在代地址处_Size当Select命令返回值为MI_OK时A TS (answer to select)将返回主机描述这个函数选择某一个序列号的卡返回A TS字节给主机4.4.4 证实Authentication声明uchar mifs_authentication(uchar _Mode,uchar _SecNr);MCU ⇒ZLG500命令符 0x44 长度 2Data[0] _ModeData[1]_SecNrZLG500 ⇒ MCU状态值MI_OKMI_QUITMI_NOTAGERRMI_PAROTUERRMI_BITCOUNTERRSPI_ERR长度参数 _ModeAB = 0 利用密钥A 进行验证AB = 1利用密钥B 进行验证_SecNr所访问卡的扇区号描述 在对卡进行读写加减等操作前必须对卡进行验证若卡中的密钥与RC500中存储的密码相匹配则证实成功函数将返回MI_OKAB4.44.5暂停Halt4.声明uchar mifs_halt(void);MCU ⇒ ZLG500命令符0x45长度0ZLG500⇒ MCU状态值 MI_OK MI_QUIT MI_CODE SPI_ERR长度0参数无描述此函数将所选择卡置为挂起状态如果要进行重新选择则应用ALL模式调用Request命令或将卡复位如将卡离开天线操作区再进入或执行复位函数mifs_reset();4.4.6读Read描述uchar mifs_read(uchar _Adr,uchar idata *_Data);MCU ⇒ ZLG500命令符0x46长度 1Data[0]_AdrZLG500⇒ MCU状态值 MI_OK MI_QUIT MI_NOTAGERR MI_CRCERR MI_NOTAUTHERRMI_PAROTUERR MI_BITCOUNTERR SPI_ERR长度 16Data[0]所访问块的第一个字节Data[15]所访问块的最后一个字节参数_Adr所读数据地址描述此函数在所选的卡通过验证后读取一个16字节的块4.4.7写Write描述uchar mifs_write(uchar _Adr, uchar idata *_Data);MCU ⇒ ZLG500命令符0x47长度17Data[0]addressData[1]所访问块的第一个字节Data[16]所访问块的最后一个字节ZLG500⇒ MCU状态值 MI_OK MI_QUIT MI_NOTAGERR MI_NOTAUTHERR MI_WRITEERRMI_BITCOUNTERR SPI_ERR长度 0参数_Adr所写数据块地址063_Data16字节数据指针描述此函数在所选的卡通过验证后写入一个16字节的块4.4.8加Increment声明uchar mifs_increment(uchar _Adr,ulong idata *_Value);MCU ⇒ ZLG500命令符0x48长度 5Data[0]_AdrData[1]_Value(LL)Data[2]_Value(LH)Data[3]_Value(HL)Data[4]_Value(HH)ZLG500⇒ MCU状态值 MI_OK MI_QUIT MI_NOTAGERR MI_NOTAUTHERR MI_INCRERRMI_BITCOUNTERR SPI_ERR MI_INCRERR长度0参数_Adr所加数据块的地址_Value增加值贮在一个无符号的长整型变量4Byte中低地址存放高字节描述该函数读被访问的值块检查数据的结构用传输的值减值块的值并将结果贮存在卡的内部寄存器中值块有标准的格式不能自动进行对卡中EEPROM的写操作4.44.9减Decrement4.声明uchar mifs_decrement(uchar _Adr,ulong idata *_Value);MCU ⇒ ZLG500命令符0x49长度 5Data[0]_AdrData[1]_Value(LL)Data[2]_Value(LH)Data[3]_Value(HL)Data[4]_Value(HH)MSR⇒ 主机状态值 MI_OK MI_QUIT MI_NOTAGERR MI_NOTAUTHERR MI_DECRERRMI_BITCOUNTERR SPI_ERR长度0参数_Adr所减数据块的地址_Value减少值贮在一个无符号的长整型变量4Byte中低地址存放高字节描述该函数读被访问的值块检查数据的结构用传输的值减值块的值并将结果贮存在卡的内部寄存器中值块有标准的格式不能自动进行对卡中EEPROM的写操作4.4.44.1.100 恢复Restore 声明uchar mifs_restore(uchar _Adr);MCU ⇒Z LG500命令符0x4A长度1 Data[0] _AdrZLG500⇒M CU 状态值MI_OK, MI_QUIT, MI_NOTAGERR, MI_NOTAUTHERR, MI_DECRERR, MI_BITCOUNTERR, SPI_ERR, MIS_EMPTY长度 0 参数 _Adr所读块的地址描述该函数读被访问的值块且检查数据的结构并将结果贮存在卡的内部寄存器中不能自动进行对卡中EEPROM 的写操作4.4.44.1.111 传送Transfer 声明uchar mifs_transfer(uchar _Adr);MCU ⇒Z LG500命令符0x4B长度1 Data[0] _AdrZLG500⇒ MCU 状态值MI_OK, MI_QUIT, MI_NOTAGERR, MI_CODE, MI_BITCOUNTERR, MI_TRANSERR,MI_CODEERR, SPI_RERR长度 0 参数 _Adr卡中欲传输的块地址描述此函数将卡的内部寄存器内容转送给所选块地址在此操作前必须通过验证这个函数只能在Increment,Decrement,或Restore 操作后4.4.44.1.122 装载密钥Load Key 声明uchar mifs_load_key(uchar _Mode,uchar _SecNr,uchar *_Nkey);MCU ⇒ZLG500命令符0x4C长度 8Data[0] _ModeData[1] _SecNrData[2] _Nkey[0]: :Data[7]_Nkey[5]MSR ⇒主机 状态值 MI_OK MI_QUIT MI_AUTHERR SPI_ERR长度 0 参数 _ModeAB = 0 利用密钥A 进行验证AB = 1 利用密钥B 进行验证_SecNr: 密钥扇区号_Nkey: 6字节密钥首址描述这个函数将一个新的密钥写入到RC500的只写EEPROM 存贮器中AB4.4.44.1.133 复位Reset 声明uchar mifs_reset(uchar _Msec);MCU ⇒Z LG500命令符0x4E长度1 Data[0] _MsecZLG500⇒M CU 状态值 MI_OK MI_QUIT SPI_ERR长度 0 参数 _Msec射频电路关闭时间以毫秒为单位 描述该函数使射频电路关闭所规定的时间若_Msec=0射频电路部分将一直处于关闭状态一直到下一个Request 命令到来关闭射频能使天线内的所有卡复位举例_Msec = 0⇒ 射频电路关闭_Msec = 0x01⇒ 1 ms 射频电路关闭1ms _Msec= 0xFF⇒ 255 ms射频电路关闭255ms4.4.44.1.144 获取信息Get Info 声明uchar mifs_get_info(uchar idata *_Info);MCU ⇒Z LG500命令符 0x4F长度 0ZLG500⇒M CU 状态值 MI_OK MI_QUIT SPI_ERR 长度10 Data[0]产品类型标识0: : Data[4]产品类型标识4Data[5]RC500序列号0: : Data[8]RC500序列号3Data[9]软件版本号参数 _Info_Info[0]—_Info[4]为RC500的产品类型标识依次为0x30,0x88,0xf8,0x00,0xXX _Info[5]—_Info[8]为RC500的序列号 描述此函数返回一个包含有RC500的产品类型标识序列号和软件版本信息的数组4.4.44.1.155 置位控制位Set Control Bit 声明uchar mifs_set_control_bit();MCU ⇒Z LG500命令符 0x50长度 0ZLG500⇒M CU 状态值 MI_OK MI_QUIT SPI_ERR长度 0 描述此函数设置MIFARE 读卡器中的控制位为高电平4.4.44.1.166 清除控制位Clr Control Bit 声明uchar mifs_clr_control_bit();MCU ⇒Z LG500命令符 0x51长度 0ZLG500⇒M CU 状态值 MI_OK MI_QUIT SPI_ERR长度 0 描述此函数清除MIFARE 读卡器中的控制位4.44.17配置Config4.声明mifs_config(void);ucharMCU ⇒Z LG500命令符0x52长度0ZLG500⇒M CU状态值 MI_OK MI_QUIT SPI_ERR长度0参数说明模块每次上电复位之后都必须首先调用此函数对模块进行初始化才能进行进一步的操作4.4.18检查写Check Write声明uchar mifs_check_write(uchar idata *_SNR, uchar _Authmode, uchar _Adr, uchar idata *_Data);MCU ⇒Z LG500命令符0x53长度22Data[0]_SNR(LL)Data[1]_SNR(LH)Data[2]_SNR(HL)Data[3]_SNR(HH)Data[4]_AuthmodeData[5]_AdrData[6]块的第一个字节::Data[21]块的最后一个字节ZLG500⇒M CU状态值 MI_QUIT MIS_CHK_OK MIS_CHK_FAILED MIS_CHK_COMPERR SPI_ERR 长度0参数_SNR所要检查的卡的序号_Authmode上一次写命令时的验证模式_Adr所要检查的数据块的地址_Data所检查的数据描述此函数在数据写入卡的数据进行检查将重新进行Request/Select/Authenticated操作此函数进行将所给出的数据与相应地址的数据进行比较如果正确则返回MIS_CHK_OK信息如果两者间数据不相符则返回MIS_CHK_COMPERR信息发生其它任何错误时返回MIS_CHK_FAILED信息4.44.19输出蜂鸣器信号Buzzer4.声明mifs_buzzer(uchar _Frquence, uchar _10ms);MCU ⇒Z LG500命令符0x60长度 2Data[0]_FrequenceData[1]: _10msZLG500⇒M CU状态值 MI_OK SPI_ERR长度0参数_Frequence: 输出方波频率取值0255对应频率0.73—4K取值198对应2K_10ms: 方波输出持续时间取值025510ms的分辨率描述此函数输出一方波可驱动无源蜂鸣器频率和持续时间可调4.4.44.2.200 读EEPROM声明uchar mifs_read_E2(uchar _Adr,uchar _Length,uchar idata *_Data);MCU ⇒Z LG500命令符0x61长度2 Data[0]_AdrData[1]_LengthZLG500⇒M CU 状态值 MI_OK MI_QUIT MI_CRCERR MI_BITCOUNTERR SPI_ERR 长度_LengthData[0] byte… Data[_Length]byte参数 _Adr被读RC500内EEPROM 首址必须小于0x80_Length被读数据长度_Data读出数据缓冲区首址 描述此函数将RC500内EEPROM 的数据读出4.4.44.2.211 写EEPROM声明uchar mifs_write_E2(uchar _Adr,uchar _Length,uchar idata *_Data);MCU ⇒Z LG500命令符0x62长度_Length+2 Data[0]_AdrData[1]_LengthData[2]_Data[0]… Data[_Length+1]_Data[_Length-1]ZLG500⇒M CU 状态值 MI_OK MI_QUIT MI_CRCERR MI_BITCOUNTERR SPI_ERR长度 0参数 _Adr RC500内EEPROM 的写入首址取值范围0x300x7F_Length被写数据长度_Data写入数据缓冲区首址 描述此函数将数据写入RC500内EEPROM 中RC500内EEPROM 的0x00—0x0F 为只读产品信息区0x10—0x2F 为启动寄存器初始化文件区最好不要改写0x80—0x1FF 为只读密钥区可用LoadKey 写入4.4.44.2.222 关闭RC500Close 声明uchar mifs_close(void);MCU ⇒Z LG500命令符 0x3F长度 0ZLG500⇒M CU 状态值 MI_OK SPI_ERR长度 0参数描述此函数将RC500的复位管脚置为高电平关闭RC500使之电流最小若要重新启动则需调用Config()4.4.44.2.233 值操作声明uchar mifs_value(uchar _Mode, uchar _Adr, ulong idata *_Value, uchar _Trans _Adr);MCU ⇒Z LG500命令符0x70长度7 Data[0]_ModeData[1]_AdrData[2]_Value(LL)Data[3]_Value(LH)Data[4]_Value(HL)Data[5]_Value(HH)Data[6]_Trans_AdrZLG500⇒M CU 状态值MI_OK, MI_QUIT, MI_NOTAGERR, MI_CODE, MI_BITCOUNTERR, MI_TRANSERR, MI_CODEERR, SPI_RERR长度 0 参数_Mode: 0xC0—减0xC1—加0xC2恢复 _Adr 卡内块地址对该块进行值操作取值范围063_Value 当进行加或减操作时为加数或减数当进行恢复操作时该值为空值 _Trans_Adr传输块地址取值范围063描述此函数对卡内的某一块进行加减或数据备份该块必须为值块格式并支持自动传送4.4.24防碰撞2Anticoll2声明uchar mifs_anticoll2(uchar _Encoll, uchar _Bcnt,uchar idata *_SNR);MCU ⇒ ZLG500命令符0x71长度 2Data[0]_EncollData[1]_BcntZLG500⇒ MCU状态值MI_OK MI_NOTAGERR MI_BITCOUNTERR MI_COLLERR SPI_RERR长度 4Data[0]snr(LL)Data[1]snr(LH)Data[2]snr(HL)Data[3]snr(HH)参数_Encoll: 若为1则使能多张卡进入天线区若为0则不多张卡进入此时返回错误MI_COLLERR._Bcnt为预选卡所分配的位的个数通常Bcnt=0_SNR卡的序列号存贮在一个无符号的四字节数组中低字节放在地址处描述此函数开始防冲突操作必须在调用了Request命令后立即调用当知道了所要选择卡的序列号后就没有必要调用AntiColl此时调用了Request后直接调用Select函数即可4.4.25 证实2Authentication2 声明uchar mifs_authentication2(uchar _Mode, uchar _SecNr, uchar _KeyNr);MCU ⇒ZLG500命令符0x72 长度3Data[0]_ModeData[1]_SecNrData[2]_KeyNrZLG500 ⇒ MCU状态值MI_OKMI_QUITMI_NOTAGERRMI_PAROTUERRMI_BITCOUNTERR SPI_ERR长度 0 参数 _ModeAB = 0 利用密钥A 进行验证AB = 1 利用密钥B 进行验证_SecNr所访问卡的扇区号_KeyNr用于证实的密匙区号 描述在对卡进行读写加减等操作前必须对卡进行验证若卡中的密钥与RC500中所选择的密码相匹配则证实成功函数将返回MI_OKAB4.4.26 直接密码证实AuthKey 声明uchar mifs_authentication2(uchar _Mode, uchar _SecNr, uchar *_Key);主机 ⇒ 读卡器命令符0x73 长度8Data[0]_ModeData[1]_SecNrData[2]_Key[0] …Data[7]_Key[5]读卡器 ⇒ 主机状态值MI_OKMI_QUITMI_NOTAGERRMI_PAROTUERRMI_BITCOUNTERR COMM_ERR长度 0 参数 _ModeAB = 0 利用密钥A 进行验证AB = 1 利用密钥B 进行验证_SecNr所访问卡的扇区号 _Key用于证实的密码首址描述在对卡进行读写加减等操作前必须对卡进行验证若卡中的密钥与所传输的密码相匹配则证实成功函数将返回MI_OKAB4.4.27多层防碰撞CascAnticoll声明uchar mifs_Cascanticoll(uchar _Select_Code,uchar _Bcnt,uchar *_SNR);主机⇒ 读卡器命令符0x74长度 2Data[0]_Select_CodeData[1]_Bcnt读卡器⇒ 主机状态值MI_OK MI_QUIT MI_NOTAGERR MI_BITCOUNTERR COMM_ERR长度 4Data[0]snr(LL)Data[1]snr(LH)Data[2]snr(HL)Data[3]snr(HH)参数_Select_Code防碰撞层级编码一层0x93二层0x95三层0x97_Bcnt为预选卡所分配的位的个数通常Bcnt=0_SNR卡的序列号存贮在一个无符号的四字节数组中低字节放在地址处描述此函数开始防冲突操作必须在调用了Request命令后立即调用当知道了所要选择卡的序列号后就没有必要调用AntiColl此时调用了Request后直接调用Select函数即可4.4.28多层选择Select声明uchar mifs_CascSelect(uchar _Select_Code, uchar *_SNR,uchar *_Sak);主机⇒ 读卡器命令符0x75长度 5Data[0]_Select_CodeData[1]snr(LL)Data[2]snr(LH)Data[3]snr(HL)Data[4]snr(HH)读卡器⇒ 主机状态值MI_OK, MI_QUIT, MI_NOTAGERR, MI_CRCERR, MI_PARITYERR,MI_BITCOUNTERR,COMM_ERR长度 1Data[0]_Sak参数_Select_Code防碰撞层级编码一层0x93二层0x95三层0x97_SNR卡的序号存贮在一个无符号4字节字符数组中低字节放在代地址处_Sak当Select命令返回值为MI_OK时Sak将返回主机若_Sak.2为1则表示还有序列号的一部分未读出应进行下一层的选择否则选择结束描述这个函数选择某一个序列号的卡返回A TS字节给主机4.4..4.229写UltraLight ULWrite描述uchar mifs_ULWrite(uchar _Adr, uchar *_Data);主机⇒ 读卡器命令符0x76长度 5Data[0]页地址Data[1]所访问块的第一个字节Data[4]所访问块的最后一个字节读卡器⇒ 主机状态值 MI_OK MI_QUIT MI_NOTAGERR MI_NOTAUTHERR MI_WRITEERRMI_BITCOUNTERR COMM_ERR长度 0参数_Adr所写数据块地址015_Data4字节数据指针描述写入一个4字节的数据4.44.30带内部自动传送的值操作4.声明uchar mifs_ValueDebit(uchar _Mode, uchar _Adr, ulong *_Value);主机⇒读卡器命令符0x77长度 6Data[0]_ModeData[1]_AdrData[2]_Value(LL)Data[3]_Value(LH)Data[4]_Value(HL)Data[5]_Value(HH)读卡器⇒主机状态值MI_OK, MI_QUIT, MI_NOTAGERR, MI_CODE, MI_BITCOUNTERR, MI_TRANSERR, MI_CODEERR, COMM_RERR长度 0参数_Mode: 0xC0—减Mifare Light只支持减0xC1—加0xC2恢复_Adr卡内块地址对该块进行值操作取值范围063_Value当进行加或减操作时为加数或减数当进行恢复操作时该值为空值描述此函数对卡内的某一块进行加减或数据备份该块必须为值块格式并支持内部自动传送支持Mifare Light4.4.31写寄存器声明uchar mifs_write_reg(uchar _Reg,uchar _Value);主机⇒读卡器命令符0x3d长度 2Data[0]_RegData[1]_Value读卡器⇒主机状态值MI_OK , COMM_RERR长度 0参数_Reg寄存器地址_Value寄存器值描述此函数可对RC500内的寄存器直接进行控制在某些应用中是比较方便的例如1向地址0x11写入值0x59或0x5a可关闭一个发送管脚从而节省功耗2向地址0x12写入0x01至0x3f之间的一个值可以控制天线发送管脚的电导率值越大电导率越高功耗越大读卡距离越远反之功耗越低读卡距离越近4.4.32读寄存器声明uchar mifs_read_reg(uchar _Reg,uchar *_Value);主机⇒读卡器命令符0x3e长度 1Data[0]_Reg读卡器⇒主机状态值MI_OK , COMM_RERR长度 1Data[0]寄存器值参数_Reg寄存器地址*_Value寄存器值地址描述此函数可读RC500内的寄存器的值4.5 利用spi_init()初始化SPI接口声明spi_ini (void);void描述此函数将SPI接口初始化成空闲状态接SS线的外部中断1为下降沿触发且将定时器1配置成SPI接口的看门狗定时器4.6 全局变量在ZLG500.C中使用了二个全局变量一是通信数据缓冲区spi_buffer[26]所有的要通过SPI接口发送和接收的数据都放在这里包括序号命令/状态长度和BCC等为了方便地访问这些变量定义了如索引常量#defineSEQNR#define COMMAND 11STA TUS#define#define LENGTH 23MODE#defineBCNT3#defineADR 3#define3#defineSERNRSIZE 3#defineTIME 3#define#define TAGTYPE 3INFO 3#define#define4SECNR#define DA TABYTES 4V ALUE4#defineNKEY5#define#define AUTHMODE 7#define ADRCHKWR 8#define DA TACHKWR 9二是标志位newdata当外部中断1中断接收到新数据时该位置位4.7 SPI看门狗定时器定时器0或1作为SPI接口看门狗定时器该定时器被设置成50ms溢出发送时开定时器中断若中断之前通信未能完成ZLG500在SDA TA线上未返回响应信号而造成该定时器产生中断则取消本次传输发送子程序返回SPI_ERR接收时关中断用软件判断溢出次数若在500ms内未收到ZLG500返回的数据SS线上未产生下降沿则退出本次命令的执行命令返回SPI_ERR广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 4.8 应用程序举例例子读出RC500和MIFARE 卡的序列号然后选择一个卡将该卡的20块初始化成值块且备份到21块中最后使该卡进入HALT 状态且驱动2KHz 蜂鸣器响200毫秒 将ZLG500.c mface_3.asm 及主程序文件main.c 放于同一项目中然后在主程序中输入以下代码#include "zlg500.h" #include “string.h” sbit zlg500_RST=P1^2; //假若ZLG500的复位接到MCU 的P1.2口uchar idata card_snr[4]; uchar idata RC500_snr[4];uchar code Nkey_a[6] = {0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5}; uchar code Nkey_b[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; main() { uchar idata tt[2]; uchar idata size; uchar idata bankdata[16]; ulong idata value=1; uchar i,j;zlg500_RST =1; //使ZLG500复位 for(i =255;i>0;i--) for(j =255;j>0;j--); zlg500_RST =0; for(i =255;i>0;i--)for(j =255;j>0;j--); spi_init(); EA =1;i =mifs_config(); //ZLG500配置 i =mifs_get_info(bankdata); //读信息memcpy(RC500_snr,&bankdata[8],4); //存RC500序列号 mifs_load_key(KEYA,5,Nkey_b); //装载密钥 while(1) {while(mifs_request(IDLE,tt)!=0); //请求 if(mifs_anticoll(0,card_snr)!=0) continue; //防碰撞 if(mifs_select(card_snr,&size)!=0) continue; //选择 if(mifs_authentication(KEYA,5)!=0) continue; //证实 bankdata[0]=0x10; bankdata[4]=~0x10;广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 bankdata[8]=0x10;for(i=1;i<4;i++){bankdata[i]=0x00;bankdata[4+i]=0xff;bankdata[8+i]=0x00;}bankdata[12]=0x14;bankdata[13]=~0x14;bankdata[14]=0x14;bankdata[15]=~0x14;if(mifs_write(20,bankdata)!=0) continue;//写一个值块if(mifs_check_write(card_snr,KEYA,20,bankdata)!=0) continue;//检查写if(mifs_restore(20)!=0) continue;//恢复20块的数据if(mifs_transfer(21)!=0) continue;//传送到21块if(mifs_read(21,bankdata)!=0) continue;//读出mifs_halt(); //使卡进入HALT状态mifs_buzzer(198,20);//蜂鸣器口输出2KHz 方波持续200毫秒 }}。
Zigbee模块ZM32最典型的三个应用场景ZM32系列是ZLG立功科技基于Silicon Labs EFR32MG方案设计的高性能ZigBee模块,前面我们为大家详细介绍了这个模块的实测情况和性能优势,大家也可以回顾之前的测评文章:《25层?!你从未见过的ZigBee硬核穿楼》《ZM32深度解析-25层穿楼实测大揭密》《ZM32深度解析-你想要的功能我们都做了》在ZM32系列ZigBee模块的应用案例中,我们提炼出最典型的三种应用场景:●多级路由级联:例如在智能路灯行业使用ZigBee进行组网时,多采用路由级联的方式延展通信距离,使得整个无线网络能够覆盖几公里;●复杂的网络拓扑:在某些行业中网络拓扑结构复杂,例如商用照明行业,要求ZigBee节点能在最快的时间内完成组网,并且保证节点具有一定的稳定性及可靠性(网络自愈能力);●并发上报:在大规模的网络中,例如智慧工厂行业要求多点数据采集,所有节点并发的概率和数量会增加,对网络的处理能力提出更大的挑战;针对上面三种情况,结合模块特点进行详细分析。
一、多级路由级联——智能路灯物联网时代到来,城市交通自动化智能化要求全面升级,路灯节点间距20-200米不等,每个控制系统网络中,网关下属路灯数控制在1000盏以内,现场施工要求操作简单方便。
图1 路灯实景图项目方案:使用工控板作为路灯系统集中控制器,广域网络通过4G技术(网关设备)与远程服务器中心建立连接,局域网络使用ZigBee无线网络对现场灯光进行控制,同时接收路灯节点返回的路灯状态数据。
●路灯节点:每个路灯上有一个ZM32系列ZigBee模块,模块既做节点,也是路由,在一定区域内组建一个通信网络;●网关控制器:网关控制器可直接采用ZLG致远电子工控主机,用于边缘计算,对路灯节点进行控制和数据处理;数据传输终端:由于网关控制器分布在各个区域,和服务器主机之间通常距离较远,所有的路灯数据又需要统一管理,故采用4G DTU的方式,作为搭建局域网和广域网之间的桥梁。
RC522射频读卡器模块(MINI型)⼀、硬件:⼆、[主芯⽚介绍]MF RC522是应⽤于13.56MHz⾮接触式通信中⾼集成度的读写卡芯⽚,是NXP公司针对“三表”应⽤推出的⼀款低电压、低成本、体积⼩的⾮接触式读写卡芯⽚,是智能仪表和便携式⼿持设备研发的较好选择。
MF RC522利⽤了先进的调制和解调概念,完全集成了在13.56MHz下所有类型的被动⾮接触式通信⽅式和协议。
⽀持14443A兼容应答器信号。
数字部分处理ISO14443A帧和错误检测。
此外,还⽀持快速CRYPTO1加密算法,⽤语验证MIFARE系列产品。
MFRC522⽀持MIFARE系列更⾼速的⾮接触式通信,双向数据传输速率⾼达424kbit/s。
作为13.56MHz⾼集成度读写卡系列芯⽚家族的新成员,MF RC522与MF RC500和MF RC530有不少相似之处,同时也具备许多特点和差异。
它与主机间通信采⽤连线较少的串⾏通信,且可根据不同的⽤户需求,选取SPI、IIC或串⾏UART模式之⼀,有利于减少连线,缩⼩PCB板体积,降低成本。
三、[WMFRC522模块介绍]WMFRC522模块采⽤Philips MFRC522原装芯⽚设计读卡电路,使⽤⽅便,成本低廉,适⽤于设备开发、读卡器开发等⾼级应⽤的⽤户、需要进⾏射频卡终端设计/⽣产的⽤户。
本模块可直接装⼊各种读卡器模具。
模块采⽤电压为3.3V,通过SPI接⼝简单的⼏条线就可以直接与⽤户任何CPU主板相连接通信,可以保证模块稳定可靠的⼯作、读卡距离远;注:模块接⼝座可以按客户需求更改:⽬前提供UART TTL、RX232和RS485三种接⼝1、RC522接⼝芯⽚电路2、通信电路3、PCB效果4、焊接完后的效果图:4、固件:/********************************************************************************* @Brief : 测试522读写M1卡, 完成操作后PC6的LED闪烁⼀下,并打印到USART2上* @Param : None* @Retval : None*/u8 MFRC522Test(void){u8 i;static u8 WriteFlag;u8 CardType[2], CardSN[4];//0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15u8 DefaultData[16] = {0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0x01,0xFE,0x01,0xFE};u8 DefaultKey[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};u8 DataD[4] = {0,0,0,0x01};u8 BlockData[16];LED0_OFF();BEEP_OFF();if(MI_OK != PcdRequest(PICC_REQALL, CardType)) //扫描卡{printf("IC Card Type: %x\n", *((u16 *)CardType));return 1;}if(MI_OK != PcdAnticoll(CardSN)) //防冲撞{printf(" IC Card SN: %x\n", *((u32 *)CardSN));return 2;}if(MI_OK != PcdSelect(CardSN)) //选定卡⽚return 3;if(MI_OK != PcdAuthState(PICC_AUTHENT1A, 1, DefaultKey, CardSN))//验证卡⽚密码 return 4;if(MI_OK != PcdRead(1, BlockData)) //读块return 5;for(i = 0; i < 4; i++)printf("%x", BlockData[i]);if(!WriteFlag){if(MI_OK != PcdWrite(1, DefaultData)) //写块return 6;WriteFlag = 1;printf("First Write Value\n");}if(MI_OK != PcdValue(PICC_DECREMENT, 1, DataD)) //扣款return 7;if(MI_OK != PcdRead(1, BlockData)) //读块return 8;printf("IC Card Type: %x\n", *((u16 *)CardType));printf(" IC Card SN: %x\n", *((u32 *)CardSN));printf("Select Card!\n");printf("Check Pass Word Ok!\n");printf("Data Value decrease!\n");for(i = 0; i < 4; i++)printf("%x", BlockData[i]);printf("\n");LED0_ON();BEEP_ON();return 0;}。
RC522模块驱动程序本文主要讲述了基于SPI总线的RC522驱动程序的设计。
描述了主控如何与从设备通过SPI总线进行数据的读写。
一在SPI驱动中,有两个重要的结构:spi_device&spi_driver。
1 spi_device的构建与注册:Spi_device板信息用spi_board_info结构体来描述,它描述了SPI外设(RC522模块)使用的主机控制器序号,片选信号,数据比特率,传输方式等。
故要先填充struct spi_board_info这个结构体。
--4412平台在mach-smdk4x12.c里,三星给的BSP包里面已经配置好了这些,我们要做的只是打开CONFIG_S3C64XX_DEV_SPI这个宏。
spi_register_board_info(spi2_board_info,ARRAY_SIZE(spi2_board_info));具体实现见下面代码。
点击(此处)折叠或打开1.static struct spi_board_info spi2_board_info[] __initdata = {2.3.{4.5..modalias ="rfid_rc522",6.7..platform_data = NULL,8.9..max_speed_hz = 10*1000*1000,10.11..bus_num = 2,12.13..chip_select = 0,14.15..mode = SPI_MODE_0,16.17..controller_data = &spi2_csi[0],18.19.}20.21.};22.23.24.static struct s3c64xx_spi_csinfo spi2_csi[]= {25.26.[0]= {27.28..line = EXYNOS4_GPC1(2),29.30..set_level = gpio_set_value,31.32..fb_delay = 0x2,33.34.},35.36.}2 spi_driver的构建与注册:点击(此处)折叠或打开1.spi_register_driver(&rc522_driver);2.3.4.static struct spi_driver rc522_driver ={5.6..probe = rc522_probe,7.8..remove = rc522_remove,9.10..driver ={11. ="rfid_rc522",13.14.},15.16.};17.18.19.static int rc522_probe(struct spi_device *spi)20.21.{22.23.//默认读第一块(可选0 ~ 63)24.25.KuaiN = 1;26.27.printk("%s\n", __func__);28.29.rc522_spi = spi;30.31.return 0;32.33.};二注册好了SPI设备与驱动,就可以通过SPI总线实现数据读写了。
目录第1章概述 (1)1.1 概述 (1)第2章ZLG522S读写卡模块 (2)2.1 概述 (2)2.2 S50/S70卡 (2)2.2.1 特点 (2)2.2.2 数据结构 (2)2.2.3 操作流程 (5)2.3 PLUS CPU卡 (5)2.3.1 特点 (5)2.3.2 数据结构 (6)2.3.3 操作流程 (7)2.4 DESFire卡 (10)2.4.1 特点 (10)2.4.2 数据结构 (11)2.4.3 安全性 (11)2.4.4 访问权限编码 (12)2.4.5 命令集 (13)2.4.6 状态编码和错误代码 (13)2.4.7 操作流程 (14)2.5 ZLG522S读写卡模块 (18)2.5.1 特点 (18)2.5.2 选型表 (19)2.5.3 引脚接口 (19)2.5.4 典型应用 (20)2.5.5 命令设置 (22)2.5.6 通信协议 (23)2.5.7 模块功能 (33)2.6 ZLG522S系列读写卡模块使用例程 (38)2.6.1 S50/70读写操作 (38)2.6.2 S50/70卡值操作 (39)2.6.3 S50/70修改密钥 (40)2.6.4 DESFire卡洗卡 (41)2.6.5 DESFire卡读写标准文件操作 (43)2.6.6 DESFire卡读写记录文件操作 (43)2.6.7 DESFire卡值操作 (44)i第1章概述1.1 概述在当今社会生活中,越来越多的使用着形形色色的“卡“,如常见的公交卡,银行卡和电话卡等等。
这些卡,以其记录的信息方式不同可以分为条码卡、磁条卡和IC卡等。
在上述卡中,IC卡具有更高的数据安全性,因而应用最为广泛,如金融财务、软件加密、医疗卫生、交通票务、休闲娱乐管理等各种领域。
IC卡是集成电路卡(Integrated Circuit Card,ICC),在有些场合又称为智能卡、灵巧卡和智慧卡等。
将一张专用集成电路镶嵌于符合ISO/IEC7916标准的基片中,即制成一张IC卡,当然也可以封装成纽扣、钥匙牌和各种装饰物等特殊形状。
根据与外界数据交换的界面不同分为:接触式IC卡、非接触式IC卡和双界面卡。
根据使用芯片的功能不同分为:存储器卡、逻辑加密卡、CPU卡。
非接触式IC卡继承了接触式IC卡容量大、安全性高等优点,又克服了因触点外露导致的污染、磨损、静电以及插卡才能访问的缺点而得到广泛地应用。
Mifare系列非接触式IC卡是当前国内使用较广泛的卡,如公交卡、火车IC卡车票等。
如广州的羊城通使用的就是S50/70卡,广深和谐号票卡使用的就是MIFARE Ultralight卡。
表 1.1 Mifare系列卡如表 1.1所示。
MIFARE Ultralight、MIFARE Ultralight C、MIFARE Mini、MIFARE Standard 是逻辑加密卡;MIFARE PLUS、MIFARE ProX、MIFARE DESFire、MIFARE DESFire EV1是CPU卡。
其中MIFARE PLUS(PLUS CPU,后文均称为PLUS CPU)卡是基于MIFARE Standard 的安全等级升级版。
1第2章ZLG522S读写卡模块2.1 概述ZLG522S系列读写卡模块是基于13.56MHz频率的系列读写卡模块。
它支持ISO14443标准协议,可支持MIFARE Standard、MIFARE Ultralight、MIFARE ProX、MIFARE DESFire、MIFARE PLUS。
它采用NXP公司的MF RC522,该芯片是NXP针对“三表”应用推出的一款低电压、低功耗、体积小的非接触式读写芯片。
本系列模块具有具有易用、可靠、多样和体积小等特点。
在介绍ZLG522S读写卡前先介绍一下S50/70卡和PLUS CPU卡。
图 2.1 ZLG522S系列模块2.2 S50/S70卡2.2.1 特点♦容量为1K/4K字节E2PROM;♦S50卡分为16个扇区,每个扇区为4块,每块16个字节,以块为存取单位;♦S70卡分为40个扇区,前32个扇区每扇区4块,后8个扇区每个扇区为16块,♦每个扇区有独立的一组密码及访问控制;♦支持ISO14443-3A唯一序列号(4字节);♦具有防冲突机制,支持多卡操作;♦无电源,自带天线,内含加密控制逻辑和通信逻辑电路;♦数据保存期为10年,可改写10万次,读无限次;♦工作频率:13.56MHz;♦通信速率:106 KBit/s;♦读写距离:100mm以内(与读写器有关)2.2.2 数据结构S50卡的数据结构如表2.1所示。
S70卡的前32个扇区的数据结构和S50卡的完全相同,后8个扇区的数据结构如表 2.2所示。
表 2.1 S50卡的数据结构2表 2.2 S70卡的32~39扇区的数据结构S50/70卡的数据块都可以作为值块,值块中的数据有格式要求,若数据格式不对,则之操作时会失败,值块数据格式如表2.3所示。
表 2.3 值块的数据格式每个扇区的最后一块为区尾块,该块是当前扇区的密钥和访问权限控制位存放块。
该块的前6字节为Key A;后6个字节为KeyB;中间4个字节为控制位。
当密钥有效时,读出的密钥数据始终为0x00,即密钥不可读。
S50/S70的每个扇区都可设置一组密钥,每个数据块和区尾块可以单独设置访问权限(扇区32~39每5个数据块可设置一个访问权限)控制位的数据结构如表2.4所示。
其中下标表示所控制的数据块(扇区32~39中下标0表示控制的数据块为块0~4;下标1表示控制的数据块为块5~9;下标2表示控制的数据块为块10~14;下标3表示控制的数据块为块15)。
‘/’表示数据位取反。
3表 2.4 控制位数据结构表 2.5 区尾块访问权限设置注:灰色行为key B可读并可用于存储数据的访问控制条件。
区尾块和key A被预定义为传输配置状态。
因为在传输配置状态下key B可读,新卡必须用key A认证。
因为访问控制位本身也可以禁止访问,所以个人化时应当特别小心。
对数据块(块0~2或块0~14)的读写访问取决于其访问控制位,分为“禁止”、“Key A”、“KeyB”和“Key A|B”(Key A或Key B)。
相关访问控制位的设置确定了其用途以及相应的可用命令。
♦读写块:允许读、写操作。
♦数值块:运行另外的数值操作——加值、减值、传输和恢复。
在用于非充值卡的一种情况(…001‟)下,只能够读和减值。
在另一种情况(…110…)下,可以用key B充值。
♦厂商块:只读,不受访位控制位设置的影响!♦密钥管理:在传输配置状态下,必须用key A 认证。
表 2.6 数据块访问权限设置4注:如果相应扇区区尾块Key B可读,则不得用作认证(前表中所有灰色行,但有些兼容卡则在Key B可读的情况下,仍可以用Key B做认证)。
如果读写器试图用灰色行的访问控制条件以Key B认证任何扇区的任何块,卡将在认证后拒绝所有后续存储器访问。
2.2.3 操作流程S50/70卡的所有数据块在满足读条件的情况下都可以用读命令进行访问,在满足写条件下除了厂商块外都可以用写命令进行写入。
S50/70卡没有专用的修改密钥和控制位的命令,若需要修改密钥或控制位,则需要采用‘读-改-写’的方式,即读出区尾块(密钥数据读出始终为0x00),修改需要改写的数据(若不修改密钥,则需要将密钥恢复成原来的值),然后将数据写入区尾块。
S50/70卡的值是一个long型的数,用特定的格式存放在数据块中,如表2.3所示。
S50/70卡没有专用的格式化值块的命令,若需要值块操作时,需要将数据块的内容格式化为值块格式,并用写命令写入(若数据块内的数据格式是值块的格式,则不需要该步骤),然后再用值块操作命令。
图 2.2 S50/70卡操作流程2.3 PLUS CPU卡PLUS CPU卡在MIFARE Standard卡的基础上将安全等级做了大幅度提升。
2.3.1 特点2或4K字节E2PROM;5♦简单的固定存储器结构,与MIFARE Mini,MIFARE Standard卡兼容;♦存储器结构与MIFARE S70相同(扇区,块);♦可随意配置访问条件;♦支持ISO14443-3A唯一序列号(4或7字节),支持任意随机ID;♦多扇区认证,多块读和写;♦AES用于认证、加密和认证数据完整性;♦防撕裂保护;♦密钥可存储为MIFARE CRYPTO1密钥(2×48位/扇区)或AES密钥(2×128位/扇区);♦完全虚拟卡概念;♦中继攻击检查;♦通信速率可达848 Kbit/s;♦单独写操作次数:通常为200,000;♦通过CC EAL4+安全认证。
PLUS CPU卡有4个安全等级:♦安全等级0。
该等级为出厂模式,该模式下可以任意修改卡内的数据(无需认证密钥)。
♦安全等级1。
该等级和S50/70卡完全兼容,所有操作都和S50/70卡相同。
♦安全等级2。
该等级和S50/70卡相比,是在CRYPTO1认证前加入了AES认证(激活后只必须至少执行一次AES认证),但该等级下没有值块操作。
♦安全等级3。
该等级下的认证操作均为AES认证,读写器与卡之间的通信可选择数据加密或线路保护(MAC)。
2.3.2 数据结构PLUS CPU卡的数据结构是在S50/70卡的基础上增加了AES密钥和配置块,如表2.7所示。
表 2.7 PLUS CPU卡数据结构62.3.3 操作流程PLUS CPU卡的操作分为以下几种:♦数据/值块操作♦卡片升级♦卡片配置(安全等级3)1.安全等级0下的操作在安全等级0下,所有的数据块和配置块都可以任意写入(使用个人化命令,数据写入后不能读出,若有格式的配置块则需要按格式写入,若格式错误会出现卡片提升到相应等级后却不可用的情况)且不需要认证任何密钥。
当所有需要个人化的数据块(0x9000、0x9001、0x9002(若存在)和0x9003,这几个地址必须修改)被修改后,则可以用提交个人化命令将卡片提升到安全等级1。
在没有提交个人化前,所有数据块和配置块都可以任意修改。
2.安全等级1下的操作该等级下的操作和S50/70卡完全一样,详细操作流程见2.2.3。
若卡号为7个字节,则在选择后需要在再次防碰撞(参数改为0x95)和选择,并将第1次防碰撞得出4字节卡号的第1字节0x88(级联字节)去掉,在与第2次防碰撞得出的4字节卡号合并在一起组成7字节的卡号。
防碰撞得出的什么卡号(不管是否有级联字节),选择卡时就输入什么卡号,认证时输入的卡号为最后一次选择卡时使用的卡号(若是使用激活函数,则认证时输入的卡号是激活函数输出卡号最后4字节)。