基于单片机的rfid读写器设计_毕业论文(编辑修改稿)内容摘要:
息,天线的有效电磁场范围就是系统的工作区域。 声音提示及显示部分 非接触式 IC 卡读写器进行读写 操作时发出提示音,发声的器件选用蜂鸣器,该器件使用方便、价格便宜。 单片机的 IO 口驱动能力有限,不能直接驱动蜂鸣器发声,通过三极管来驱动蜂鸣器。 显示部分采用 LCD12864 液晶显示模块。 第五章 读卡器系统软件 驱动程序 设计 读卡器硬件必须在软件的控制下进行工作, 第四章 主要描述读卡器系统软件设计的原理, 读卡器和 Mifare1 卡的通信的流程,系统的初始化、防碰撞、身份验证和读写操作等模块。 所有驱动程序是在 Philips 公司的基准程序基础上进行 的开发,开发环境采用 Keil ,单独调试通过后,再在 Keil C51 环境下加入到工程文件中会变成 HEX 文件,写入STC11F32 单片机芯片中进行调试运行。 相对于 Philips公司生产的其他 14443基站芯片 (如 RC500、 RC530等 ), RC522简化了内部系统结构,去掉了片内 E2PROM。 从而大大缩减了芯片命令集。 另外,对载波调制电路,发送电路和解调、解码电路的控制也相应简化,去掉了 校准接收电路 I 时钟、 Q时钟、校准发送与接收时钟相位等繁琐的操作。 一般而言,单片机与 RC522 的通信流程如图 41所示。 图 41 根据 RC522 和 MIFARE 卡问传送的控制流数据的不同,通信过程中可能会出现不同的状态。 对各种状态须作不同处理,这正是软件系统开发的难度所在。 下面给出 RC522命令集中 2个最基本命令 (Tranceive和 MFAuthent)执行过程中可能遇到的通信状态及处理。 这两个命令分别实现向 MIFARE 卡发送 /接收数据和加密认证功能。 实际上,通过它们即可完成对 MIFARE 卡的所有操作, 包括 Request、Anticollision、 Select、 READ、 WRITE 等。 RC522 命令集的实现 RC522 主要的状态指示寄存器包括 ComIrqReg、 ErrorReg、 Status2Reg 和 FIFOLevelReg 等。 软件处理的思路:通过 ComIrgReg 得到 RC522 内部中断状态。 由中断判断 RC522 与 MIFARE 卡的通信流程信息,从而决定是否进行下一流程处理。 若中断指示有错误发生,则需进一步读取 ErrorReg 的内容,据此返回错误字。 Tranceive 命令 Tranceive 命令的具体执行过程。 读取 RC522 FIFO 中的所有数据,经基带编码和数字载波调制后通过通信接口以射频形式发送到 MIFARE 卡。 发送完毕后通过通信接口检测有无 MIFARE 卡发送的射频信号回应,并将收到的信号解调、解码后放入 FIFO 中。 分析以上 Ttanceive 命令执行过程,可以得到处理该命令的算法流程图,如图 42 所示。 图 42 为了处理 Mifare 卡在读卡器产生的电磁场中激励后,未完成处理义从激励 场中拿开的情况,软件中启用了 RC522 芯片内部的定时器。 若超过设定的时间未得到卡片应答,则中止与卡的通信,返回“卡无反应”的错误信息。 从图 42 中可以看出 Tranceive 命令的核心处理方法:根据相关通信状态指示寄存器的内容返回各种错误状态字,若有位冲突错误,则进一步返回位冲突位置。 Tranceive 命令不处理面向比特的帧,这种帧只可能在 MIFARE 卡防冲突循环中出 现。 为了保持 Tranceive 命令对各种 MIFARE 卡命令的普适性,该命令只完成帧的发送和接收,不对帧信息作处理,所有位冲突处理留在函数外进行。 需要注意的是, Tranceive 命令不能自动中止,在任何情况下从该命令返回时必须先执行 IDLE 指令使 RC522 转入空闲态。 MFAuthent 命令 RC522 简化了与 MIFARE 卡的加密认证操作,用一个 MFAuthent 命令代替了原来 RC500 需要的 Authentl 和 Authent2 两条命令。 MFAuthent 命令执行的最终目的在于开启 RC522 的 加密认证单元。 该指令执行成功后, RC522 芯片与 MIFARE卡间的通信信息将首先加密,然后再通过射频接口发送。 从本质上讲, MFAuthent是一条变相的 Tranceive 命令,其算法流程图与图 4 一致。 但 RC522 芯片内部已经对通信过程中的各种通信状态作了相应处理,且该命令执行完后自动中止,因此用户只须检测定时器状态和错误寄存器状态来判断执行情况。 实际上,MFAuthent 只可能有一种错误状态 (RC522 与 MIFARE 卡通信帧格式错误 ),此时该命令不能打开加密认证单元,用户必须重新执行认证操作。 MFAuthent 执行过程中 RC522 将依次从 FIFO 中读取 1字节认证模式、 l 字节要认证的 E2PROM 块号、 6 字节密钥和 4 字节射频卡 UID 号等信息,在命令执行前必须保证这 12 字节数据完整地保存在 FIFO 中。 认证模式有 A 密钥认证和 B密钥认证两种,一般选用 A 密钥认证。 一次 MFAutllent 认证只能保证对 MIFARE 卡的一个扇区中的 4 个数据块解密,若要操作其他扇区的数据用户还须另外启动对该扇区的认证操作。 Mifare 卡操作程序设计 对 Mifare 卡的操作分为请求、反碰撞、选择、认证、读、写、增值、减值、存取 和传输,对 Mifare 卡的操作流程图如图所示,具体描述如下: 1 请求操作 当有 Mifare 卡进入读写器天线作用范围内,读写器发出 Request 命令。 卡上的 ATR 将启动,将卡上的第 0 扇区的第 0 块上得卡片类型号( TagType)共 2个字节数据发给读写 器,建立卡与读写器的第一步通信联络。 如果不进行请求操作,接下去的操作无法进行。 请求函数如下: char PcdRequest(unsigned char data req_code,unsigned char *pTagType) req_mode 是输入参数, Request All 时输入命令代码 52H, Request Idle时输入参数 26H. pTagType 是输出,返回 2个字节的卡类型号。 操作成功返回值为 0。 2 反碰撞操作 在请求操作之后,要进行的是反碰撞操作,得到一张卡的序列号。 当多张Mifare 卡同时处于读写器天线作用范围内,读写器与一张 Mifare 卡进行通信,取得徐序列号。 由于 Mifare 卡的序列号全球唯一,不可能重复,保证下一步只对一张 Mifare 卡操作。 反碰撞函数如下: char PcdAnticoll(unsigned char *pSnr) pSnr 是输入,存放序列号( 4byte)的内存单元首地址。 操作成功时函数返回值为 0. 3 卡选择操作 在 Mifare 卡成功完成请求,反碰撞操作后,进行的操作是卡选择。 对指定序列号的卡进行选择操作,选中的卡可以进一步同 RC522 进行通信,其余的卡 恢复到初始状态。 卡选择操作函数: char PcdSelect(unsigned char *pSnr) pSnr 是输入, Mifare 卡的序列号。 操作成功时函数返回值为 0. 4 认证操作 为了访问 Mifare 卡的 EEPROM 存储器中存放的数据,必须进行认证操作。 认证的过程从 RC522 内部开始。 用户首先要将正确的密钥放入 RC522 的密钥缓冲区中,然后比较 RC522 的密钥缓冲区中存放的密钥与 Mifare 卡尾块中存放的密钥是否相同,相同可以对 Mifare 卡进行下一步操作,不相同不允许对 Mifare 进行下一步操 作。 认证的程序流程一般分为三步:( 1)为了进行认证操作,密钥必须转化为标准的格式,然后存入 RC522 的内部密钥缓冲区中,将 6字节的未编码的密钥转化成 12 字节的编码密钥,有米要编码函数 char ChangeCodeKey( )实现;( 2)讲已转换格式后的密钥送到 RC522 的 FIFO 中,有函数 char PcdAuthKey( )实现;( 3)用存放 RC522 的 FIFO 中得密钥和卡上的密钥进行验证,由函数 char PcdAuthState( )完成。 相关函数如下: Char ChangeCodeKey(unsigned char *pUncode,unsigned char *pCoded ) pUncode 输入函数, 6 字节未转换的密钥。 pCoded 输出函数, 12字节转换后的密钥。 Char PcdAuthKey(unsigned char *pKeys) pKeys 输入函数 ,转换后的密钥。 char PcdAuthState(unsigned char data auth_mode,unsigned char data addr,unsigned char *pKey,unsigned char *pSnr) auth_mode 输入函数, 0x60:验证 A密钥, 0x61:验证 B密钥。 以上函数返回值类型均为 char。 操作正确时返回 0. 经过认证操作, Mifare 卡的访问控制条件为允许读时,可以从 Mifare 卡中读出其 EEPROM 的值。 每次读出 16 字节一块的数据。 读操作函数: char PcdRead(unsigned char data addr,unsigned char *pData) 该函数从指定的块中读取 16 字节的数据。 addr 输入块号,取值范围 0— 63. pData 输出 16 字 节来自 Mifare 卡的数据。 操作成功返回 0. 6 写操作 经过认证, Mifare 卡的访问控制条件为允许写时,可以通过写操作将数据写入到 Mifare 卡的 EEPROM 中。 每次写入 16字节一整块数据。 写操作函数 : char PcdWrite(unsigned char data addr,unsigned char *pData) 该函数可以将 16 字节的数据写入到指定的块中。 发送完该命令后等待卡的响应信号,收到响应信号后, MFRC522 发送 16字节的数据,再次等待响应信号。 addr 输入块号,取值范围 0— 63. pData 输入 16 字节的数据。 操作成功返回 0. 7 值操作 当 Mifare 的块的属性设定为值块时,可以进行值操作,值操作包括增加、减少取值、传输。 增加操作:读取 Mifare 卡指定块的值,检查值的合法性,增加指定的值,将结果存放到 Mifare 卡的内部中间寄存器中。 减少操作:读取 Mifare 卡指定块的值,检查值的合法性,减少指定的值,将结果存放到 Mifare 卡的内部中间寄存器中。 取值操作:读取 Mifare 卡指定块的值,检查值的合法性,将值存放到 Mifare卡的内部中间寄存器中。 传输操作:将 Mifare 卡内部中间寄存器的内容传送到 Mifare 卡的 EEPROM中。 该函数是在增值操作、简直操作或取值操作后调用的。 值 操 作 函 数 : char PcdValue(unsigned dd_mode,usigned char addr,unsigned char *pValue) dd_mode 输入选择操作,即 PICC_INC 事增值操作, PICC_DEC 是简直操作,PICC_REST 是去值操作。 addr 是钱包的绝对值块号,取值范围 063. Value 输入 4字节增(减)值首地址, 16进制数,低位在前。 函数操作成功返回 0. 软硬件的联合测试运行 所有函数均在一个工程文件中,工程中包含了 3 个主要 C51 文件,分别是、 rc522 和。 分别包含了主函数、 MF RC522 处理函数和显示程序。 每个 C文件都对应的有一个头文件,头文件里定义了各个 C文件中用到的相关参数。 整个工程编译成一个 HEX 二进制代码文件,利用单片机的烧录软件把HEX 文件送入 STC11F32 单片机内部 ROM。 然后把单片机加电、复位,自动运行程序,把卡靠近读卡器天线,看系统是否获得卡的序列号,如果获得成功,说明系统初始化等工作正常, 如果失败则寻找原因,再次调试。 在调试的过程中,一定要仔细分析问题,确保硬件能正常工作时,不断调试程序,直至成功,最终实现了系统初始化、 MF RC522 初始化、读取序列号、请求应答握手过程、防冲突操作、选择和认证操作、读写操作的整个过程。 总结 在整个系统设计的过程中,通过对文献资料的查阅和相关技术手册的研读,我比较全面的掌握了 RFID 系统的基本原理和实现方法,特别是对于非接触式 IC卡类型的 RFID 系统。 RFID 识别技术作为当前发展迅速,应用日趋广泛的技术形势,正在改变着我们周围的世界,改变 着我们的生活方式。 研究 RFID 识别技术是促进识别技术及其应用的必然要求,作为读卡设备为了适应日益丰富的需求,其性能能够以及功能也在不断的进步中。 本文的读卡器是具体应用需求的一次尝试,做了以下工作: 对 RFI。基于单片机的rfid读写器设计_毕业论文(编辑修改稿)
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。
用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。