ACR122U阅读器工具不支持NFC标签

sya*_*qah 5 nfc mifare

我从ACS获得了一个带有示例演示和工具的ACR122U NFC读取器SDK。然后,我试图运行ACR122U读取器工具,将mifare卡1K放在NFC读取器上以运行该工具。然后,一切都很好。但是,只有在获取ATS时,它才麻烦。说功能不支持。然后,因为它不能执行负载身份验证,身份验证,读取块等所有操作。意味着,PICC命令( T = CL仿真),用于无法运行的mifare经典存储卡。

它是发生在topaz和mifare ultralight上,当我尝试获得ATS时也无法支持。即使在与电话nokia c7连接时,该标签也不受支持。

那么,您能给出建议为什么不支持该功能吗?当我设置PICC操作参数时也遇到问题。下面是代码

ACR122U PICC接口已连接至:ACS ACR122 0

ACR122U获取固件版本固件版本:ACR122U207

ACR122U状态<FF 00 00 00 02 D4 04

D5 05 00 00 01 01 00 00 00 80 90 00错误代码:00字段:00(不存在且未检测到RF字段)目标数量:01逻辑数量:01接收中的比特率:00(106 kbps)比特率传输中:00(106 kbps)调制类型:00(ISO14443或Mifare)

ACR122U获取ATR

ATR值:3B 8F 80 01 80 4F 0C A0 00 00 03 06 03 00 01 00 00 00 00 6A有效协议:T = CL卡类型:ISO 14443A,Part3(Mifare 1K)

ACR122U APDU命令

<FF CA 00 00 04

13 29 DF 97 90 00

这里显示了问题。它应该返回90 00成功

ACR122U获取数据获取UID <FF CA 00 00 00

90 00 UID:13 29 DF 97

获取ATS <FF CA 01 00 00

6A 81不支持的功能

ACR122U负载验证密钥<FF 82 00 00 06 FF FF FF FF FF FF

90 00 <密钥结构:00 <密钥编号:00 <密钥:FF FF FF FF FF FF FF加载身份验证密钥成功

mifare经典存储卡的PICC命令(T = CL仿真)无法运行。

ACR122U读取二进制块

ACR122U身份验证<FF 86 00 00 05 01 00 04 60 00

63 00操作失败<FF B0 00 04 10 63 00操作失败

小智 2

我意识到这是一个老问题,但我正在研究同一张卡(Mifare 1K)。我的起始代码是:

public void start() throws CardReaderException {
    TerminalFactory factory = TerminalFactory.getDefault();
    List<CardTerminal> terminals;
    try {
        terminals = factory.terminals().list();
        //System.out.println("Terminals: " + terminals);
        // get the first terminal
        CardTerminal terminal = terminals.get(0);
        // establish a connection with the card
        card = terminal.connect("*");
        //System.out.println("card: " + card);
        channel = card.getBasicChannel();
    } catch (CardException e) {
        e.printStackTrace();
    }       
}
Run Code Online (Sandbox Code Playgroud)

然后是验证码:

private boolean authenticate(byte block) {
    byte [] setKey = new byte[]{(byte) 0xff, (byte) 0x82, 00, 01, 06, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF};
    byte [] authKey = new byte[] {(byte) 0xff, (byte) 0x86, 00, 00, 0x05, 0x01, 0x00, block, 0x60, 0};

    ResponseAPDU r;
    try {
        r = channel.transmit(new CommandAPDU(setKey));
        if ( r.getBytes()[0] != retOk) {
            return false;
        }

        r = channel.transmit(new CommandAPDU(authKey));
        if ( r.getBytes()[0] != retOk) {
            return false;
        }
    } catch (CardException e) {
        e.printStackTrace();
    }


    return true;
}
Run Code Online (Sandbox Code Playgroud)

经过身份验证后,我可以读取(0xFF,0xB0,0x00,块,0x10)或写入(0xFF,0xD6,0x00,块,0x10)到卡。