RC522读卡模块使用说明

RC522读卡模块使用说明
RC522读卡模块使用说明

TJDZ-RC522 RFID 读卡模块

用户操作手册

Ver_1.0_20121101

RC522 RFID 读卡模块使用说明

(以 MSP430F149 处理器为例)

第一步:将 RFID 模块与 MSP430F149 最小系统板采用杜邦线连接;

RC522 接口MSP430F149 接口

SDA(数据接口) P2.7

SCK(时钟接口)P2.6

MOSI(SPI 接口主出从入)P2.5

MISO(SPI 接口主入从出)P2.1

NC(悬空)

GND(地)GND

RST(复位信号)P2.3

3.3V(电源) 3.3V

第二步:程序通过 BSL 下载到 MSP430F149 中;

第三步:将串口线 USB-RS232 连接计算机与开发板;

第四步:打开串口调试手(正确设置波特率以及串口号);

第五步:按 MSP430F149 最小系统板上的复位键,则串口调试手出现如下画面:

第六步:在串口发送区,输入 A 点击发送,为自动寻卡模式;若输入F 点击发送则为单次寻卡模式;

第七步:将卡片放到读卡模块上,则可以看到读出卡的 ID 号。

测试完毕。

基于RC522的非接触式IC卡读卡器设计(含程序)

1 绪论 1.1 课题的研究背景 工业3.0将世界带入信息化的时代,信息技术的发展日新月异,一个以电子商务为主要特征的经济时代成为主要潮流,智能射频卡是一种将用户数据最快捷地送入到环球信息互联网并获得信息的最有用的工具,智能IC卡成为了人们身份识别和实现电子支付的手段,影响了我们生活工作的方式。智能IC卡与普通磁卡对比具有更高的安全性,所以,对智能IC卡的功能进行研究是非常有意义的。 智能IC卡,又是CPU卡。顾名思义, 这种卡片上集成了存储器、通信接口及CPU,具有存储数据、对外交流和数据处理的能力,因此,又是一片卡上的单片机系统。为了使这一系统中的硬件和软件资源充分得到利用, 卡上存放了进行数据读写和安全通信的协议,以及管理这些程序的Chip Operating system卡上操作系统。这操作系统是按照IC卡性能特征而专门设计的操作系统,它极大地不同于计算机上常见的DOS和WINDOWS 等操作系统,IC 卡存储器的容量大小和CPU的性能的限制着Chip Operating system卡上操作系统。主要功能是:控制IC卡与读卡器的数据交流;管理IC卡上各种存储器;在IC卡内执行读写器发来的各种操作命令。有了CPU与COS系统,成就了智能IC卡。所以,智能射频卡具有超强的管理性能,提供很高的数据安全性和可靠性[1]。 1.2 非接触式IC卡 1.2.1 非接触式IC卡的简介 非接触式IC卡又称射频卡,由IC芯片、感应天线组成,封装在一个标准的PVC卡片内,芯片及天线无外露部分[2]。它是全球上最近发展成熟的一项技术,射频识别技术和IC卡技术被成功地结合起来,解决了无源和非接触这一难题,无源即卡中没有电源,这是电子科学领域的一大突破[2]。卡片接近读写器天线产生电磁场的一定空间范围 (通常为50—100mm),通过电磁波的发送来完成数据的读写操作。 1.2.2 非接触式IC卡的特点 (1)操作快捷 卡与读卡器之间的通讯是非接触的。不用定向使用和插拔卡。操作时,卡也可

在C51单片机上对读写卡芯片MFRC522编程

在C51单片机上对读写卡芯片MFRC522编程 1 概述 在整个的射频识别系统中。读写卡模块负责建立单片机与电子标签之间的通信,起着非常重要的作用。而整个读写卡模块的核心,就是读写卡芯片MFRC522 MFRC522 是NXP 公司专为各种计量检测设备而设计、推出的一款低成本、低功耗的非接触式读写卡芯片。该芯片应用于13.56MHz 非接触通信,应用了较为先进的调制和解调概念,集成了众多的通信方式和协议,其内部强大的电路可直接驱动天线无需其他外接电路,通过其独特的加密算法,更使其具备可较强的安全性。 作为一款较为成功的读写卡芯片,MFRC522与主机间的通信采用的是连线较少的串行通信,而且可根据不同的用户需求,从SPI、I2C、串行UART三种总线模式中选择,这样的设计有利于减少连线数量,缩小PCB 板体积,降低成本。 目前MFRC522在很多的领域都得到了广泛应用,尤其适用于低成本、小尺寸、低功耗和单电源的非接触式通信的应用场合,是智能仪表、板上单元、便携式手持设备的极佳选择。目前,全国各大城市的公共交通终端以及非接触式公用电话应用的正是MFRC522

2 特性 1. 高度集成的模拟电路模块,应用新概念完成调制和解调。 2. 支持ISO 14443A与MIFARE通信协议 3. 驱动优化,采用少量外部器件就能输出驱动级到天线 4. 支持MIFARE的加密算法 5. 可自由选择多样的主机接口: ①10Mbit/s的SPI接口 ②I2C接口,快速传输模式的速率为400kbit/s, 高速模式的速率为3400kbit/s ③串行UART,传输速率高达1228.8kbit/s,帧取决于RS232接口,电 压电平取决于提供的管脚电压 6. 灵活的中断模式 7. 64字节的发送接收缓冲区 8. 具备软件掉电、硬件掉电和发送器掉电三种低功耗模式,能够通过关闭 相应的模块或驱动器达到节电的目的。 9. 2.5~3.3V的低电源电压,低功耗设计 10. 内部振荡器,链接27.12HZ的晶体 11.可编程定时器 12.自由编程的I/O管脚 13.内置温度传感器,当芯片温度过高时会自动停止射频信号的发射 14. 体积小,仅有5mm╳5mm╳0.85mm 3 系统结构

MFRC522 IC卡模块使用手册V1.0

MFRC522 IC 卡模块使用手册 V1.0
嵌达科技,快乐生活 欢迎访问:https://www.360docs.net/doc/698419414.html,/shop/view_shop.htm?tracelog=twddp 程序功能: 当 IC 卡放在模块上时,先把预先赋值给 Write_Data[16]这个数组中的数据写 到 IC 卡中,然后马上把写入的数据读出来,显示在 PC 机的串口调试助手上。 操作步骤: 1、 下载程序到单片机中。 我们设计的电路板使用的是 AT89S52,因此只能通过 ISP 下载,为了布线方 便,我只引出了必须的 6 根线供下载,图如下:
程 序 下 载 接 口 程 序 下 载 接
我们都知道 ISP 下载器都是 10 脚的,从 10 脚转变成 6 脚就必须有所转换, 一般有两种解决方法:1)通过杜邦线一对一连,这种方法的前提是你必须知道 自己手上的 ISP 下载器引脚定义;2)通过另一块转接板把 10 脚转换为 6 脚,并 附加上开关功能,这种方法比较方便,如下图:
由于此转换电路板制作费用较小,如果您买了 ISP 下载器或者买了读写卡模 块,我们将免费赠送。 2、 准备工作 ① 将读写卡模块插在电路板上; ② 将串口线连接电路板和电脑,保证可以实现串口通信的硬件连接; ③ 打开 PC 机上的串口调试助手,并打开对应端口,开启 16 进制显示,准 备接收数据。


3、 实现读写卡 ① 给电路板通电; ② 把卡放在读卡器模块上,当绿灯亮时表示读写卡结束,此时串口调试助 手会显示出卡对应数据块中的数据,如下图:
1、
工程文件说明:
我们的程序只用了四个文件,分别为:读写卡.c、read_card.h、read_card.c
和 rc522.h。下面我来介绍一下这四个文件的作用,各位亲,这部份仔细看哦, 尤其是那些还执着于在一个文件中实现所的函数编写的朋友们, 下面我们所展示 的文件架构可以适用于小中型工程的实现, 这会让您的程序看上去更有条理性和 逻辑性,更容易调试和修改程序,这对于您自身编程能力的提升是无往不利的。 如果您要实现大型的工程,就需要考虑更多的文件存放各种类别的程序了。 读写卡.c:这个文件是我们的 main()函数所在的文件,是我们整个工程的入 口点, 这个文件中包含了串口通信初始化函数的调用和读写卡函数的调用,进而 牵动所有函数的调用。 Read_card.h:这个文件是我们除 main()函数之外所有的函数定义的地方,只 有在这里定义函数,这些函数才能在别的文件中被使用。另外,这个文件中统一 定义了本工程所要用到的所有系统文件,比如说:regx52.h、intrins.h 等。 Read_card.c:如果说 read_card.h 这个文件实现了所有函数的定义, read_card.c 这个文件则实现了所有函数的编写。 从很简单的延时函数到复杂的寄 存器操作函数, 从单一功能的实现函数到完整读写功能的实现函数,全都会体现 在这里。 Rc522.h:MFRC522 读写模块上有一个芯片实现了对读写卡功能的控制,这

MF RC522 射频识别参考程序注释new

MF RC522 射频识别参考程序注释串口读取的数据

//------------------------------------------ ucAddr = ((Address<<1)&0x7E)|0x80;//变化成有效的地址形式,最低位为0,最高位为1时候是,从MFRC522读出数据,参考39页 // 读SPI数据 //------------------------------------------ unsigned char SPIReadByte(void) { unsigned char data SPICount; // Counter used to clock out the data unsigned char data SPIData; SPIData = 0; for (SPICount = 0; SPICount < 8; SPICount++) // Prepare to clock in the data to be read { SPIData <<=1; // Rotate the data CLR_SPI_CK; nop();nop(); // Raise the clock to clock the data out of the MAX7456 if(STU_SPI_MISO) { SPIData|=0x01; }

Drop the clock ready for the next bit } // and loop back return (SPIData); // Finally return the read data } //------------------------------------------ // 写SPI数据 //------------------------------------------ void SPIWriteByte(unsigned char data SPIData) { unsigned char data SPICount; // Counter used to clock out the data for (SPICount = 0; SPICount < 8; SPICount++) { if (SPIData & 0x80) { SET_SPI_MOSI; } else { CLR_SPI_MOSI; } nop();nop(); CLR_SPI_CK;nop();nop(); SET_SPI_CK;nop();nop(); SPIData <<= 1; } } ///////////////////////////////////////////////////////////////////// //功能:寻卡 //参数说明: req_code[IN]:寻卡方式 // 0x52 = 寻感应区内所有符合14443A标准的卡 // 0x26 = 寻未进入休眠状态的卡 // pTagType[OUT]:卡片类型代码 // 0x4400 = Mifare_UltraLight // 0x0400 = Mifare_One(S50) // 0x0200 = Mifare_One(S70) // 0x0800 = Mifare_Pro(X) // 0x4403 = Mifare_DESFire //返回: 成功返回MI_OK ///////////////////////////////////////////////////////////////////// char PcdRequest(unsigned char data req_code,unsigned char *pTagType) {

STM8 RC522 读写IC卡程序

#include "stm8s.h" #include "uart.h" void Delay(u32 nCount); extern u8 RxBuffer[RxBufferSize]; extern u8 UART_RX_NUM; unsigned char CT[2];//卡类型 unsigned char SN[4]; //卡号 unsigned char write[16] = {0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x10}; unsigned char read[16] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; unsigned char key[6] = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}; #define countof(a) (sizeof(a) / sizeof(*(a))) #define BufferSize (countof(Tx_Buffer)-1) u8 Tx_Buffer[] = "STM8S RFID TEST"; u8 Rx_Buffer[BufferSize]; u32 FLASH_ID ; void cardNo2String(u8 *cardNo, u8 *str); void main(void) { unsigned char status; /*设置内部时钟16M为主时钟*/ CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1); status = memcmp(read,write,16); GPIO_DeInit(GPIOA); GPIO_DeInit(GPIOC); Uart_Init(); GPIO_Init( GPIOA, GPIO_PIN_4, GPIO_MODE_OUT_PP_HIGH_FAST); InitRc522(); UART2_SendString(Tx_Buffer,BufferSize); while(1) { status = PcdRequest(PICC_REQALL,CT); /*扫描卡*/ status = PcdAnticoll(SN); /*防冲撞*/ if (status==MI_OK) { GPIO_LOW(GPIOA, GPIO_PIN_4); //寻卡成功

RFID_MFRC522

RFID 一、概述 (2) 二、系统组成 (2) 三、非接触式IC卡—M1卡 (2) 1、外观 (2) 2、结构 (3) 3、功能 (3) 4、Mifare 1 S50卡存储EEPROM (5) 四、读卡器—MFRC522 (7) 1、内部框图 (7) 2、电路图 (8) 3、MFRC522支持的三种接口 (9) 4、工作过程 (9) 五、结果 (13)

一、概述 通过点名、磁卡和接触式IC卡等方式对学生的到课情况进行考勤、记录管理,既耗时又相互干扰;而非接触式RFID学生考勤系统实现了利用无线射频识别技术对学生考勤管理,既方便、快捷,又省时。而且通过物联网和PC机终端对数据进行处理。 二、系统组成 学生智能考勤系统由四大部分组成,非接触式IC卡、读卡器、单片机及PC 终端。如下图 学生考勤系统组成 1.当保存有学生基本信息的IC卡进入读卡器天线作用范围内时,卡片获得 能量以维持卡内部电路工作; 2.单片机负责控制读卡器进行一系列“寻卡→防冲突→选卡→读/写卡”操 作,如果成功,将读取到卡片上的学生信息; 3.单片机将学生信息发送到PC终端,由PC机对一步对数据进行处理。 三、非接触式IC卡—Mifare One卡 1、外观 非接触式IC卡

2、结构 非接触式IC卡的薄膜结构 卡内部结构 3、功能 功能框图 读卡器通过天线发射激励信号(一组固定频率的电磁波),IC卡进入读写器工作区内,被读写器信号激励。在电磁波的激励下,卡内的LC串联谐振电路产生共振,从而使电容内

有了电荷,在这个电容的另一端,接有一个单向导通的电子泵,将电容内的电荷送到另一个电容内储存,当所积累的电荷达到2 V时,此电容可以作为电源为其他电路提供工作电压,供卡内集成电路工作所需。 (1)ATR模块:Answer To Request(“请求之应答”) 当一张MIFARE 1卡处在读写器的天线工作范围之内时,程序员控制读写器向卡发出Request all(或Request std)命令后,卡的ATR将启动,将卡片块 0 中2个字节的卡类型号(TagType)传送给读写器,建立卡与读写器的第一步通信联络。 如果不进行第一步的ATR工作,读写器对卡的其他操作(读/写操作等)将不会进行。 (2)AntiCollision模块:防(卡片)冲突功能 如果有多张MIFARE 1卡处在读写器的天线工作范围之内,则AntiCollision模块的防冲突功能将被启动工作。读写器将会首先与每一张卡进行通信,读取每一张卡的序列号(Serial Number)。由于每一张MIFARE 1卡都具有惟一的序列号,决不会相同,因此程序员将启动读写器中的AntiCollision防重叠功能配合卡上的防重叠功能模块,根据卡序列号来选定其中一张卡。被选中的卡将被激活,可以与读写器进行数据交换;而未被选中的卡处于等待状态,随时准备与读写器进行通信。 AntiCollision模块(防重叠功能)启动工作时,读写器将得到卡片的序列号(Serial Number)。序列号存储在卡的Block 0中,共有5个字节,实际有用的为4个字节,另一个字节为序列号的校验字节。 (3)Select Application 模块:卡片的选择 当卡与读写器完成了上述两个步骤,读写器要想对卡进行读/写操作时,必须对卡进行“Select”操作,以使卡真正地被选中。 被选中的卡将卡片上存储在Block 0中的卡容量“Size” 字节传送给读写器。当读写器收到这一字节后,方可对卡进行进一步的操作,如密码验证等。 (4)Authentication & Access Control 模块:认证及存取控制模块 完成上述的三个步骤后,读写器对卡进行读/写操作之前,必须对卡上已经设置的密码进行认证,如果匹配,则允许进一步的读/写操作。 MIFARE 1 卡上有16个扇区,每个扇区都可分别设置各自的密码,互不干涉,必须分别加以认证,才能对该扇区进行下一步的操作。因此每个扇区可独立地应用于一个应用场合,整个卡可以设计成一卡多用(一卡通)的形式来应用。 密码的认证采用了三次相互认证的方法,具有很高的安全性。如果事先不知卡上的密码,则因密码的变化可以极其复杂,试图靠猜测密码而打开卡上一个扇区的可能性几乎为零。 (5)Control & Arithmetic Unit:控制及算术运算单元 这一单元是整个卡的控制中心,是卡的“头脑”。它主要对卡的各个单元进行操作控制,协调卡的各个步骤;同时它还对各种收/发的数据进行算术运算处理、递增/递减处理和CRC运算处理等,是卡中内建的中央微处理器(MCU)单元。 (6)RAM/ROM 单元 RAM主要配合控制及算术运算单元,将运算的结果进行暂时存储,例如将需存储的数据由控制及算术运算单元取出送到EEPROM存储器中;将需要传送给读写器的数据由控制及算术运算单元取出,经过RF射频接口电路的处理,通过卡片上的天线传送给读写器。RAM 中的数据在卡失掉电源后(卡片离开读写器天线的有效工作范围)将会丢失。 同时,ROM中则固化了卡运行所需要的必要的程序指令,由控制及算术运算单元取出,对每个单元进行指令控制,使卡能有条不紊地与读写器进行数据通信。 (7)Crypto Unit:数据加密单元 该单元完成对数据的加密处理及密码保护。加密的算法可以为DES标准算法或其他。

STM8 RC522 IC卡修改密码程序

/* Includes ------------------------------------------------------------------*/ /* Includes ------------------------------------------------------------------*/ #include "stm8s.h" #include "stm8s_clk.h" #include "intrinsics.h" #include "stm8s_uart1.h" #include "uart.h" #include "rc522.h" #include "string.h" void Delay(u32 nCount); extern u8 RxBuffer[RxBufferSize]; extern u8 UART_RX_NUM; unsigned char CT[2];//卡类型 unsigned char SN[4]; //卡号 unsigned char write[16] = {0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x10}; unsigned char read[16] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; unsigned char key[6] = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}; /* Private macro -------------------------------------------------------------*/ #define countof(a) (sizeof(a) / sizeof(*(a))) #define BufferSize (countof(Tx_Buffer)-1) /* Private variables ---------------------------------------------------------*/ u8 Tx_Buffer[] = "STM8S RFID TEST"; u8 Rx_Buffer[BufferSize]; u32 FLASH_ID ; /* Private defines -----------------------------------------------------------*/ /* Private function prototypes -----------------------------------------------*/ /* Private functions ---------------------------------------------------------*/ #define ReadWriteAddr 11 //读写扇区 void main(void) { unsigned char status; /* Infinite loop */ /*设置内部时钟16M为主时钟*/ CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);

基于51单片机RC522无线射频公交车刷卡系统设计毕业设计论文

基于51单片机RC522无线射频公交车刷卡系统设计

毕业设计(论文)原创性声明和使用授权说明 原创性声明 本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。 作者签名:日期: 指导教师签名:日期: 使用授权说明 本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。 作者签名:日期:

学位论文原创性声明 本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律后果由本人承担。 作者签名:日期:年月日 学位论文版权使用授权书 本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。 涉密论文按学校规定处理。 作者签名:日期:年月日 导师签名:日期:年月日

MFRC522 读卡器设计重点讲义资料

摘要 射频识别卡读写模块的设计与应用 随着电子信息技术的发展,智能卡(IC卡)已经在我们的生活中随处可见。射频识别卡正逐渐取代传统的接触式IC 卡,成为智能卡领域的新潮流。研究、开发射频识别卡的读写技术与读写设备,对其推广有着重要的实际意义。 本文首先介绍了射频识别卡及射频识别系统的工作原理。为了使应用系统的开发人员无需掌握复杂的射频识别技术就可快速开发射频识别卡应用产品,本文基于模块化的设计思想设计开发了Mifare卡(ISO14443A)射频识别卡的读写模块。该读写模块不仅能完成对射频识别卡的控制和读写操作,而且可供用户在其基础上进行二次开发。文中详细讨论了读写模块的具体实现。硬件部分介绍了系统的组成、MCU 与读写芯片的接口设计与硬件电路的实现。软件部分重点阐述如何实现射频识别通信的底层驱动,并在此基础上将卡片的操作用函数形式封装,以供用户调用。函数的封装严格按照软件工程的要求,具有硬件无关性,方便用户二次开发。然后,给出了读写模块的应用实例:RFID 卡通用读写卡器。 关键词:射频识别IC 卡读写设备 作者:李索

目录 第一章概述 (3) 1.1 RFID系统概述 (3) (1)RFID卡 (3) (2)RFID 卡读写设备 (4) 1.2 RFID 卡的国际标准 (5) (1)RFID 卡的国际标准 (5) (2)近耦合IC卡国际标准ISO/IEC 14443 (5) (3)Mifare RFID 卡 (6) 第二章读写模块硬件设计 (9) 2.1 硬件系统组成 (9) 2.2 芯片选型 (9) (1)主控芯片 (9) (2)射频读写芯片 (10) 2.3 硬件电路设计 (11) (1)主控MCU电路 (11) (3)串行通信电路 (12) (4)电源电路 (12) 第三章读写模块软件设计 (14) 3.1 RC522程序 (14) (1)模拟SPI驱动程序: (14) (2)RC522 读写程序 (14) 3.2 Mifare One S50卡读写测试 (17) (1)发送命令格式定义 (17) (2)接收数据格式定义 (17) (3)读写操作实例 (17) 第四章附录 (20) 4.1 参考文献 (20) 4.2 资料支持 (20)

STM32F103驱动MFRC522

//MF522命令字 ///////////////////////////////////////////////////////////////////// #ifndef __rc522_H #define __rc522_H #include "sys.h" #include #include "delay.h" #include #define PCD_IDLE 0x00 //取消当前命令 #define PCD_AUTHENT 0x0E //验证密钥 #define PCD_RECEIVE 0x08 //接收数据 #define PCD_TRANSMIT 0x04 //发送数据 #define PCD_TRANSCEIVE 0x0C //发送并接收数据 #define PCD_RESETPHASE 0x0F //复位 #define PCD_CALCCRC 0x03 //CRC计算 ///////////////////////////////////////////////////////////////////// //Mifare_One卡片命令字 ///////////////////////////////////////////////////////////////////// #define PICC_REQIDL 0x26 //寻天线区内未进入休眠状态#define PICC_REQALL 0x52 //寻天线区内全部卡 #define PICC_ANTICOLL1 0x93 //防冲撞 #define PICC_ANTICOLL2 0x95 //防冲撞 #define PICC_AUTHENT1A 0x60 //验证A密钥 #define PICC_AUTHENT1B 0x61 //验证B密钥 #define PICC_READ 0x30 //读块 #define PICC_WRITE 0xA0 //写块 #define PICC_DECREMENT 0xC0 //扣款 #define PICC_INCREMENT 0xC1 //充值 #define PICC_RESTORE 0xC2 //调块数据到缓冲区 #define PICC_TRANSFER 0xB0 //保存缓冲区中数据 #define PICC_HALT 0x50 //休眠 ///////////////////////////////////////////////////////////////////// //MF522 FIFO长度定义 ///////////////////////////////////////////////////////////////////// #define DEF_FIFO_LENGTH 64 //FIFO size=64byte #define MAXRLEN 18 ///////////////////////////////////////////////////////////////////// //MF522寄存器定义

RC522调试随记

RC522调试随记 调试环境 1、主要芯片:STM32F103VC、NXP RC522 2、板卡描述:该产品使用了多个板卡,一个主控板,一个扩展板,一个RF天线板还有其他模块板。 ●主控板包括了主芯片STM32F103VC、电源管理、RS485、RS232、GPRS、SPI Flash等 功能。 ●扩展板集成了所有接口的连接件,如RS485、开关控制、信号输入等功能的接口连接插 座,与本次调试没有直接影响。 ●RF天线板包括NXP RC522和晶振电路,以及RF天线及相关电路,RF天线板与主控 板的连接线包括DC 3.3V电源和SPI相关接口。 主要特点 主控板因为功能比较多,也因为机箱的原因,设计的面积比较大,RF天线板的接口(包括电源和SPI接口)距离MCU和DC 3.3V电源模块比较远。 调试遇到的问题 RF能寻到卡,但是也不稳定,偶尔能读到卡里面的数据; 调试历程 1、开始怀疑是RF天线板的问题,用之前调试稳定的并且效果非常好的一个RF天线板换到上面测试,结果效果一样。 2、排除了RF天线板的问题,怀疑是程序问题,找到之前测试的一套硬件环境和程序,测试结果是寻卡、读卡、写卡都非常稳定,读写距离也很理想。 3、使用同样的程序和RF天线板到主控板上调试,测试结果依然是RF能寻到卡,但是也不稳定,偶尔能读到卡里面的数据,射频距离也不是很理想。

4、因为SPI的线路在PCB上走的很长,我们分析是不是SPI的线路中间有器件对其产生了干扰,导致SPI通讯不稳定,所以将SPI的中间线路切断,直接从MCU处通过导线连接到RF天线板的接口处,经测试效果有明显改善,RF能寻到卡,读卡基本稳定,而写卡成功率非常小。 5、基本确定SPI在PCB板上的走线受到了其他器件的干扰(这个确定是错误的),所以将SPI经过处的所有器件拆除,经过测试效果并没有明显改善。 6、迷茫...... 7、偶尔提出一个想法,会不会是DC 3.3V供电不足,随后硬件工程师加了一个大电容进行测试,测试效果非常好,寻卡、读卡、写卡都非常稳定,读写距离也很理想。本次测试时RF天线板与主控板是用杜邦线连接的,离主控板比较远。 8、将RF天线板插接到主控板的连接件上,这时RF天线板与主控板约有1CM的距离,测试结果,寻卡都困难。 9、基本确定是主控板与RF天线板接触的部位是全部铺地的问题,经过对主控板的刮、挖、剪操作后,效果得到了明显的改善。 10、问题最终确定是DC 3.3V供电不足和主控板与RF天线板接触部位全部铺地的原因。付出代价 1、两个工程师牺牲了1个周日。 2、主控板重新制版,本次测试的主控板是第二版,而在第一版的时候只测试了RF天线板的寻卡,未测试读卡和写卡功能,该问题应该在第一版时就应该测试出来,所以因为本问题实际重新制版2次。 3、产品生产延期至少5个自然日。 总结经验 1、测试RF天线时不能只测试寻卡功能,一定要测试读卡和写卡功能。 2、RF天线板与其他PCB距离比较近的情况下,要考虑相邻PCB与RF天线板接触的部位不要大面积铺地。 3、保证RC522的供电电流充足,为了稳定,最好加大容量电容。

13.56M读卡器开发详解二(RC522驱动程序)

13.56M读卡器开发详解二 1. 硬件接口介绍 根据上一篇的介绍,小编使用了RC522的SPI口通信方式和51单片机进行通信。硬件接口设计此处不再附图。只是将接口配置列写如下: sbit spi_cs=P1^6; sbit spi_ck=P1^5; sbit spi_mosi=P1^4; sbit spi_miso=P1^3; sbit spi_rst=P1^2; #define SET_SPI_CS spi_cs=1 #define CLR_SPI_CS spi_cs=0 #define SET_SPI_CK spi_ck=1 #define CLR_SPI_CK spi_ck=0 #define SET_SPI_MOSI spi_mosi=1 #define CLR_SPI_MOSI spi_mosi=0 #define STU_SPI_MISO spi_miso #define SET_RC522RST spi_rst=1 #define CLR_RC522RST spi_rst=0 2. 51单片机模拟SPI通信函数 void delay_ns(unsigned int data ns) { unsigned int xdata i; for(i=0;i { nop(); nop(); nop(); } } unsigned char SPIReadByte(void) { unsigned char idata SPICount; // Counter used to clock out the data unsigned char idata SPIData; SPIData = 0; for (SPICount = 0; SPICount < 8; SPICount++) // Prepare to clock in the data to be read { SPIData <<=1; // Rotate the data CLR_SPI_CK; nop();nop(); // Raise the clock to clock the data out of the MAX7456 if(STU_SPI_MISO)

基于单片机及MFRC522的餐卡充值消费系统

射频识别技术课程设计报告 题目:基于单片机及MFRC522的餐卡 充值消费系统 院(系):信息与电子工程学院 专业班级: 学生姓名: 学号:

目录 1.题目 (3) 2.目的与要求 (3) 2.1目的 (3) 2.2要求 (3) 2.2.1系统功能 (3) 2.2.2系统原则 (3) 3.内容与步骤(设计思想) (4) 3.1硬件设计 (4) 3.1.1系统框架 (4) 3.1.2最小系统模块设计 (5) 3.1.3键盘模块设计 (6) 3.1.4 LCD驱动模块设计 (6) 3.1.5 蜂鸣器模块设计 (7) 3.1.6 电源模块设计 (7) 3.1.7 RFID读卡器模块设计 (8) 3.1.8 S50卡简介 (9) 3.2软件设计 (10) 3.2.1 总体设计 (10) 3.2.2 读卡程序设计 (11) 3.2.3 MCU与读卡模块通信程序设计 (12) 4.部分代码(详细的注释) (14) 4.1键盘程序 (14) 4.2 LCD1602程序 (14) 4.3 读写卡程序 (16) 5.课程设计实践总结 (21)

1.题目 基于单片机及MFRC522的餐卡充值消费系统 2.目的与要求 2.1目的 科技高速发展,人们的需求也在日益增长,智能化与便携化成为人们孜孜不倦的追求。电子计算机的出现丰富了这个世界,也简化了这个世界。当然微型处理系统也悄悄产生了,并大量应用在实际中,利用MCU控制,处理一些事务,降低了劳动时间,提高了劳动效率,也提高了精度。MCU的出现使生活与生产发生很大的改变。人们的生活与智能越来越密不可分。RFID的普及,丰富了人们的生活,使得人们的物理数量转化为虚拟数量,比如现金数字化。RFID的发展,是信息现代化的主流和趋势,RFID的广泛应用将会掀起一场住宅革命,促进物联网的快速发展。 传统的现金消费方式并不适合学校、企业等人口集中且密集的地域。此方式不仅不方便单位对消费记录的获取,而且对于买卖双方也是非常不方便的。餐卡充值消费系统会使人们生活更加方便,不用随时随地的带好现金,也不用担心现金丢失,更不用担心收到假币。人们只要一张IC卡,便能够对自己的现金进行数字化,不管是交易还是携带都是方便至极。 2.2要求 2.2.1系统功能 (1)读卡器对IC初始化,设置IC卡的密码,设置卡号及充值相应的初始金额。 (2)充值IC卡功能,学生等人可以通过带上自己的现金去充值点让管理员进行充值。 (3)刷卡功能,工作人员按下键盘设置相应金额后,消费者可以近距离刷卡从而达到消费效果。 (4)读卡提示,lcd液晶屏上显示出本次消费或者充值的金额,如果没有操作,则是显示余额。蜂鸣器做出相应的声音提示。 (5)容错功能,当工作人员不小心刷多了金额,工作人员可以设置读卡器为充值模式对卡进行加款功能。 2.2.2系统原则 (1)实用性,餐卡消费系统的内容应符合实际需要,不能华而不实。因此,系统的实用性是首先应遵循的第一原则。

mfrc522程序注释

#include #include "reg52.h" #include "main.h" #include "mfrc522.h" #include #define MAXRLEN 18 /******* RxModeReg默认为106kbit/s的通信速率 ******************/ /*********************************************************************** * 功能:寻卡 * 参数说明: req_code[IN]:寻卡方式 * 0x52 = 寻感应区内所有符合14443A标准的卡 * 0x26 = 寻未进入休眠状态的卡 * pTagType[OUT]:卡片类型代码 * 0x4400 = Mifare_UltraLight * 0x0400 = Mifare_One(S50) * 0x0200 = Mifare_One(S70) * 0x0800 = Mifare_Pro(X) * 0x4403 = Mifare_DESFire * 返回: 成功返回MI_OK ***********************************************************************/ char PcdRequest(unsigned char req_code,unsigned char *pTagType) { char status; unsigned int unLen; unsigned char ucComMF522Buf[MAXRLEN]; // unsigned char xTest ; ClearBitMask(Status2Reg,0x08); // 清MFCrypto1On,只能通过软件清零,该位用来指示Crypto1的接通情况,MFAuthent(验证密钥)命令成功执行后置1 WriteRawRC(BitFramingReg,0x07); // TxLastBits([2-0])表示发送的最后一个字节7位发送 // xTest = ReadRawRC(BitFramingReg); // if(xTest == 0x07 ) // { LED_GREEN =0 ;} // else {LED_GREEN =1 ;while(1){}} SetBitMask(TxControlReg,0x03); // TxControlReg低2位(Tx2RFEn和Tx1RFEn)置1,Tx2和Tx1管脚输出信号调制在13.56MHz的载波上 ucComMF522Buf[0] = req_code; status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,1,ucComMF522Buf,&unLen); // PCD_TRANSCEIVE == 0x0c发送并接收数据

RC522教程(基于mps430)

RFID-RC522速成教程(基于msp430单片机的程序讲解) 学习一种模块,有很多种方法,其中一种方式是先去弄明白怎么使用这个模块,亲自体验了这个模块的大体功能之后,再回过头来了解该模块的工作原理,再去深层次的研究该模块。 在这里,着重介绍怎么用程序实现RC522模块的一些功能,而RC522的结构,功能等便不再介绍。 这个程序的讲解是基于MSP430F149/169单片机的。 模块使用的是SPI接口,与单片机接口如下: #define RF_LPCTL BIT3 // P2.3 射频卡休眠控制------RST #define RF_SS BIT7 // p2.7 射频卡从机选择(SS)---SDA #define RF_SCLK BIT6 // p2.6 射频卡数据时钟输出(SCLK) #define RF_DATA_OUT BIT5 // p2.5 射频卡数据输出(MOSI) #define RF_DATA_IN BIT1 // p2.1 射频模块输入(MISO) 要想对模块内部的数据块进行读写,需要完成4个步骤:寻卡→防冲突→选卡→读/写卡;第一步:寻卡。 status2=PcdRequest(0x52,Temp);////寻卡参数Temp为返回的卡类型 if(status2== MI_OK) { tochar(Temp[0]); tochar(Temp[1]);//输出卡类型 } 其中0x52代表寻天线区内全部卡。

卡类型(TagType): 0x4400 = Mifare_UltraLight 0x0400 = Mifare_One(S50) 0x0200 = Mifare_One(S70) 0x0800 = Mifare_Pro(X) 0x4403 = Mifare_DESFire 比如,当Temp[0]=04,Temp[1]=00时,卡类型为S50。 第二步:防冲突。 status2 = PcdAnticoll(UID); //防冲撞处理,输出卡片序列号,4字节 if(status2==MI_OK) { PutString0("Card Id is:"); tochar(UID[0]); tochar(UID[1]); tochar(UID[2]); tochar(UID[3]); //输出卡片序列号 } 第三步:选卡。 status2 = PcdSelect(UID); //选择卡片,输入卡片序列号,4字节 第四步:在读写卡之前需要先进行认证。 status2 = PcdAuthState(PICC_AUTHENT1A, 1, Password_Buffer, UID); 其中四个参数分别代表:验证A密钥+块地址+扇区密码+卡序列号。 然后进行写操作: status2=PcdWrite(1,writeData);//写数据,将数组writeData中的数写入到卡中 其中第一个参数 1 代表写入的地址为块1. 或者进行读卡操作: status2 = PcdRead(1, str);//读卡 其中第一个参数 1 代表读的地址为块1. 读卡后得到的数据存放于数组str中。 至此,已将RC522的基本操作介绍了一遍,明白了以上这些函数,就可以对卡进行一些初步的操作,可以再结合程序研究一下。 如果需要进一步了解RC522的工作原理,可以到网上搜资料,网上有很多的,也可以在下方留言,大家讨论讨论。Hjl

相关主题
相关文档
最新文档