【发布时间】:2016-06-10 17:06:13
【问题描述】:
我正在使用我的 Ardunio 和 NXP 的非接触式读写器 MFRC522。我正在使用我的电子护照(欧盟标准),我想通过向其 RFID 芯片发送Get Challenge APDU 命令来启动基本访问控制 (BAC) 程序。
在 stackoverflow 中我找到了 APDU 00 84 00 00 08。为了在我的 Ardunio 项目中实现它,我使用了 miguelbalboa 库(访问 here)。在这个库中,有一种方法可以将数据发送到 RFID 芯片并存储其响应。但首先我得到了 ATQA,它是 ATR,相当于一张联系人卡片(在我的情况下是 00 08),然后是 SAK(在我的情况下是 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“
无论我做什么/更改/扩展,返回的 StatusCode 始终是
通讯超时
我不知道:我做错了什么?我现在怀疑这是一个编程错误,但可能是硬件问题?也许 MFRC522 上的 FIFO 缓冲区 不接受此命令,尽管我在其technical specs 中没有发现任何限制,但我在想:我所做的只是发送并根据 ISO/IEC 7816-4 标准使用 ISO/IEC 14443-4 非接触式 RFID 芯片接收字节……
编辑:我在智能手机中使用我的 NFC 设备和 Google Play 商店的 APDU 调试 应用程序尝试了 APDU 命令,它运行良好!所以芯片或APDU命令本身不可能是问题。
【问题讨论】: