我有一个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)到卡.