基于ArduinoMiFare射频卡读写机制研究.docVIP

  • 8
  • 0
  • 约3.17千字
  • 约 7页
  • 2018-08-27 发布于福建
  • 举报
基于ArduinoMiFare射频卡读写机制研究

基于ArduinoMiFare射频卡读写机制研究   摘要: 本文阐述了在Arduino UNO上对MiFare One卡射频识别卡进行读写的软件实现,并重点描述了阅读器与卡片之间的通信过程。   Abstract: This paper expounds the software of implementing MiFare One radio frequency identification card based on Arduino UNO, and mainly introduces the communication process between the reader and the card.   关键词: 射频识别;Arduino;MFRC522;MiFare One;读/写   Key words: radio frequency identification;Arduino;MFRC522;MiFare One;read/ write   中图分类号:TP368.1 文献标识码:A 文章编号:1006-4311(2015)07-0071-02   1 MiFare One卡片的特性与结构   MiFare One卡片内部包括一块微型芯片和一个天线。在工作时,卡片与阅读器之间通过13.56MHz频段进行通信。每张卡片具有唯一的序列号,具有防冲突机制,同时对卡内存储的数据通过密码进行读写保护。   卡片的微型芯片内建了EEPROM存储器,以MiFare One S50为例,存储器容量为8Kbit。整个存储空间被划分为16个扇区,记为扇区0-15,每个扇区有4个数据块,记为数据块0、1、2、3,每个数据块16个字节,对卡片的读写以数据块为单位进行,如图1所示。   其中第0扇区第0数据块为厂商标志块,用于存储厂商信息与卡号。另外每一个扇区的最后一个数据块用于存储本扇区的读写密码。   2 Arduino与MFRC522的通信   2.1 Arduino与MFRC522的连接 Arduino通过SPI① 与MFRC522进行连接,连接方式如表1所示。   2.2 Arduino对MFRC522的控制 Arduino对MFRC522的控制是通过对MFRC522的寄存器进行读写来实现的。MFRC522寄存器有Command and Status、Command、CFG、TestRegister共计64个寄存器,所有寄存器与其地址之间在预处理中建立绑定关系,例如:   #define CommandReg 0x01   读写MFRC522的寄存器时需要使用Arduino的SPI库中的transfer()函数,所以在程序的setup()函数中要调用SPI.begin()对SPI总线等进行初始化。使用SPI.transfer()函数时要按照先传送读写地址,再读取或写入数据的方式来完成。在传送地址时,需要同时告知此次操作是读还是写,地址格式如表2所示。   以写函数为例,地址格式要求为:0XXXXXX0,函数实现如下:   /* addr:寄存器地址;val:写入值;*/   void Write_MFRC522(uchar addr, uchar val)   {   digitalWrite(chipSelectPin, LOW);   SPI.transfer((addr1)0x7E);   SPI.transfer(val);   digitalWrite(chipSelectPin, HIGH);   }   3 读/写卡片时的数据传输过程   在向卡片写入数据时,首先要将写命令字和进行写操作的数据块号输入MFRC522的FIFO缓冲区 ,然后启动阅读器与卡之间的数据传输。在卡收到命令字与块号之后,再将要写入的数据输入MFRC522的FIFO缓冲区,再次启动数据传输,一次写操作完成。写数据函数的函数原型如下:   uchar MFRC522_Write(uchar blockAddr, uchar *writeData);   在MFRC522_Write0中需要调用一个启动MFRC522与卡片之间真正进行数据传输的函数:   uchar MFRC522_Comm(uchar command, uchar *sendData, uchar sendLen, uchar *backData, uint *backLen);   在此函数原型中,command表示命令字;sendData表示想卡片发送数据的地址;sendLen表示发送数据长度,单位为字节;backData表示MFRC522接收数据的地址;backLen表示接收数据长度值所在的地址。   MFR

文档评论(0)

1亿VIP精品文档

相关文档