PN532 NFC RFID模块引脚配置及使用说明详解
PN532是一个基于Arduino的简单NFC RFID模块,该模块因其功能而与其它RFIC模块和设备略有不同。PN532功能描述了通过NFC芯片实现的现代通信功能。单模块具有UART、SPI、I2C三种通信方式。
最常见的是,PN532设备与Arduino接口,因为它在Arduino IDE中有官方库。该模块用于执行多种功能,例如数据发送、RFIC卡和RFID读取器。该器件只能在5-7cm的近距离工作,但由于其功耗低且速度快,大多数移动公司开始将该模块集成到其设备中以实现多种功能。
引脚配置
PN532提供多种通讯方式。因此,它的引脚数量比其他RFID要多一些,但在电路中,一次只能使用一些引脚。引脚图显示了所有这些引脚:
引脚配置功能说明如下:
PIN | 功能描述 |
---|---|
VCC | VCC为整个设备供电。 |
GND | GND引脚有助于与电源和Arduino/微控制器建立公共接地。 |
UART | UART通信引脚。 |
TXD | UART 通信需要两个通信引脚,第一个用于发送数据,第二个用于接收数据。TXD有助于传输数据。 |
RXD | RXD引脚是UART通信的数据接收引脚。 |
I2C | I2C通信引脚。 |
SDA | I2C通信需要一个引脚来进行数据传输和接收。因此,PN532模块中SDA是I2C通信的数据引脚。 |
SCL | SCL是I2C通信的时钟引脚。数据根据时钟脉冲在设备之间传输。 |
IRQ | IRQ 引脚是一个中断引脚,有助于I2C通信产生中断以引起Arduino/微控制器的注意。 |
RST | RST是复位引脚,有助于通过外部信号复位设备。在 PN532中,该设备用于I2C通信。 |
SPI | SPI通信引脚。 |
MOSI | SPI 通信需要4个引脚用于数据通信。因此,MOSI是一个Master Out Slave In引脚,它有助于将数据从Arduino传输到PN532。 |
MISO | MISO是一个Master In Slave Out,它有助于将数据从PN532传输到Arduino。 |
SS | SS为从机选择引脚;它激活从站(PN532)的SPI通信。 |
SCK | 它是一个时钟引脚,有助于根据时钟脉冲收发数据。 |
功能特性
PN532设备的尺寸可能较小,但该设备的功能列表有很大不同,并且根据现代应用而定。PN532提供的功能大多仅在特定设备中可用,并且由于市场需求而日益增加。其功能特性包括:
- 允许两个模块在特定距离内相互交换任何类型的数据。
- 使用13.56MHz频率,由于范围小,可以合法使用。
- PN532模块可用作NTAG/RFID卡标签和读取器。
- 该器件可在3.3V的SPI电压和5V的其他通信电压下工作。
- 板载开关有助于更改通信协议。
- 一个芯片内有3种协议与之建立接口。
- 该设备具有板载天线,尺寸较小,有助于将其固定在设备的任何位置,而不会占用太多空间。
- 这支持Android手机的NFC。
使用方法
PN532最常见和官方的建议是将其与Arduino Broads一起使用。Arduino中对此模块进行了大量的工作和研究。首先将其与Arduino结合使用,了解模块应在何处与Arduino连接。PN532模块使用SPI、I2C和UART协议。首先,将其与外部模块的以下引脚连接。
对于Arduino UNO:
-
SPI
- SS – D10
- MOSI – D11
- MISO – D12
- SCK – D13
-
I2C
- SCL – A5, D19
- SDA – A4, D18
-
UART
- RX – D0
- TX – D1
另一个Arduino板的通信引脚有所不同,可在其官方网站上找到。这里一切都将根据Arduino UNO进行。将所有通信引脚与PN532连接后,它还有一个拨动开关。拨动开关模式一次激活单个协议。
开关1 | 开关2 | 协议 |
---|---|---|
0 | 0 | UART |
1 | 1 | SPI |
1 | 0 | I2C |
PN532与Arduino连接
以上所有讨论的说明和细节都是针对硬件方面的。要使PN532完全运行,请使用以下Arduino编程。
使用Arduino编程
在编程时,Arduino总是依赖PN532的库。该库允许开发人员根据电路板更改引脚。
#include <Adafruit_PN532.h>
协议
使用PN532库,Arduino将无法通信。要使用I2C和SPI协议,以下库将帮助设备进行通信。
#include <Wire.h> #include <SPI.h>
Wire库用于I2C通信。这两种协议几乎在每个板上都有固定引脚。要定义使用任何协议而不是硬件串行,以下对象将有所帮助:
Adafruit_PN532 nfc(PN532_SS); Adafruit_PN532 NFC(PN532_IRQ,PN532_RESET);
如果使用默认值,SPI引脚将按原样使用PN532_SS,但对于I2C协议,请将PN532_IRQ和PN532_RESET替换为其数字PIN。有时,板卡可能会导致通信问题。因此,为了避免SPI通信中的问题,以下函数有助于定义引脚。
Adafruit_PN532 nfc(PN532_SCK、PN532_MISO、PN532_MOSI、PN532_SS);
PN532_SCK、PN532_MISO、PN532_MOSI和PN532_SS定义引脚编号顺序,应替换为新的PIN。上述所有讨论都是关于通过库选择协议,但PN532的激活和使用说明对于所有协议都是相同的。
数据通讯初始化
在PN532中编程的第一件事也是最重要的就是初始化PN532,不初始化有时IDE不会报错。那么开发人员就很难确定模块不工作的原因。
nfc.begin(); // 用于初始化PN532 nfc.SAMConfig(); // 它将把卡设置为读卡器模式
通讯方式和所有协议仅用于初始化模块。为了传输和接收数据,一切都应该在编程中初始化。NFC 模块可以执行多种不同的方法。
使用Arduino的NFC RFID示例
这里将PN532定义为NTAGS的读取器。每张NTAGS卡都有一个可通过PN532查看和更改的代码。为此,需要对不同的功能进行编程。首先,将Arduino模块的引脚连接到I2C引脚D18和D19。之后,上传以下代码。
带有库的Arduino代码如下:
#include <Wire.h> #include <Adafruit_PN532.h> #define PN532_IRQ (2) #define PN532_RESET (3) Adafruit_PN532 nfc(PN532_IRQ, PN532_RESET); void setup(void) { Serial.begin(115200); nfc.begin(); uint32_t versiondata = nfc.getFirmwareVersion(); if (! versiondata) { Serial.print("Didn't find PN53x board"); while (1); } nfc.SAMConfig(); } void loop(void) { uint8_t success; uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 }; uint8_t uidLength; success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength); if (success) { Serial.println("Found an ISO14443A card"); Serial.print(" UID Length: "); Serial.print(uidLength, DEC); Serial.println(" bytes"); Serial.print(" UID Value: "); nfc.PrintHex(uid, uidLength); Serial.println(""); if (uidLength == 7){ uint8_t data[32]; Serial.println("Seems to be an NTAG2xx tag (7 byte UID)"); for (uint8_t i = 0; i < 42; i++){ success = nfc.ntag2xx_ReadPage(i, data); Serial.print("PAGE "); if (i < 10){ Serial.print("0"); Serial.print(i); } else{ Serial.print(i); } Serial.print(": "); if (success){ nfc.PrintHexChar(data, 4); } else{ Serial.println("Unable to read the requested page!"); }}} else { Serial.println("This doesn't seem to be an NTAG203 tag (UUID length != 7 bytes)!"); } Serial.println("\n\nSend a character to scan another tag!"); Serial.flush(); while (!Serial.available()); while (Serial.available()) { Serial.read(); } Serial.flush(); } }
上传代码之后,现在将卡放在模块附近。串行监视器将能够显示卡代码。NTAGS卡可用于任何行业的安全目的。上述代码仅有助于读取卡代码,但卡可以通过 PN532 通过不同的编程进行编程。NTAGS的安全性在每个版本中都略有不同。每个模块都有不同的安全位,但所有这些都可与PN532一起使用。大多数NTAGS可与NTAG203、NTAG213、NTAG215和NTAG2016配合使用。
封装设计参数
总结
PN532是一款由NXP Semiconductors开发的NFC(近场通讯)控制器芯片,它能在各种应用和设备中实现NFC通讯。其主要功能特点包括:
- 支持多种NFC通信协议,包括ISO/IEC 14443 Type A和B、FeliCa以及ISO/IEC 18092(NFCIP-1)。
- 常用于非接触式支付系统、门禁控制、身份识别、数据交换以及其他NFC相关应用。
- 允许设备在近距离(通常几厘米内)进行数据交换。这种技术通常用于非接触式支付系统、公共交通卡以及需要安全便捷数据交换的应用。
- PN532与多种微控制器和系统兼容,因此在将NFC功能集成到各种设备中时成为热门选择。
- 支持点对点通讯,使设备能够直接交换数据,无需专用NFC读卡器。
- 广泛应用于各种NFC读卡器、NFC启用的智能手机以及其他与NFC相关的设备。
- 包含安全功能,确保通讯的安全性,包括加密和认证协议,以防止未经授权的对敏感数据的访问。
不难看出,PN532在推动NFC技术的应用方面发挥了重要作用,并已成为许多NFC启用设备和应用中的标准组件。它提供了一种可靠、方便的无线通讯方式,为不同行业的多种用例提供了可能性。