ACR122U 发送直接命令返回 -2 和分段错误

Posted

技术标签:

【中文标题】ACR122U 发送直接命令返回 -2 和分段错误【英文标题】:ACR122U Sending Direct commands returning -2 and Segmentation fault 【发布时间】:2014-06-30 09:40:24 【问题描述】:

我正在尝试向 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 上打开了调试,我看到了这个:

调试 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 所以我想我在发送直接命令时不必指定,但这仍然返回:

调试 libnfc.chip.pn53x 芯片错误:“命令不可接受” (27),返回错误:“无效参数”(-2))

是不是 libnfc 添加的十六进制代码搞砸了?请问有人吗???

我也更改了初始代码。

我也尝试过使用 nfc_target_send_bytes:

nfc_target_send_bytes(pnd, abtCmd, 5,0);

这给了我一个分段错误。

【问题讨论】:

【参考方案1】:

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 将执行以下操作:

发送 PN532 命令 InDataExchange(以 d4 40 开头)通过 NFC 将数据发送到其他 NFC 设备。 将 PN532 本机命令包装到 APDU 中,以便通过 CCID 进行传输(以 ff 00 00 00 08 开头)。 将整个命令包装到 USB CCID 类帧中(以 6f 0d 开头)。

对于答案:

解开答案 CCID 帧(以 80 05 开头)。 解开响应 APDU (d5 41 27 90 00)。 解码本机 PN532 InDataExchange 响应 (d5 41 27)。

对您而言,这实际上意味着您不能使用该方法发送 ACR122U 特定的 APDU 命令 (ff 00 48 00 00) 以使用此方法获取读卡器的固件版本。相反,您应该使用例如PC/SC 直接向读写器发送 APDU 命令,如果你想使用这样的命令。

【讨论】:

感谢您的回答。有ps/sc发送apdu命令的示例代码吗? @AntonioCS 不,不在 C 中。

以上是关于ACR122U 发送直接命令返回 -2 和分段错误的主要内容,如果未能解决你的问题,请参考以下文章

ACR122U - 传输 APDU 时出现 InvalidDeviceStateException

禁用 ACR122U 上的默认红色 LED

acr122U NFC 标签读取

acr122U NFC标签读取

如何使用 ACR122U 验证 NTAG213

ACR122U NFC 点对点演示不工作