1

我们正在尝试通过 nfc-p2p、android-beam 和 snep 将大文件从 android 手机发送到 mikroprocessor。

这就是我们迄今为止所拥有的。我可以将 pn532(目标)与电话(启动器)连接起来。我的 android 应用程序使用 setNdefPushMessage 通过 nfc 发​​送 NdefMessage。一旦我点击电话(Beam-UI),它就开始与我的 pn532 上的 SAP 4 连接,并且在读取命令(tgGetData)之后我收到以下信息:

00 FF 86 7A D5 87 00 13 20 00 10 02 00 00 03 BD C1 01 00 00 03 B6 54 30 68 61 6C 6C 6F 20 64 61 73 20 69 73 74 20 65 69 6E 20 74 65 73 74 31 68 61 6C 6C 6F 20 64 61 73 20 69 73 74 20 65 69 6E 20 74 65 73 74 32 68 61 6C 6C 6F 20 64 61 73 20 69 73 74 20 65 69 6E 20 74 65 73 74 33 68 61 6C 6C 6F 20 64 61 73 20 69 73 74 20 65 69 6E 20 74 65 73 74 34 68 61 6C 6C 6F 20 64 61 73 20 69 73 74 20 65 69 6E 20 74 65 73 74

清理它: PN532 标头:00 FF 86 7A D5 87 00未设置 MI 位!
LLCP 标头:13 20 00从 SAP 32 到 4 的 I-Package
SNEP 标头:10 02 00 00 03 BD版本 10 请求 PUT len 0x3bd
NDEF 标头:C1 01 00 00 03 B6 54c1: start+EndMessage
Message ... 其余

我使用 MUI 128 完成了连接。

我的问题:它说 SNEP packae 的长度为 0x3BD 字节,但我只收到了这个短部分。此消息中没有任何指示它是否是拆分消息。

我的其余数据在哪里?我试图从 pn532 读取更多包,但没有。

** 编辑:经过一夜的尝试,我终于到了某个地方。至少有时有效:(从PN532的角度来看)
接收:连接
发送:连接完成[MUI = 128]
接收:SYMM
发送:SYMM
接收:I first Fragmented Data(如上所示)
发送:RR
接收:SYMM
发送:I SNEP:响应 CONTINUE
接收:RR
发送:I SNEP:请求 CONTINUE
接收:I 第二个碎片数据
发送:RR
接收:RR
发送:I SNEP:请求继续
接收:I 第三个数据片段

就像我说的,这只在某些时候有效。大多数情况下,我的 PN532 只响应错误代码 0x29 -> 发起方断开连接。所以问题是它可能是一个时间问题,还是在发送其余数据之前导致连接被丢弃的其他原因。

4

1 回答 1

1

SNEP 被设计为在 LLCP 数据链路连接(通过 CONNECT 建立的一对源和目标 SAP)之上运行的简单请求/响应协议。客户端请求服务器执行一个操作,服务器返回响应。通过 PUT 操作,客户端将数据附加到请求中。如果请求随后超过了 LLCP 信息 PDU 的最大信息单元大小,则客户端在适当的片段中发送请求。第一个片段通知服务器它应该准备从客户端接收的八位字节数。如果服务器能够接收到数据,它会用 Continue 响应回答第一个片段,如果数据大小超出服务器的能力,它可以用 Reject 响应停止交换。客户端收到 Continue 响应后,它将发送所有剩余的片段,而无需期待中间响应。服务器在收到所有请求数据后最终发送成功响应,如长度值所示。相同的原则适用于大型 SNEP 响应,只有 Continue 或 Reject 然后是请求消息(因为它们是由客户端发送的)。

于 2015-02-26T12:19:02.423 回答