历史上的今天
返回首页

历史上的今天

今天是:2024年11月11日(星期一)

正在发生

2019年11月11日 | STM32 MFRC522 IC读卡 程序及原理图

2019-11-11 来源:eefocus

【RC522芯片简介】


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模式,有利于减少连线,缩小PCB板体积,降低成本。


【RFID模块简介】

RC522模块采用Philips MFRC522芯片设计读卡电路,使用方便,成本低廉,适用于设备开发、读卡器开发等高级应用的用户、需要进行射频卡终端设计/生产的用户。本模块可直接装入各种读卡器模具。模块采用电压为3.3V,通过SPI接口简单的几条线就可以直接与用户任何CPU主板相连接通信,可以保证模块稳定可靠的工作、读卡距离远.

原理图如下:

PCB图如下:


以下为.h文件:


#ifndef __RC522_H

#define __RC522_H

#include "stm32f10x.h"

 

/////////////////////////////////////////////////////////////////////

//MF522命令字

/////////////////////////////////////////////////////////////////////

#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寄存器定义

/////////////////////////////////////////////////////////////////////

// PAGE 0

#define     RFU00                 0x00    

#define     CommandReg            0x01    

#define     ComIEnReg             0x02    

#define     DivlEnReg             0x03    

#define     ComIrqReg             0x04    

#define     DivIrqReg             0x05

#define     ErrorReg              0x06    

#define     Status1Reg            0x07    

#define     Status2Reg            0x08    

#define     FIFODataReg           0x09

#define     FIFOLevelReg          0x0A

#define     WaterLevelReg         0x0B

#define     ControlReg            0x0C

#define     BitFramingReg         0x0D

#define     CollReg               0x0E

#define     RFU0F                 0x0F

// PAGE 1     

#define     RFU10                 0x10

#define     ModeReg               0x11

#define     TxModeReg             0x12

#define     RxModeReg             0x13

#define     TxControlReg          0x14

#define     TxAutoReg             0x15

#define     TxSelReg              0x16

#define     RxSelReg              0x17

#define     RxThresholdReg        0x18

#define     DemodReg              0x19

#define     RFU1A                 0x1A

#define     RFU1B                 0x1B

#define     MifareReg             0x1C

#define     RFU1D                 0x1D

#define     RFU1E                 0x1E

#define     SerialSpeedReg        0x1F

// PAGE 2    

#define     RFU20                 0x20  

#define     CRCResultRegM         0x21

#define     CRCResultRegL         0x22

#define     RFU23                 0x23

#define     ModWidthReg           0x24

#define     RFU25                 0x25

#define     RFCfgReg              0x26

#define     GsNReg                0x27

#define     CWGsCfgReg            0x28

#define     ModGsCfgReg           0x29

#define     TModeReg              0x2A

#define     TPrescalerReg         0x2B

#define     TReloadRegH           0x2C

#define     TReloadRegL           0x2D

#define     TCounterValueRegH     0x2E

#define     TCounterValueRegL     0x2F

// PAGE 3      

#define     RFU30                 0x30

#define     TestSel1Reg           0x31

#define     TestSel2Reg           0x32

#define     TestPinEnReg          0x33

#define     TestPinValueReg       0x34

#define     TestBusReg            0x35

#define     AutoTestReg           0x36

#define     VersionReg            0x37

#define     AnalogTestReg         0x38

#define     TestDAC1Reg           0x39  

#define     TestDAC2Reg           0x3A   

#define     TestADCReg            0x3B   

#define     RFU3C                 0x3C   

#define     RFU3D                 0x3D   

#define     RFU3E                 0x3E   

#define     RFU3F          0x3F

 

/////////////////////////////////////////////////////////////////////

//和MF522通讯时返回的错误代码

/////////////////////////////////////////////////////////////////////

#define MI_OK                 0

#define MI_NOTAGERR           (1)

#define MI_ERR                (2)

 

#define SHAQU1 0X01

#define KUAI4 0X04

#define KUAI7 0X07

#define REGCARD 0xa1

#define CONSUME 0xa2

#define READCARD 0xa3

#define ADDMONEY 0xa4

 

//

//#define  spi_cs 1;

//sbit  spi_ck=P0^6;

//sbit  spi_mosi=P0^7;

//sbit  spi_miso=P4^1;

//sbit  spi_rst=P2^7;

#define SPIReadByte() SPIWriteByte(0)

u8 SPIWriteByte(u8 byte);

void SPI1_Init(void);

 

#define SET_SPI_CS  (GPIOF->BSRR=0X01)

#define CLR_SPI_CS  (GPIOF->BRR=0X01)

 

 

 

#define SET_RC522RST  GPIOF->BSRR=0X02

#define CLR_RC522RST  GPIOF->BRR=0X02

 

 

/***********************RC522 函数宏定义**********************/

#define          RC522_CS_Enable()         GPIO_ResetBits ( GPIOB, GPIO_Pin_12 )

推荐阅读

史海拾趣

FTDI公司的发展小趣事

FTDI公司(Future Technology Devices International)在电子行业中的发展充满了多个关键节点和故事,以下是五个相关故事,每个故事均基于事实描述:

1. 创立与早期发展

FTDI公司成立于1992年3月13日,由弗雷德·达特(Fred Dart)创立。起初,公司专注于为个人电脑市场提供服务,其首发产品是针对主板芯片组的解决方案。这些产品被成功应用于IBM的AMBRA和PS/2系列个人电脑上,为当时的计算机技术发展做出了贡献。这一时期的成功为FTDI奠定了坚实的基础,并展示了其在芯片设计领域的初步实力。

2. USB桥接芯片领域的崛起

随着计算机技术的快速发展,FTDI敏锐地捕捉到了USB接口技术的潜力。公司开始专注于USB桥接芯片的研发与生产,并逐渐在这一领域崭露头角。其MM232R和USB-COM232-PLUS1等接口产品因其出色的连接性和兼容性而广受好评。FTDI的USB桥接芯片广泛应用于汽车电子、IOT互联网、工业产品、医疗设备、新能源以及高端消费电子等多个领域,逐步确立了其在全球USB桥接芯片市场的领先地位。

3. 全球化布局与业务拓展

为了进一步扩大市场份额,FTDI积极实施全球化战略。公司在新加坡设立了业务运营总部,并在全球范围内建立了完善的销售和服务网络。这一布局不仅提升了FTDI在全球市场的竞争力,还为其带来了更多的商业机会。同时,FTDI不断拓展产品线,满足不同领域客户的需求,进一步巩固了其在USB桥接芯片领域的市场地位。

4. 并购与合作

在发展过程中,FTDI也通过并购与合作的方式不断壮大自身实力。例如,在2022年,FTDI被电连技术通过发行股份及支付现金的方式收购,成为电连技术的控股子公司。这次并购不仅为FTDI带来了更多的资金和资源支持,还为其未来的发展注入了新的动力。同时,FTDI也与其他行业巨头建立了广泛的合作关系,共同推动电子行业的发展。

5. 技术创新与市场引领

FTDI始终将技术创新作为公司发展的核心驱动力。公司不断投入研发资源,推出具有自主知识产权的新产品和技术解决方案。这些创新成果不仅提升了FTDI的产品竞争力,还为其在全球市场树立了良好的品牌形象。同时,FTDI还积极参与行业标准的制定和推广工作,致力于推动整个电子行业的技术进步和发展。

以上五个故事展示了FTDI公司在电子行业中的发展历程和关键节点。从创立初期的默默无闻到如今的全球领先企业,FTDI凭借其敏锐的市场洞察力、强大的技术实力和不懈的创新精神,在电子行业中书写了属于自己的辉煌篇章。

Aavid Thermalloy公司的发展小趣事

Aavid Thermalloy公司是一家专注于热管理解决方案的公司,以下是关于该公司发展的五个相关故事:

  1. 公司成立和早期发展: Aavid Thermalloy公司成立于1964年,总部位于美国新罕布什尔州。最初,公司主要从事铝材料加工和制造业务,为电子行业提供散热器和热管理解决方案。在成立初期,公司注重产品质量和技术创新,逐渐赢得了客户的信赖和认可。

  2. 技术创新和产品扩展: 随着市场需求的变化和技术的进步,Aavid Thermalloy不断进行技术创新,并逐步扩展产品线。公司不仅提供各种类型的散热器产品,还涉足导热材料、热管、热板等领域,为客户提供全方位的热管理解决方案。

  3. 国际市场拓展: Aavid Thermalloy致力于拓展国际市场,与全球各地的客户建立了广泛的合作关系。公司产品远销美国、欧洲、亚洲等地区,销售网络覆盖了全球主要的电子市场。同时,公司在一些国家设立了分支机构和办事处,加强了对当地市场的服务和支持。

  4. 合并和收购: 为了进一步扩大业务规模和增强竞争力,Aavid Thermalloy进行了一系列的合并和收购活动。公司通过并购具有相关技术和市场资源的企业,扩大了产品线和市场份额,加强了在热管理领域的领先地位。

  5. 可持续发展和未来展望: Aavid Thermalloy公司致力于可持续发展,注重环境保护和社会责任。公司通过采取节能减排、提高资源利用率等措施,努力降低对环境的影响。未来,公司将继续致力于技术创新和产品升级,为客户提供更优质的产品和服务,推动热管理行业的发展和进步。

DURABLE公司的发展小趣事

在电子材料领域取得初步成功后,DURABLE公司意识到市场拓展的重要性。公司开始积极拓展海外市场,与全球知名电子产品制造商建立合作关系。通过深入了解不同地区的市场需求和消费者偏好,DURABLE不断调整产品策略,推出符合当地市场需求的产品。同时,公司还加强了与渠道合作伙伴的合作,通过完善的销售网络和售后服务体系,提升了产品的市场占有率和客户满意度。

Elektron公司的发展小趣事

随着业务的不断拓展和市场的不断扩大,Elektron公司逐渐将目光投向了全球市场。公司在全球范围内设立了多个代表处和分支机构,与当地的合作伙伴建立了紧密的合作关系。通过全球化战略的实施,Elektron成功进入了焊接设备、等离子切割设备和电池服务设备的高端市场,并成为了世界市场的领导者之一。

Amerace Electronic Components公司的发展小趣事

Amerace Electronic Components公司注重企业文化的塑造和传播。公司倡导团结、创新、诚信、共赢的企业精神,鼓励员工积极进取、勇于创新。同时,Amerace还注重员工福利和职业发展,为员工提供良好的工作环境和晋升机会。这种积极向上的企业文化使得Amerace的员工队伍保持稳定和高效,为公司的发展提供了有力保障。

这些故事展示了Amerace Electronic Components公司在电子行业中的发展历程和取得的成就,突显了其在技术创新、全球市场扩张、质量管理、环保理念践行以及企业文化塑造等方面的努力和成果。

台湾三礼(3L)公司的发展小趣事

进入21世纪,随着全球电子产业的快速发展,三礼公司看到了中国内地市场的巨大潜力。2006年,公司决定扩大在中国内地的生产规模,投资建构了40,000平方米的厂房,并成立了专业客制化产品厂——和瑞电子(3LQ)。这一举措不仅提升了公司的生产能力,还使得产品更加符合市场需求,进一步巩固了公司的市场地位。

问答坊 | AI 解惑

嵌入式开发站点集锦

国内有关嵌入式开发的论坛 电子产品世界的论坛[2004年09月30日] http://bbs.edw.com.cn/index.asp 恒颐高科论坛[2004年09月30日] http://www.hyesco.com/forum/index.asp 国内站点 华恒公司的主页,里面有很多的相关资料,有待大家去发现 http://ww ...…

查看全部问答>

介绍一种新型“数字温湿度传感器”

这是采用双线串行数字接口的温湿度传感器,与单片机接口非常方便,时序也很简单。 测量的温度/湿度精度很高。我们使用以后觉得很好用,所以,介绍给大家。 特点如下: 相对湿度和温度测量 _ 兼有露点 _ 全标定输出,无需标定即可互换使用 ...…

查看全部问答>

EEWORLD平台需要大家共同建设,单靠几个人很难做好(一段关于芯币制度的对话)

以下是一段与EEWORLD网友关于芯币制的对话,从中更为深切地感受到EEWORLD的发展靠大家: lian为EEWORLD论坛单片机板块版主njlianjian,单片机培训的核心人物。 lian说: 论坛下载能不能取消掉芯币啊       因为如果我想下载 ...…

查看全部问答>

wince 打2008年的补丁出错

wince打了2008年的补丁,怎么连基本的sysgen都出错呢? 错误提示 tbtcore无法nmake,不知道有谁碰到过这种情况,不知道打2007年的补丁能不能正常编译通过,不过现在微软网站不提供2007年的补丁了,那位朋友有,能共享一下。。。。。。…

查看全部问答>

?哪里有Wince5.0 Pocket PC SDK

微软下载中心验证我的操作系统不是正版下不下来,请哪为高手帮忙?急需非常感谢!!!!…

查看全部问答>

各位手上有什么比较好用的bootloader吗?要求可以将nk.bin文件下载到内存中运行。

有的话给我发推荐一份啊,如果有时间的话麻烦给我发一份。 我的邮箱cy757#21cn.com(#改为@)…

查看全部问答>

大整数的转换问题

如何实现 大整数 999999999999 与 0xXX 0xXX 的十六进制数组 之间的互换? 请高手们指教~…

查看全部问答>

如何对付SMT的上锡不良

  波峰面:波的表面均被一层氧化皮覆盖﹐它在沿焊料波的整个长度方向上几乎都保持静态﹐在波峰焊接过程中﹐PCB接触到锡波的前沿表面﹐氧化皮破裂﹐PCB前面的锡波无皲褶地被推向前进﹐这说明整个氧化皮与PCB以同样的速度移动波峰焊机。  焊点成 ...…

查看全部问答>

STM8S有相应的低电压版本的吗?

有个项目用了STM8S105,电池供电(3节镍氢),系统中带DC-DC给功放供电,当DC-DC启动时或输出功率较大时,经常引起MCU复位。 STM8S有没有相应的低电压版本(即管脚,软件都一样,只是工作电压不同的)?…

查看全部问答>

STM32rtc有电池,确认起振后是不是就后顾无忧了?

                                 我的问题是如果我有外部电池给RTC供电,只要在厂测试RTC已经工作了后,只要电池有电就不会出现晶振不起振的情况吗 ...…

查看全部问答>