我将Arduino Mega 2560和SeeedStudio NFC屏蔽2.0拼凑在一起,并使用了以下库:
我正在尝试将一些文本写入MiFare Classic卡(1024位,32个分区,64位ID),但我一直收到错误:
Error.Block身份验证失败4。
以下是我使用的程序:
#include <SPI.h>
#include "PN532_SPI.h"
#include "PN532.h"
#include "NfcAdapter.h"
PN532_SPI interface(SPI, 10);
NfcAdapter nfc = NfcAdapter(interface);
void setup(void) {
Serial.begin(9600);
Serial.println("NDEF Reader");
nfc.begin();
}
void loop(void) {
Serial.println("\nScan a NFC tag\n");
if (nfc.tagPresent())
{
NfcTag tag = nfc.read();
tag.print();
Serial.println("Writing to tag...");
NdefMessage message = NdefMessage();
message.addTextRecord("Hello, Arduino!");
nfc.write(message);
}
delay(5000);
}
有人可以帮助我吗?
答案 0 :(得分:0)
此库仅适用于根据恩智浦关于使用MIFARE Classic作为NDEF标记的应用说明预先格式化的MIFARE Classic卡 1 (请参阅AN1304和{{3} } 和可以使用键A 2 编写。
您收到的错误表明,对于扇区1(通常是NDEF应用程序的第一个扇区),无法使用NDEF应用程序的密钥A进行身份验证(D3F7D3F7D3F7
)。因此,似乎MF Classic标签未预先格式化(例如,它可能处于传输配置中,并且所有键都设置为FFFFFFFFFFFF
)。
因此,你需要
E103
)。有关示例,请参见AN1304中的附录D. D3F7D3F7D3F7
,将GPB设置为40
,设置应用程序特定(密钥)密钥B并设置获得合理价值的条件。有关示例,请参见AN1304中的附录D.
1 )实际上这个库不遵循AN1304 / AN1305甚至读取的NDEF消息只适用于非常有限的子集 MIFARE Classic标签用作NDEF标签。
2 )用作NDEF标记的MIFARE Classic标记通常不能用公钥A写入,但是(如果有的话)只能用密钥B写入。因此,该库的写入功能是使用非常有限。
答案 1 :(得分:0)
我正在使用相同的库,并且有2个问题(也发布在github上)。也许有人可以帮我吗?抱歉,但是在github以外的地方找不到在线参考/文档。
问题1:关于写作
我正在尝试向MIFARE CLASSIC卡中写入内容。
我尝试使用其中一个:
ndefMessage.addTextRecord("hello, world");
or
ndefMessage.addUriRecord("http://arduino.cc");
但是我需要将新内容写入预写标签。我想在扇区3上执行此操作,因为扇区1已包含数据。有什么(简单的)方法可以做到这一点?到目前为止,它似乎写在扇区1上?
问题2:关于存储数据
另外,当我获得记录时,数据以开头。或.en(或正方形!) 我在github上看到了将数据打印为串行的示例,看起来不错,但是我需要将其存储到变量中。我有点设法做到这一点,但是看起来很丑。有更好的方法吗?
for(int i=0;i<message.getRecordCount();i++)
{
NdefRecord record = message.getRecord(i);
int payloadLength = record.getPayloadLength();
byte payload[payloadLength];
record.getPayload(payload);
String data = (char *)payload;
data = data.substring(3,data.length()-2);
show(data); //my own method to print to serial. Could be serial here.
}
非常感谢!