ACR122U读卡器工具无法支持NFC标签

我有一个ACR122U NFC读卡器SDK,带有从ACS获取的示例演示和工具.然后,我正在尝试运行ACR122U读卡器工具将mifare卡1K放在NFC读卡器上运行该工具.然后,一切都还好.但是,只有当它得到ATS它就麻烦了..说不支持的功能.然后,因为那不能做加载认证,认证,读取块和所有的东西.Means,PICC命令( T = CL Emulation)用于mifare经典存储卡无法运行.

这是发生在topaz和mifare超轻的情况下,当我试图获得ATS.even时连接电话诺基亚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
Error Code: 00
Field: 00 (RF Field is NOT Present and NOT Detected)
Number of Target: 01
Logical Number: 01
Bit Rate in Reception: 00 (106 kbps)
Bit Rate in Transmission: 00 (106 kbps)
Modulation Type: 00 (ISO14443 or Mifare)

ACR122U获取ATR

ATR Value: 3B 8F 80 01 80 4F 0C A0 00 00 03 06 03 00 01 00 00 00 00 6A
Active Protocol: T=CL
Card Type: 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
Function not supported

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

90 00
< Key Structure: 00 < Key Number: 00
< Key: FF FF FF FF FF FF
Load Authentication Keys Success

用于mifare经典存储卡的PICC命令(T = CL Emulation)无法运行.

ACR122U读取二进制块

ACR122U认证
< FF 86 00 00 05 01 00 04 60 00

63 00
Operation failed
< FF B0 00 04 10
63 00
Operation failed

最佳答案 我意识到这是一个老问题,但我正在使用同一张卡(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();
    }       
}

然后是验证码:

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;
}

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

点赞