我正在使用嵌入8种不同游戏片段的Mifare标签创建游戏。我将使用带有MFRC522(库https://github.com/miguelbalboa/rfid)的Arduino NANO来实际读取标签,并使用ER301读/写器(使用电子阅读器软件)为它们分配游戏片数。我将创造每件作品的倍数,以防止由于破损或盗窃而造成的任何问题(由于这些是相当独特的游戏件)。由于将有8个不同的部分,每个部分4个副本,这将是32个UID以跟上。我宁愿为每个部分分配一个不同的编号,每个部分的编号也相同 - 所以只有8个数字可以跟上。
我的问题是 - 如何使用MFRC522读取某个块和扇区?
具体来说,第2区,第8区 - 因为这是游戏棋子编号的十六进制等值出现的地方(当它被指定为eReader软件和ER301编写器的产品名称时)。我理解使用MFRC522的库来读取UID,但这比我的理解更深入。
我已经为Arduino写了几个草图,但这是我对RFID世界的尝试,并且比我以前的Arduino项目要广泛得多。一旦我可以阅读特定的部门&阻止,Arduino NANO将输出一个二进制表示(在4个数字I / O上),其中放置了游戏片。
答案 0 :(得分:0)
您正在使用的库提供了专用方法来对MIFARE标记执行读写操作:
StatusCode MIFARE_Read(byte blockAddr, byte *buffer, byte *bufferSize);
StatusCode MIFARE_Write(byte blockAddr, byte *buffer, byte bufferSize);
由于您的描述(第2部分,第8部分)表明您使用的是MIFARE Classic标记,因此您还需要对标记进行身份验证才能执行读/写操作。因此,您还需要身份验证方法:
StatusCode PCD_Authenticate(byte command, byte blockAddr, MIFARE_Key *key, Uid *uid);
就像您使用该库读取UID一样
if (mfrc522.PICC_ReadCardSerial()) {
Serial.print(F("Card UID:"));
dump_bytes(mfrc522.uid.uidByte, mfrc522.uid.size);
}
你也可以访问这些读/写方法:
MFRC522::StatusCode status;
MFRC522::MIFARE_Key key;
byte buffer[18];
byte size = sizeof(buffer);
for (byte i = 0; i < MFRC522::MF_KEY_SIZE; ++i) {
key.keyByte[i] = 0xFF;
}
if (mfrc522.PICC_ReadCardSerial()) {
status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, 8, &key, &(mfrc522.uid));
if (status == MFRC522::STATUS_OK) {
status = mfrc522.MIFARE_Read(8, buffer, &size);
if (status == MFRC522::STATUS_OK) {
Serial.print(F("Data (block = 8): "));
dump_bytes(buffer, 16);
}
}
}
请注意,我假设使用密钥A将块8(=扇区2,块0)作为readbale,并且将密钥A设置为默认传输密钥FF FF FF FF FF FF
。如果您的其他读者更改了这些值,则需要相应地调整代码。此外,我使用伪方法dump_bytes(array, length)
来表示有趣的值是length
的第一个array
字节。实际打印这些值的实现取决于您。
顺便说一下。关于如何使用库进行读/写操作的完整示例实际上与库一起提供!所以你可以看看ReadAndWrite.ino如何使用该库。