我正在与我的Ardunio和来自恩智浦的非接触式读写器MFRC522合作。我正在使用我的电子护照(欧盟标准),我想通过将Get Challenge APDU
命令发送到其RFID芯片来启动基本访问控制(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设备尝试了APDU命令,在Google Play商店尝试了 APDU调试应用程序,它运行正常!所以芯片或APDU命令本身不是问题。
答案 0 :(得分:0)
您是否尝试过发送T = 1块?
块格式PCB | CID | INF | EDC。这在http://read.pudn.com/downloads64/ebook/225463/M305_DESFireISO14443.pdf
中有所描述我成功将GetVersion发送到DESFire,但尝试获取下一帧(0xAF)时超时