从电子护照获得Arduino NFC MFRC522模块的挑战



我正在使用我的Ardunio和恩智浦的非接触式读写器MFRC522。我正在使用我的电子护照(欧盟标准),我想通过将Get Challenge APDU命令发送到其 RFID 芯片来启动基本访问控制(BAC) 程序。

在堆栈溢出中,我找到了 APDU00 84 00 00 08.为了在我的Ardunio项目中实现它,我使用miguelbalboa库(访问这里)。在这个库中,有一种将数据发送到RFID芯片并存储其响应的方法。但首先我得到 ATQA,它是相当于联系人卡片的 ATR(在我的情况下是00 08),然后是 SK(在我的情况下是20)。图书馆注意到它在我的电子护照中检测到符合ISO/IEC 14443-4的PICC标准,最后我得到了它的随机UID。下一步我尝试接受挑战

// create MFRC522 instance „mfrc522“
// Init SPI bus 
// Init MFRC522 device
// Select RFID chip (PICC_Select method)
byte sendData[] = {0x00, 0x84, 0x00, 0x00, 0x08};
byte backLen = 10; // I know that the answer (= the challenge) is 8 bytes long + 2 bytes for SW1 + SW2
byte sendLen = sizeof(sendData);
byte backData[backLen];
MFRC522::StatusCode status = mfrc522.PCD_TransceiveData(sendData, sizeof(sendData), backData, &backLen);
// Print „status“

无论我做什么/更改/扩展,返回的状态代码始终是

通信超时

我找不到:我做错了什么?我现在怀疑这是编程错误,但也许是硬件问题?也许MFRC522上的FIFO 缓冲区不接受此命令,尽管我没有在其技术规格中发现任何限制,但后来我在想:我所做的只是使用 ISO/IEC7816-4标准发送和接收字节与ISO/IEC 14443-4非接触式 RFID 芯片......

编辑:我用智能手机中的NFC设备和Google Play商店的APDU调试应用程序尝试了APDU命令,它工作正常!因此,芯片或APDU命令本身不会成为问题。

您是否尝试过发送 T=1 块?

块格式PCB|CID|INF|EDC.这在 http://read.pudn.com/downloads64/ebook/225463/M305_DESFireISO14443.pdf 中进行了描述

我成功地将 GetVersion 发送到 DESFire,但它在尝试获取下一帧时超时 (0xAF)

最新更新