我正在尝试围绕libnfc构建一个C ++包装器,以便在我的Android和PN532 RFID模块之间进行通信。
这对我帮助很大:http://nfc-tools.org/index.php/Libnfc:APDU_example
此代码用于发送一个APDU命令,其中正文包含在http://localhost/cod_ign/index.php/news/localhost/cod_ign/index.php/news/create
中(我没有发送任何头字节等),并将响应读入message
。
问题:如果response
超过 262 字符,则会出现检测到缓冲区溢出错误。否则它的效果非常好。我甚至不认为NFC库会引发错误。
message
答案 0 :(得分:1)
262字节的限制是PN532 NFC芯片的硬限制。这是可以在一个InDataExchange命令中发送(和接收)的原始数据的最大大小。 libnfc明确强制实施方法nfc_initiator_transceive_bytes()
的此限制(请参阅the definition of abtCmd
in pn53x_initiator_transceive_bytes()
和definition of PN53x_EXTENDED_FRAME__DATA_MAX_LEN)。
您可以采取哪些措施来克服此限制,即构建您自己的ISO / IEC 14443-4块(使用InCommunicateThru,即nfc_initiator_transceive_bytes()
并关闭m_nfcDevice->bEasyFraming
。虽然每个帧仍然有限到263个字节(PN532实际上允许264个字节用于InCommunicateThru,但libnfc似乎将此限制为263个字节),然后您可以将扩展长度的APDU打包到多个ISO / IEC 14443-4 I块中。但是,您需要处理整个ISO / IEC 14443-4框架自己(这意味着你还必须照顾接收确认等)。
最后,由于其他通信端点是Android设备:许多Android设备不支持扩展长度的APDU。因此,即使您发送更长的APDU,您也可能无法在Android端接收和处理它们。另外,请注意,您应该发送符合ISO / IEC 7816-4中定义的结构的正确APDU(即具有有效标头和长度字段的APDU),否则在与某些设备通信时可能会遇到问题。