1
0
mirror of synced 2024-12-01 02:37:26 +01:00
Arduino-Aime-Reader/tools/ReaderTest/ReaderTest.ino

110 lines
3.1 KiB
Arduino
Raw Normal View History

2021-06-20 07:37:38 +02:00
#include <Wire.h>
#include <PN532_I2C.h>
#include <PN532.h>
#if defined(__AVR_ATmega32U4__) || defined(ARDUINO_SAMD_ZERO)
#pragma message "当前的开发板是 ATmega32U4 或 SAMD_ZERO"
#define SerialDevice SerialUSB
#elif defined(ARDUINO_ESP8266_NODEMCU_ESP12E)
#pragma message "当前的开发板是 NODEMCU_ESP12E"
#define SerialDevice Serial
2022-03-06 13:29:21 +01:00
#elif defined(ARDUINO_NodeMCU_32S)
#pragma message "当前的开发板是 NodeMCU_32S"
#define SerialDevice Serial
#else
#error "未经测试的开发板,请检查串口和阵脚定义"
#endif
2021-08-09 13:59:58 +02:00
2021-06-20 07:37:38 +02:00
PN532_I2C pn532i2c(Wire);
PN532 nfc(pn532i2c);
typedef union {
uint8_t block[18];
2021-06-20 07:37:38 +02:00
struct {
uint8_t IDm[8];
uint8_t PMm[8];
union {
uint16_t SystemCode;
uint8_t System_Code[2];
};
2021-06-20 07:37:38 +02:00
};
} Card;
Card card;
2021-06-20 07:37:38 +02:00
uint8_t AimeKey[6] = {0x57, 0x43, 0x43, 0x46, 0x76, 0x32};
uint8_t BanaKey[6] = {0x60, 0x90, 0xD0, 0x06, 0x32, 0xF5};
uint8_t MifareKey[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
#define M2F_B 1
void setup() {
2021-08-09 13:59:58 +02:00
SerialDevice.begin(38400);
SerialDevice.setTimeout(0);
while (!SerialDevice);
2021-06-20 07:37:38 +02:00
nfc.begin();
while (!nfc.getFirmwareVersion()) {
2021-08-09 13:59:58 +02:00
SerialDevice.println("Didn't find PN53x board");
2021-06-20 07:37:38 +02:00
delay(2000);
}
nfc.setPassiveActivationRetries(0x10);
nfc.SAMConfig();
}
void loop() {
uint8_t uid[4], uL;
delay(2000);
2021-06-20 07:37:38 +02:00
if (nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uL) && nfc.mifareclassic_AuthenticateBlock(uid, uL, 1, 1, AimeKey)) {
SerialDevice.println("Aime card!");
SerialDevice.print("UID Value:");
nfc.PrintHex(uid, uL);
SerialDevice.print("Block 2 Data:");
if (nfc.mifareclassic_ReadDataBlock(2, card.block)) {
nfc.PrintHex(card.block, 16);
}
2021-06-20 07:37:38 +02:00
return;
}
if (nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uL) && nfc.mifareclassic_AuthenticateBlock(uid, uL, 1, 0, BanaKey)) {
SerialDevice.println("Banapassport card!");
SerialDevice.print("UID Value:");
nfc.PrintHex(uid, uL);
SerialDevice.print("Block 2 Data:");
if (nfc.mifareclassic_ReadDataBlock(2, card.block)) {
nfc.PrintHex(card.block, 16);
}
2021-06-20 07:37:38 +02:00
return;
}
if (nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uL) && nfc.mifareclassic_AuthenticateBlock(uid, uL, M2F_B, 0, MifareKey)) {
SerialDevice.println("Default Key Mifare!");
if (nfc.mifareclassic_ReadDataBlock(2, card.block)) {
SerialDevice.print("Fake IDm:");
nfc.PrintHex(card.IDm, 8);
SerialDevice.print("Fake PMm:");
nfc.PrintHex(card.PMm, 8);
}
2021-06-20 07:37:38 +02:00
return;
}
if (nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uL)) {
SerialDevice.println("Unknown key Mifare.");
SerialDevice.print("UID Value:");
nfc.PrintHex(uid, uL);
2021-06-20 07:37:38 +02:00
return;
}
2022-03-06 13:29:21 +01:00
if (nfc.felica_Polling(0xFFFF, 0x01, card.IDm, card.PMm, &card.SystemCode, 200)) {
SerialDevice.println("Felica card!");
SerialDevice.print("IDm:");
nfc.PrintHex(card.IDm, 8);
SerialDevice.print("PMm:");
nfc.PrintHex(card.PMm, 8);
SerialDevice.print("SystemCode:");
card.SystemCode = card.SystemCode >> 8 | card.SystemCode << 8;
nfc.PrintHex(card.System_Code, 2);
2021-06-20 07:37:38 +02:00
return;
}
2021-08-09 13:59:58 +02:00
SerialDevice.println("Didn't find card");
2021-06-20 07:37:38 +02:00
}