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

时间:2011-09-09 09:24:05

标签: nfc mifare

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

在topaz和mifare超轻型时发生了同样的事情,当我试图获得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,第3部分(Mifare 1K)

ACR122U APDU命令

< FF CA 00 00 04

  

13 29 DF 97 90 00

这里显示了问题。它应该返回90 00-success

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   加载验证密钥成功

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

ACR122U读取二进制块

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

  

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

1 个答案:

答案 0 :(得分: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();
    }       
}

然后是验证码:

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)到卡。