我有一个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 操作失败
答案 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)到卡。