我想将 Elechouse PN532 NFC 模块 V3 模拟为 ISO/IEC 1443-4A 卡。我使用 Arduino Uno 作为开发板。我还从Github下载了他们的库并运行了一些示例来检查 NFC 模块是否工作正常(ISO 卡读取)。检查模块后,我熟悉了 PN532 应用笔记,如何模拟 ISO/IEC 1443-4A 卡。所以,我使用tgInitAsTarget()函数来设置参数和 UID。但是这个函数返回超时错误。启用调试后,我得到以下输出:
write: 02
read: 03 32 01 06 07
Found chip PN532
Firmware ver. 1.6
write: 8C 00 00 00 00 00 00 40 01 FE 0F BB BA A6 C9 89 00 00 00 00 00 00 00 00 FF FF 01 FE 0F BB BA A6 C9 89 00 00 06 46 66 6D 01 01 10 00
0
我的 Arduino 划痕:
#include <PN532_SPI.h>
#include "PN532.h"
PN532_SPI pn532spi(SPI, 10);
PN532 nfc(pn532spi);
void setup(){
Serial.begin(115200);
nfc.begin();
uint32_t versiondata = nfc.getFirmwareVersion();
if (! versiondata) {
Serial.print("Didn't find PN53x board");
while (1); // halt
}
// Got ok data, print it out!
Serial.print("Found chip PN5"); Serial.println((versiondata>>24) & 0xFF, HEX);
Serial.print("Firmware ver. "); Serial.print((versiondata>>16) & 0xFF, DEC);
Serial.print('.'); Serial.println((versiondata>>8) & 0xFF, DEC);
Serial.println(nfc.tgInitAsTarget(1000));
}
void loop()
{}
如果我没有向tgInitAsTarget()传递任何参数,它就会卡在readResponse()函数中。
有什么想法吗?
1)PN532 模块正在工作 - 因为我能够获得固件版本(在这个例子中也是如此)或做其他事情。
2) 在终端输出的最后一行是tgInitAsTarget()函数的写入帧。但在第 57 页的应用说明中给出了所有参数。它们与那些在库函数中的不同。我尝试粘贴此应用笔记中的参数,但并没有解决问题
3)在我看来,问题是 MCU 向 PN532 芯片发送数据(写入帧)后,无法读取 RDY 寄存器- 或 PN532 收到此命令时未将其设置为 1。这就是为什么它停留在readResponse()函数上的原因
PC - 根据参考手册,RDY 寄存器是特定寄存器“它允许主机控制器知道 PN532 是否准备好接收或发送回数据”。