收藏 分销(赏)

RFID-开发技术及实践-(西电版)第5章--高频RFID阅读器设计课件.ppt

上传人:丰**** 文档编号:12828430 上传时间:2025-12-12 格式:PPT 页数:142 大小:3.03MB 下载积分:22 金币
下载 相关 举报
RFID-开发技术及实践-(西电版)第5章--高频RFID阅读器设计课件.ppt_第1页
第1页 / 共142页
RFID-开发技术及实践-(西电版)第5章--高频RFID阅读器设计课件.ppt_第2页
第2页 / 共142页


点击查看更多>>
资源描述
单击此处编辑母版标题样式,第5章 高频RFID阅读器设计,*,第5章 高频RFID阅读器设计,5.1 Mifare卡,5.2 MF RC522,5.3 RC522基本操作,5.4 高频RFID阅读器程序设计,5.1 Mifare卡,Mifare是NXP Semiconductors(恩智浦半导体)拥有的商标之一。Mifare卡是目前世界上使用量大、技术成熟、性能稳定、内存容量大的一种感应式智能IC卡。,5.1.1 Mifare卡的特点,Mifare技术是NXP(前身为飞利浦半导体)所拥有的13.56 MHz非接触性辨识技术。NXP并不制造卡片或卡片阅读机,而是在开放的市场上贩售相关技术与芯片,卡片和卡片阅读器的制造商再利用它们的技术来研发产品出售给一般使用者。,Mifare卡经常被认为是一种智能卡的技术,这是因为它可以在卡片上兼具读写的功能。事实上,Mifare卡仅具备记忆功能,必须搭配阅读器才能达到读写功能。Mifare卡的非接触式读写功能是为处理大众运输系统中的付费交易部分来设计的,其与众不同的地方是具备执行升幂和降序的排序功能,简化资料读取的过程。尽管接触性智能卡也能够执行同样的动作,但非接触性智能卡的速度更快且操作更简单,而且卡片阅读机几乎不需要任何维修,卡片也较为耐用。,Mifare卡除了保留接触式IC卡的原有优点外,还具有以下特点:,操作简单、快捷。由于采用射频无线通信,使用时无需插拔卡及不受方向和正反面的限制,完成一次读写操作仅需0.1 s,大大提高了每次使用的速度,既适用于一般场合,又适用于快速、高流量的场所。,抗干扰能力强。Mifare卡中有快速防冲突机制,在多卡同时进入读写范围内时,能有效防止卡片之间出现数据干扰,读写设备可一一对卡进行处理,提高了应用的并行性及系统工作的速度。,5.1.2 Mifare1 S50卡,Mifare卡的主要芯片有NXP Mifare1 S50(1 KB)、S70(4 KB)等。Mifare1(下面简称MF1)是符合ISO/IEC 14443A的非接触智能卡,其通信层(MifareRF接口)符合ISO/IEC 14443A标准的第2和第3部分,其安全层支持域检验的CRYPTO1数据流加密。目前国内出现了Mifare卡的克隆产品,但性能稍逊一筹。虽然Mifare技术已经被破解,卡片可以被复制,但是由于价格低廉,还在广泛使用。Mifare卡的技术特点如下:,卡片由一个卷绕天线和特定用途的集成电路模块组成。,Mifare卡有一个高速(106 KB波特率)的RF接口。,内部有一个控制单元和一个8 K个bit位的EEPROM。,阅读器向MF1卡发出一组固定频率(13.56MHz)的电磁波,卡片内有一个LC串联谐振电路,其频率与阅读器发射的频率相同,在电磁波的激励下,LC谐振电路产生共振,从而使谐振电容有了电荷。,在这个电容的另一端,接有一个单向导通的电子泵,将电容内的电荷送到模块存储电容内储存,当所积累的电荷达到2V以上时,此电容可作为电源向模块电路提供工作电压,将卡内数据发射出去或接收阅读器的数据。MF1读写示意图如图5-1所示。,图5-1 MF1读写示意图,1 KB EEPROM,分为16个区,每区4个块,每块16字节。用户可定义内存块的读写条件。数据耐久性为10年。写入耐久性可达100 000次。相互三轮认证(ISO/IEC DIS9798-2)。带重现攻击保护的射频通道数据加密。每区(每个应用)两个密钥,支持密钥分级的多应用场合。每卡一个唯一序列号。在运输过程中以传输密钥保护对EEPROM的访问权。,MF1 S50集成电路芯片内含1 KB EEPROM、RF接口和数字控制单元。能量和数据通过天线传输,卡中天线为几匝线圈,直接连接到芯片上,不再需要额外的组件。Mifare卡的结构如图5-2所示。图5-2中,各组件的功能简述如下:RF接口:调制解调器检波器时钟发生器的上电复位稳压器。防冲突:读写范围内的几张卡可以逐一选定和操作。认证:在所有存储器操作之前进行认证过程,以保证必须通过各块指定的密钥才能访问该块。,控制逻辑单元:数值以特定的冗余格式存储,可以增减。EEPROM接口:是与内部EEPROM的通信接口。加密单元:域验证的CRYPTO1数据流加密,保证数据交换的安全。EEPROM:总容量为1 KB,每区的最后一块称做“尾块”,含有两个密钥和本区各块的读写条件。,图5-3 EEPROM结构,图5-4 制造商占用块的结构,数值:有符号4字节数值。数值的最低字节存储在最低地址字节。负值以标准的2的补码形式存储。出于数据完整性和安全原因,数值存储三次,两次不取反,一次取反。,地址(Adr):1字节地址,当进行备份管理时,可用于保存块的地址。地址保存四次,两次取反,两次不取反。在increment、decrement、restore和transfer 操作中,地址保持不变。它只能通过write命令更改。数值块的结构如图5-5所示。,图5-5 数值块的结构,3.尾块(块3),各扇区均有一个尾块,存有:密钥A和B(可选),读时返回逻辑“0”。该区四个块的读写条件,存储在字节69。读写控制位也指定了数据块的类型(读写块或数值块)。如果不需要密钥B,块3的最后6字节可以用作数据字节。尾块的字节9可用于用户数据。因为此字节享有与字节6、7、8相同的读写权限。尾块的结构如图5-6所示。,图5-6 尾块的结构,1)读写条件每个数据块和尾块的读写条件均由3个bit定义,并以非取反和取反形式保存在各个区的尾块中。读写控制位管理着使用密钥A和B读写存储器的权限。如果知道相关的密钥,并且当前读写条件允许,读写条件是可以更改的,读写条件说明如图5-7所示。,2)尾块的读写条件对密钥和控制位的读写取决于尾块(块3)的访问控制位,这些控制位存放在字节68中,以正值和反值的形式存放,分为“禁止”、“KEYA”、“KEYB”和“KEYA|B(KEYA或KEYB)”。读写条件在尾块中的存储位置如表5-1所示。读写条件定义如表5-2所示。由上表可知,尾块和KEY A被预定义为传输配置状态。因为在传输配置状态下KEY B可读,新卡必须用KEY A认证。由于访问控制位本身也可以禁止访问,所以操作时应当特别小心。,表5-1 读写条件在尾块中的存储位置,表5-2 读写条件定义,表5-3 数据块的访问控制条件,如果相应扇区尾块KEY B可读,则不得用作认证(上表中所有灰色行)。如果阅读器试图用灰色行的访问控制条件以KEY B认证任何扇区的任何块,卡将在认证后拒绝所有后续存储器访问。,图5-8 Mifare卡读写,2.防碰撞循环(anticollision loop),在防碰撞循环中,可以读回一张卡的序列号。如果在阅读器的工作范围内有几张卡,则它们可以通过唯一序列号区分开来,并可选定以进行下一步交易。未被选定的卡转入待命状态,等候新的,request,命令。,3.,选卡,(select card),阅读器通过,select card,命令选定一张卡进行认证存储器的相关操作。该卡返回选定应答码(ATS=08h),明确所选卡的卡型。,4.三轮认证(3 pass authentication),选卡后,阅读器指定后续读写的存储器位置,并用相应密钥进行三轮认证。认证成功后,所有的存储器操作都是加密的。,5.存储器操作,经过三轮认证后,阅读器可对卡片执行下列操作:读数据块。写数据块。减值:减少数据块内的数值,并将结果保存在临时内部数据寄存器中。加值:增加数据块内的数值,并将结果保存在数据寄存器中。恢复:将数据块内容移入数据寄存器。转存:将临时内部数据寄存器的内容写入数值块。,6.数据完整性,在阅读器和卡之间的非接触通信链接中实施下列机制,以保证数据传输的可靠性:每块16 bit CRC。每字节的奇偶位。位计数检查。位编码,以区分“1”、“0”和无信息。通道监控(协议序列和位流分析)。,7.安全,安全认证中的三轮认证采用符合ISO 9798-2的协议,以保证高度的安全性。三轮认证过程如下:阅读器指定要访问的区,并选择密钥A或B。第一轮为卡从位块读区密钥和访问条件。然后,卡向阅读器发送随机数。第二轮为阅读器利用密钥和随机数计算回应值。回应值连同阅读器的随机数发送给卡。第三轮为卡通过与自己的随机数比较验证阅读器的回应值,再计算回应值并发送。阅读器通过比较验证卡的回应值。在第一个随机数传送之后,卡与阅读器之间的通信都是加密的。,5.2 MF RC522,MF RC522(简称RC522)是应用于13.56 MHz非接触式通信中高集成度读写卡系列芯片中的一员。它是NXP公司针对“三表”应用推出的一款低电压、低成本、体积小的非接触式读写卡芯片,是智能仪表和便携式手持设备研发的较好选择。,5.2.1 概述,MF RC522运用了先进的调制和解调概念,完全集成了13.56 MHz下所有类型的被动非接触式通信方式和协议,并支持ISO 14443A的多层应用。其内部发送器部分可驱动阅读器天线与ISO 14443A/Mifare卡和应答机的通信,无需其他电路。接收器部分提供一个坚固而有效的解调和解码电路,用于处理ISO 14443A兼容的应答器信号。数字部分处理ISO 14443A帧和错误检测。,此外,RC522还支持快速CRYPTO1加密算法,用于验证Mifare系列产品。MF RC522支持Mifare更高速的非接触式通信,双向数据传输速率高达424kb/s。可根据不同的用户需求,选取SPI、I2C或串行UART(类似RS232)模式之一,有利于减少连线,缩小PCB板体积,降低成本。MF RC522的其他特性如下:高集成度的调制解调电路。采用少量外部器件,即可将输出驱动级接至天线。支持ISO/IEC 14443 TYPE A和Mifare通信协议。支持ISO 14443 212 kb/s和424 kb/s更高传输速率的通信。,支持,Mifare Classic,加密。,10 Mb/s,的,SPI,接口。I,2,C接口,快速模式的速率为400 kb/s,高速模式的速率为3400 kb/s。串行UART,传输速率高达1228.8 kb/s,帧取决于RS232接口,电压电平取决于提供的管脚电压。64字节的发送和接收FIFO缓冲区。灵活的中断模式。可编程定时器。具备硬件掉电、软件掉电和发送器掉电三种节电模式。,内置温度传感器,以便在芯片温度过高时自动停止RF发射。采用相互独立的多组电源供电,以避免模块间的相互干扰,提高工作的稳定性。具备CRC和奇偶校验功能。内部振荡器,连接27.12 MHz的晶体。2.53.6 V的低电压低功耗设计。5 mm5 mm0.85 mm的超小体积。,5.2.2 原理图,MF RC522组成并不复杂,其原理图如图5-9所示。MF RC522集成度很高,其相关功能特性如下:MF RC522支持可直接相连的各种MCU接口类型,如SPI、I2C和串行UART。数据处理部分执行数据的并/串转换。它支持的帧包括CRC和奇偶校验。它以完全透明的模式进行操作,因而支持ISO 14443A的所有层。,图5-9 MF RC522的原理图,状态和控制部分允许对器件进行配置以适应环境的影响并将性能调节到最佳状态。当与Mifare Standard和Mifare产品通信时,使用高速CRYPTO1流密码单元和一个可靠的非易失性密匙存储器。模拟电路包含了一个具有非常低阻抗桥驱动器输出的发送部分,这使得最大操作距离可达100mm。接收器可以检测到并解码非常弱的应答信号。,5.2.3 与MCU接口,MF RC522共有32个管脚,其管脚图如图5-10所示。MF RC522的32个管脚有其各自不同的功能和定义,如表5-4所示。,图5-10 MFRC522管脚图,表5-4 管 脚 定 义,1.MCU接口,在每次上电或硬件复位后,RC522也复位其接口模式并检测当前微处理器的接口类型。MF RC522在复位阶段后根据控制脚的逻辑电平识别微处理器接口。这是由固定管脚连接的组合和一个专门的初始化程序来实现的,其所有通信接口如表5-5所示。本例中,RC522与MCU连接的端口为SPI口,其他接口可参考相关资料。兼容SPI接口可使能RC522和一个MCU之间的高速串行通信。兼容SPI接口的处理与标准SPI接口相同。在本书配套的开发板上,RC522还需要经过一个跳线才能与MCU相连,其跳线定义如图5-11所示。,表5-5 通 信 接 口,图5-11 跳线定义,在SPI通信中,RC522作从机,SPI时钟SCK由主机产生。,数据通过MOSI线从主机传输到从机。,数据通过MISO线从RC522发回主机。,MOSI和MISO传输每个字节时都是高位在前。MOSI上的数据在时钟的上升沿保持不变,在时钟的下降沿改变。MISO与之类似,在时钟的下降沿,MISO上的数据由RC522来提供,在时钟的上升沿数据保持不变。,2.读数据,通过SPI接口读出数据需要有特定的数据结构。发送的第一个字节定义了模式本身和地址,也可连续读出多个地址的数据,其顺序如表5-6所示。,表5-6 读数据顺序,3.写数据,通过SPI接口写入数据需要有特定的数据结构。发送的第一个字节定义了模式本身和地址,也可连续读出多个地址的数据,其顺序如表5-7所示。,4.地址字节,地址字节按特殊格式传输,第一个字节的MSB位设置使用的模式如下:,MSB位为1时从RC522读出数据。,MSB为0时将数据写入RC522。第一个字节的位6:1定义地址,最后一位应当设置为0。其位含义如表5-8所示。,表5-7 写数据顺序,表5-8 地址字节位含义,5.3 RC522基本操作,RC522是一款高度集成的RFID读写芯片,还需要配合MCU和其他外围电路才能真正地实现阅读器的功能。,5.3.1 RC522寄存器,RC522的存储器中共有4页(PAGE)存放寄存器,用于配置和相关状态指示,详细定义如表5-9所示。,表5-9 RC522寄存器,5.3.2 FIFO缓冲区操作,MF RC522包含一个648位的FIFO缓冲区,用来缓存主机MCU和MF RC522的内部状态机之间的输入和输出数据流。因此,FIFO缓冲区可以处理长度大于64字节的数据流,但又不考虑时序的限制。,1.访问FIFO缓冲区,FIFO缓冲区的输入和输出数据总线连接到FIFODataReg寄存器。,通过写FIFODataReg寄存器将一个字节的数据存入FIFO缓冲区,之后内部FIFO缓冲区写指针加1。,读出的FIFODataReg寄存器的内容是存放在FIFO缓冲区读指针处的数据,之后FIFO缓冲区读指针减1。FIFO缓冲区的读和写指针之间的间隔通过读取FIFOLevelReg得到。当MCU发布一个命令后,MFRC522可以在命令执行过程中根据命令要求来访问FIFO缓冲区。通常,只能实现一个FIFO缓冲区的操作,该缓冲区可用在输入和输出方向中。因此,MCU必须小心不能以其他方式来访问FIFO缓冲区。,2.控制FIFO缓冲区,除了读写FIFO缓冲区外,FIFO缓冲区指针还可通过置位寄存器FIFOLevelReg的FlushBuffer位来复位。从而使FIFOLevel位被清零,寄存器ErrorReg的BufferOvfl位也被清零,实际存储的字节不能再访问,FIFO缓冲区可以用来存放下一批64字节的数据。,3.FIFO缓冲区的状态信息,MCU可得到以下FIFO缓冲区状态的数据:,已经存放在FIFO缓冲区中的字节数:寄存器FIFOLevelReg的FIFOLevel字段。,FIFO缓冲区已满的警告:寄存器Status1Reg的HiAlert位。,FIFO缓冲区已空的警告:寄存器Status1Reg的LoAlert位。,指示FIFO缓冲区已满时仍有字节写入:寄存器ErrorReg的BufferOvfl位。,BufferOvfl位可通过置位FIFOLevelReg寄存器的FlushBuffer位来清零。当出现以下情况时,MFRC522可以产生中断信号:,如果寄存器CommIEnReg的LoAlertIEn被置位,且当寄存器Status1Reg的LoAlert位变成1时,管脚IRQ激活。,如果寄存器CommIEnReg的HiAlertIEn被置位,且当寄存器Status1Reg的HiAlert位变成1时,管脚IRQ激活。,如果FIFO缓冲区中只允许存放WaterLevel个(在寄存器WaterLevelReg中设置)或更少的字节,则HiAlert标志置位。上述数据满足下面的等式:HiAlert=(64-FIFOLength)WaterLevel,如果实际只有WaterLevel个或更少的字节存放在FIFO缓冲区中,则LoAlert标志置位。同时,它们满足下面的等式:LoAlert=(64-FIFOLength)WaterLevel,5.3.3 RC522命令,RC522的操作可由执行一系列命令的内部状态机来决定。即通过向命令寄存器写入相应的命令代码来启动命令,并且执行一个命令所需的参数和数据可通过FIFO缓冲区来交换。,1.通用特性,RC522的命令可以动用FIFO缓冲区设置参数和数据,其操作有一些通用的特性如下:,每个需要数据流(或数据字节流)作为输入的命令在发现FIFO缓冲区有数据时会立刻处理,收发命令除外,收发命令的发送由寄存器BitFramingReg的StartSend位来启动。,每个需要某一数量参数的命令只有在它通过FIFO缓冲区接收到正确数量的参数时才能开始处理。,FIFO缓冲区不能在命令启动时自动清除。,也有可能要先将命令参数或数据字节写入FIFO缓冲区,再启动命令。,每个命令的执行都可能由MCU向命令寄存器写入一个新的命令代码(如idle命令)来中断。RC522命令有8个,其命令代码和描述如表5-10所示。,表5-10 RC522命令,2.Idle命令,RC522处于空闲模式。该命令也可用来终止实际正在执行的命令。,3.CalcCRC命令,FIFO的内容被传输到CRC协处理器并执行CRC计算,该命令有如下特点:,计算结果存放在CRCResultReg寄存器中。,CRC计算无需限制字节的数目。,当在数据流过程中FIFO变成空时计算也不会停止。,写入FIFO的下个字节增加到计算中。,CRC的预置值由寄存器ModeReg的CRCPreset位控制,该值在命令启动时装入CRC协处理器。,这个命令必须通过向命令寄存器写入任何一个命令(如空闲命令)来清除。如果寄存器AutoTestReg的SelfTest位设置正确,则MFRC522处于自测试模式,启动CalCRC命令执行一次数字自测试。自测试的结果写入FIFO。,4.Transmit命令,发送FIFO的内容。在发送FIFO的内容之前必须对所有相关的寄存器进行设置。该命令在FIFO变空后自动终止。,5.NOCmdChange命令,该命令不会影响CommandReg寄存器中正在执行的任何命令。它可用来修改CommandReg寄存器中除命令位之外的任何位,如RcvOff位或PowerDown位。,6.Receive命令,MF RC522激活接收器通路,等待接收任何数据流。该命令在接收到的数据流结束时自动终止。根据所选的成帧和速度,通过帧模式结束或长度字节来指示。,7.Transceive命令,该循环命令重复发送FIFO数据,并不断接收RF场的数据。第一个动作是发送,发送结束后命令变为接收数据流。其顺序为:发送接收发送接收。每个发送过程都在BitFramingReg寄存器的StartSend位置位时启动。TRANSCEIVE命令通过向命令寄存器写入任何一个命令(如idle命令)来清除。,8.MFAuthent命令,该命令用来处理Mifare认证以使能任何Mifare普通卡的安全通信。在命令激活前以下数据必须被写入FIFO:认证命令代码(0 x60,0 x61)。,块地址。扇区密钥字节0。扇区密钥字节1。扇区密钥字节2。扇区密钥字节3。扇区密钥字节4。扇区密钥字节5。卡序列号字节0。卡序列号字节1。卡序列号字节2。卡序列号字节3。,上述命令参数总共12字节,应当写入FIFO中。当MFAuthent命令有效时,任何FIFO访问都被禁止。只要访问FIFO的操作发生,ErrorReg寄存器的WrErr位就置位。该命令在Mifare卡被认证且Status2Reg寄存器的MFCrypto1On位置位时自动终止。当卡未响应时,该命令不会自动终止。因此,定时器必须初始化成自动模式。这时,除IdleIRQ外,TimerIRQ也可用作终止的标准。在认证过程中,RxIRQ和TxIRQ被禁止。,认证命令结束后(处理完协议或将IDLE写入命令寄存器后),只有Crypto1On位有效。如果认证过程中有错误出现,则ErrorReg寄存器的ProtocolErr位置位。Status2Reg寄存器的Crypto1On位清零。,9.SoftReset命令,该命令用来执行一次器件复位,内部缓冲区的配置数据保持不变。所有寄存器都设置成复位值,命令完成后自动终止。由于SerialSpeedReg寄存器被复位,则串行数据速率被设置成9600 kb/s。,5.3.4 RC522基本指令,RC522有14种基本指令集,实现不同方式的数据传输,其指令代码及含义如表5-11所示。,表5-11 指令代码及含义,5.4 高频RFID阅读器程序设计,高频RFID阅读器程序的主要工作是能够操作RC522,并按照Mifare卡的规则和流程对MF1卡进行读写和验证。一般分为三部分:初始化程序、驱动程序和主程序。,5.4.1 初始化程序,初始化程序用于各种管脚和器件的初始化,以便能够正常进行解码。下述内容用于实现描述5.D.1,即编写RC522的初始化程序。基于模块化和移植的考虑,可将本例中初始化子程序单独封装成子函数InitAll(),具体源码如下:,【描述5.D.1】InitAll()/初始化子函数void InitAll(void),InitPort();InitRc522();INT_Init();TIMER_init();,/液晶屏显示初始化LCD_init();loc(1,0);LCD_display(高频HF读卡器:);loc(4,0);LCD_display(-请刷卡-);,/参数,标志位初始化bWarn=0;bPass=0;SysTime=0;KeyNum=0;KuaiN=0;oprationcard=0;bSendID=0;Pass();,InitPort()函数负责初始化相关的I/O端口,具体源码如下:【描述5.D.1】InitPort(),/初始化相关的I/O端口void InitPort(void)/蜂鸣器管脚DDRD|=(1PD7);PORTD|=(1PD7);/LED管脚DDRC|=(1PC7);PORTC|=(1PC7);,/初始化H-RST,CSS,MOSI,SCK.DDRB|=(1PB3)|(1PB4)|(1PB5)|(1PB7);/MISODDRB ,INT_Init()函数负责初始化外部中断的相关工作方式和参数,具体源码如下:【描述5.D.1】INT_Init()/初始化外部中断void INT_Init(void)/开启INT0中断,并初始化MCUCR|=(1 ISC01);GICR|=(1 INT0);SREG|=(1 7);DDRD|=(1 PD2);PORTD|=(1 PD2);DDRD ,InitRc522()函数负责初始化RC522的相关配置和参数,具体源码如下:【描述5.D.1】InitRc522(),/初始化RC522void InitRc522(void)/重启天线,PcdReset();PcdAntennaOff();PcdAntennaOn();,/初始化工作类型为ISO14443 TYPE A,M500PcdConfigISOType(A);,TIMER_init()函数负责初始化定时器的相关配置,具体源码如下:【描述5.D.1】TIMER_init(),/初始化定时器void TIMER_init(void)/初始化定时器0TCCR0|=(1 CS02)+(1 CS00);TIMSK|=(1 TOIE0);TCNT0 =256-61;SREG|=(1 7);,5.4.2 驱动程序,驱动程序是RC522能够正确解码的相关读写、命令设置等函数。下述内容用于实现描述5.D.2,即编写RC522的相关驱动程序。SPIReadByte()函数负责使用SPI端口读入一个Byte,具体源码如下:【描述5.D.2】SPIReadByte(),/使用SPI端口读入一个byteunsigned char SPIReadByte(void)unsigned long i=60000;,/启动数据传输 SPDR=0XFF;/等待传输结束while(i-)if(SPSR,SPIWriteByte()函数负责使用SPI端口写入一个Byte,具体源码如下:【描述5.D.2】SPIWriteByte()/使用SPI端口写入一个Bytevoid SPIWriteByte(unsigned char SPIData)unsigned long i=60000;/启动数据传输 SPDR=SPIData;/等待传输结束 while(i-)if(SPSR,PcdRequest()函数负责寻卡的相关操作和功能,具体源码如下:【描述5.D.2】PcdRequest(),/功 能:寻卡/参数说明:req_codeIN:寻卡方式/0 x52=寻感应区内所有符合14443A标准的卡/0 x26=寻未进入休眠状态的卡/pTagTypeOUT:卡片类型代码/0 x4400=Mifare_UltraLight/0 x0400=Mifare_One(S50)/0 x0200=Mifare_One(S70),/0 x0800=Mifare_Pro(X)/0 x4403=Mifare_DESFire/返 回:成功返回MI_OK/unsigned char PcdRequest(unsigned char req_code,unsigned char*pTagType)unsigned char status;unsigned int unLen;unsigned char ucComMF522BufMAXRLEN;/18/清除标志位ClearBitMask(Status2Reg,0 x08);WriteRawRC(BitFramingReg,0 x07);SetBitMask(TxControlReg,0 x03);,ucComMF522Buf0=req_code;/读取状态字status=PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,1,ucComMF522Buf,if(status=MI_OK),PcdAnticoll(),函数负责防冲撞算法,具体源码如下:,【,描述5.D.2】PcdAnticoll(),/,功 能:防冲撞/参数说明:pSnrOUT:卡片序列号,4字节,/,返 回,:,成功返回,MI_OK/unsigned char PcdAnticoll(unsigned char*pSnr)unsigned char status;unsigned char i,snr_check=0;unsigned int unLen;unsigned char ucComMF522BufMAXRLEN;,/清除标志位ClearBitMask(Status2Reg,0 x08);WriteRawRC(BitFramingReg,0 x00);ClearBitMask(CollReg,0 x80);ucComMF522Buf0=PICC_ANTICOLL1;ucComMF522Buf1=0 x20;/读取状态字status=PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,2,ucComMF522Buf,if(status=MI_OK)for(i=0;i4;i+)*(pSnr+i)=ucComMF522Bufi;snr_check=ucComMF522Bufi;if(snr_check!=ucComMF522Bufi)status=MI_ERR;SetBitMask(CollReg,0 x80);return status;,PcdSelect(),函数负责选定卡片,具体源码如下:,【,描述5.D.2】PcdSelect(),/,功 能:选定卡片/参数说明:pSnrIN:卡片序列号,4字节,/,返 回,:,成功返回,MI_OK/unsigned char PcdSelect(unsigned char*pSnr)unsigned char status;unsigned char i;unsigned int unLen;unsigned char ucComMF522BufMAXRLEN;,ucComMF522Buf0=PICC_ANTICOLL1;ucComMF522Buf1=0 x70;ucComMF522Buf6=0;/存入bufferfor(i=0;i4;i+)ucComMF522Bufi+2=*(pSnr+i);ucComMF522Buf6 =*(pSnr+i);/计算校验码CalulateCRC(ucComMF522Buf,7,status=PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,9,ucComMF522Buf,if(status=MI_OK)&(unLen=0 x18),status=MI_OK;elsestatus=MI_ERR;return status;,PcdAuthState(),函数负责验证卡片密码,具体源码如下:,【,描述5.D.2】PcdAuthState(),/,功 能:验证卡片密码/参数说明:auth_modeIN:密码验证模式/0 x60=验证A密钥/0 x61=验证B密钥/addrIN:块地址/pKeyIN:密码/pSnrIN:卡片序列号,4字节,/,返 回,:,成功返回,MI_OK,/unsigned char PcdAuthState(unsigned char auth_mode,unsigned char addr,unsigned char*pKey,unsigned char*pSnr)unsigned char status;unsigned int unLen;unsigned char i,ucComMF522BufMAXRLEN;ucComMF522Buf0=auth_mode;ucComMF522Buf1=addr;/存入密码for(i=0;i6;i+)ucComMF522Bufi+2=*(pKey+i);,for(i=0;i6;i+)ucComMF522Bufi+8=*(pSnr+i);status=PcdComMF522(PCD_AUTHENT,ucComMF522Buf,12,ucComMF522Buf,PcdRead()函数负责读取M1卡的一块数据,具体源码如下:【描述5.D.2】PcdRead(),/功 能:读取M1卡一块数据/参数说明:addrIN:块地址/pDataOUT:读出的数据,16字节/返 回:成功返回MI_OK/unsigned char PcdRead(unsigned char addr,unsigned char*pData)unsigned char status;unsigned int unLen;unsigned char i,ucComMF522BufMAXRLEN;,ucComMF522Buf0=PICC_READ;ucComMF522Buf1=addr;CalulateCRC(ucComMF522Buf,2,if(status=MI_OK)&(unLen=0 x90),for(i=0;i16;i+)*(pData+i)=ucComMF522Bufi;,elsestatus=MI_ERR;return status;,PcdWrite(),函数负责写数据到,M1,卡的一块,具体源码如下:,【,描述5.D.2】PcdWrite(),/功 能:写数据到M1卡的一块/参数说明:addrIN:块地址/pDataIN:写入的数据,16字节/返 回:成功返回MI_OK/unsigned char PcdWrite(unsigned char addr,unsigned char*pData)unsigned char status;unsigned int unLen;unsigned char i,ucComMF522BufMAXRLEN;,ucComMF522Buf0=PICC_WRITE;ucComMF522Buf1=addr;CalulateCRC(ucComMF522Buf,2,if(status!=MI_OK)|(unLen!=,4)|(ucComMF522Buf0 if(status=MI_OK),/memcpy(ucComMF522Buf,pData,16);for(i=0;i16;i+)ucComMF522Bufi=*(pData+i);CalulateCRC(ucComMF522Buf,16,if(status!=MI_OK)|(unLen!=,4)|(ucComMF522Buf0&0 x0F)!=0 x0A),status=MI_ERR;return status;,PcdHalt(),函数负责命令卡片进入休眠状态,具体源码如下:,【,描述5.D.2】PcdHalt(),/功 能:命令卡片进入休眠状态,/,返 回,:,成功返回,MI_OK/unsigned char PcdHalt(void)unsigned int unLen;unsigned char ucComMF522BufMAXRLEN;,ucComMF522Buf0=PICC_HALT;ucComMF522Buf1=0;CalulateCRC(ucComMF522Buf,2,CalulateCRC(),函数负责用,MF522,计算,CRC16,函数,具体源码如下:,【,描述5.D.2】CalulateCRC(),/用MF522计算CRC16函数/void CalulateCRC(unsigned char*pIndata,unsigned char len,unsigned char*pOutData)unsigned char i,n;ClearBitMask(DivIrqReg,0 x04);WriteRawRC(CommandReg,PCD_IDLE);SetBitMask(FIFOLevelReg,0 x80);,for(i=0;ilen;i+)WriteRawRC(FIFODataReg,*(pIndata+i);WriteRawRC(CommandReg,PCD_CALCCRC);i=0 xFF;don=ReadRawRC(DivIrqReg);i-;while(i!=0),PcdReset()函数负责复位RC522,具体源码如下:【描述5.D.2】PcdReset(),/功 能:复位RC522,/,返 回,:,成功返回,MI_OK/unsigned char PcdReset(void)/PORTD|=(1RC522RST);SET_RC522RST;delay_ns(10);,CLR_RC522RST;delay_ns(10);SET_RC522RST;delay_ns(10);WriteRawRC(CommandReg,PCD_RESETPHASE);delay_ns(10);/和Mifare卡通讯,CRC初始值0 x6363WriteRawRC(ModeReg,0 x3D);WriteRawRC(TReloadRegL,30);WriteRawRC(TReloadRegH,0);WriteRawRC(TModeReg,0
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服