我从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)到卡。
| 归档时间: |
|
| 查看次数: |
8517 次 |
| 最近记录: |