试图理解我通过 TCP 连接发送/接收的 UART 数据包

Posted

技术标签:

【中文标题】试图理解我通过 TCP 连接发送/接收的 UART 数据包【英文标题】:Trying to understand UART packets I'm sending/receiving over a TCP connection 【发布时间】:2016-01-11 09:53:22 【问题描述】:

我正在处理一个以前的工程师开始的项目。基本上,我们使用 WiFi 模块将数据从微控制器发送到我们的服务器。

到目前为止,我是这样解释代码的:

-模块创建一个AP,用户连接到该AP。 - 然后用户输入一个 IP/URL,允许他们选择他们的 WiFi 网络。 - 模块现在通过选定的网络进行通信。 - 模块每秒将一个套接字连接到我们的 TCP 服务器并发送一个数据包。 -如果服务器有一个命令给客户端,它会用一个命令包来响应。

我的困惑是试图理解数据包结构。

客户端发出的数据包以 [ESC][Z]['Connection ID'][0][0][0][6] 开头。我假设这与预定义的 UART 布局有关,但我以前从未使用过 UART。

然后,如果有命令,服务器会响应一个同样以 [ESC][Z]['Connection ID'][0][0][0][6] 开头的数据包。但是,客户端随后会使用一个以 [ESC][Z]['Connection ID'] 开头的数据包进行响应,然后是数据。

那么,我的数据包标题中的“0006”是什么?为什么客户端响应中不需要这些值?我假设“ESC”是向网络外部发送数据所必需的,并且“Z”是预定义的标头。但是,如果我错了,请纠正我!

【问题讨论】:

可以是字节长度吗? IE。不。数据字节以下。客户端对命令的响应看起来就像一个确认。 我真的不知道为什么我没有立即想到这一点,是的,下面的代码是序列号,它达到 6 个字节。 WiFi 模块的文档列出了一些 UART 命令,但没有解释数据,这就是我如此迷惑的原因。非常感谢! 【参考方案1】:

标头中的数字只是标头字节之后数据包中剩余的字节数。 >

【讨论】:

嘿!这就是我的答案;-)

以上是关于试图理解我通过 TCP 连接发送/接收的 UART 数据包的主要内容,如果未能解决你的问题,请参考以下文章

Java:通过 TCP 发送/接收数据并从 UDP 接收图像

TCP窗口和缓冲区 - 检查我的理解?

在 Atmel SAM L21 Xplained Pro 上通过 UART 发送请求和接收响应的代码问题

协议的理解1

S3C2440-裸机篇-06 | UART数据发送接收实验(扫描模式)

使用 C++ 通过 TCP 发送文件,接收错误的大小