我正在尝试向ACR122U阅读器发送直接命令。 我最简单的是:FF 00 48 00 00
此命令用于返回固件版本。使用ACR122U工具,我可以看到它工作正常。 我正在尝试使用nfc_initiator_transceive_bytes发送它并获取固件版本。 这就是我在做的事情:
uint8_t abtCmd[] = {0xFF,0x00,0x48,0x00,0x00};
int res = nfc_initiator_transceive_bytes(
pnd,
abtCmd,
5,
pbtRx,
400,
2000
);
这总是返回-2。 nfc_initiator_transceive_bytes不正确吗?我究竟做错了什么? 谢谢!
PS:我在那里有\ xFF \ x00 \ x00 \ x00 \ x05,因为这是手册所说的(API_ACR122U_v1.4.pdf第6.1节直接命令)
我已经开始对libnfc进行调试了,我看到了这个:
debug libnfc.driver.acr122_usb TX:6f 0d 00 00 00 00 00 00 00 00 ff 00 00 00 08 d4 40 01 ff 00 48 00 00调试
libnfc.driver.acr122_usb RX:80 05 00 00 00 00 00 00 81 00 d5 41 27 90 00
我可以看到ff 00 00 00 所以我想我不必在发送直接命令时指定,但这仍然是返回此:
debug libnfc.chip.pn53x芯片错误:“命令不可接受” (27),返回错误:“无效的参数”(-2))
libnfc正在添加的十六进制是否正在弄乱这个?请任何人???
我也更改了初始代码。
我还尝试过使用nfc_target_send_bytes:
nfc_target_send_bytes(pnd,abtCmd,5,0);
这给了我一个分段错误。
答案 0 :(得分:2)
libnfc是NFC接口设备(如ACR122U)的NFC功能的抽象层。因此方法nfc_initiator_transceive_bytes()
已经处理了ACR122U设备特定的协议。
在您的情况下(您正在使用acr122_usb接口驱动程序),libnfc将直接与NFC CCID设备交互(由ACR122U公开),并将直接发送包含特定于读取器的命令的CCID帧(APDU包装的本机命令用于ACR122U内部的PN532 NFC控制器。
因此,对于nfc_initiator_transceive_bytes()
,这意味着libnfc将执行以下操作:
d4 40
开头),用于通过NFC向其他NFC设备发送数据。ff 00 00 00 08
开始)。6f 0d
开始)。答案是:
80 05
开头)。d5 41 27 90 00
)。d5 41 27
)。对于您而言,这实际上意味着您无法使用该方法发送ACR122U特定的APDU命令(ff 00 48 00 00
)以使用此方法获取读取器的固件版本。相反,你应该使用例如如果要使用此类命令,PC / SC可直接向阅读器发送APDU命令。