我想模仿电业PN532 NFC模块V3作为ISO/IEC1443-4A卡。我用Arduino Uno作为开发委员会。我还从Github下载了它们的库,并运行了一些示例来检查NFC模块是否正常工作(ISO读取)。在检查模块后,我熟悉了PN532应用程序说明,以及如何仿真ISO/IEC1443-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)我认为存在的问题是,当单片机将数据(写帧)发送到PN532芯片后,无法读取RDY寄存器,或者PN532在收到命令时不将其设置为1。这就是为什么它依赖于readResponse()函数
P.C -根据参考手册,RDY寄存器是“允许主机控制器知道PN532是否准备好接收或发回数据的专用寄存器”。
发布于 2021-01-07 21:39:36
检查用于与PN532通信的Arduino库支持的最大消息大小。最近,我也遇到了类似的情况--使用I2C在Arduino Uno和PN532之间进行通信。当我试图发送tgInitAsTarget命令时,我得到了一个超时,因为Arduino "Wire“库有一个32字节的缓冲区大小用于I2C通信,因此它无法将完整的命令发送到PN532 (尽管Adafruit/Seeed PN532库的调试输出输出了调试串行端口上的整个命令,这让人感到困惑)。
您可能需要黑入Wire/SPI Arduino库以增加缓冲区大小,或者编写您自己的I2C/SPI驱动程序。
https://stackoverflow.com/questions/61366501
复制相似问题