问题标签 [lwip]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
11262 浏览

embedded - 通过 SPI 的芯片到芯片通信协议

我正在尝试通过 SPI 在一侧的微控制器和另一侧的多核 TI 芯片上的 ARM 处理器之间设计一种有效的通信协议。

所需协议的要求:

1 - 支持排队的多会话,因为我有多个发送/接收线程,所以将有多个应用程序使用此通信协议,我需要该协议来处理这些请求的排队(如果传输,我将继续保留缓冲区是队列,但我只需要协议来管理调度队列)。

2 - 通过 SPI 作为底层协议工作。

3 - 简单的错误检查。

在这个线程:“简单的串行点对点通信协议”中,PPP 是一个推荐的选项,但是我看到 PPP 只完成了部分工作。

我还发现了具有 PPP over serial 的轻量级 IP (LwIP) 项目(我假设我可以通过 SPI 使用它),所以我考虑了利用 TCP/UDP 等任何上层协议来完成其余工作的可能性所需的工作。幸运的是,我发现 TI 将 LwIP 作为其以太网软件的一部分包含在 starterware 包中,我认为这至少可以简化 TI 芯片方面的移植。

所以,我的问题是:

1 - 在这种通信方案中使用 LwIP 是否有效?由于点对点(芯片级)通信不需要的 IP 标头,这不会引入太多开销并杀死吞吐量吗?

2 - 驻留在 LwIP 中的 TCP 或任何类似协议是否会处理传输请求的排队,例如,如果我在通信通道忙于发送/接收另一个线程的另一个套接字(会话)的请求时通过套接字请求传输,这会由协议栈管理?如果是这样,哪个协议层管理它?

3 - 它们是比 LwIP 更有效的协议栈,满足上述要求吗?

更新 1:要考虑的更多要点

1 - SPI 是唯一可用的选项,我将它与可用的 GPIO 一起使用,以便在从机有数据要发送时向主机指示。

2 - 当前实现的(非标准)协议使用带有SPI的DMA,消息格式为《STX_MsgID_length_payload_ETX》,消息片段长度固定,但当前方案的主要缺点是主机等待消息的响应(不是片段)在发送另一个之前,这会杀死吞吐量并且不利用 SPI 的全双工特性。

3- 对这一点的改进是使用一种邮箱来接收碎片,因此长消息可以被更高优先级的消息打断,这样单个消息的碎片可以非顺序到达,但问题是这种设计导致使事情复杂化,特别是我没有太多可用资源供许多缓冲区使用控制器(主)端的邮箱方法。所以我认为这就像我通过为可能效率不高的简单点对点链接设计一个协议栈来重新发明轮子一样。

4- SPI之上一般可以使用什么样的更高级的协议来建立多个会话并解决消息的排队/调度?

更新 2:另一个有用的线程“嵌入式设备的良好串行通信协议/堆栈?

更新3:我看了一下Modbus协议,它似乎指定了应用层,然后直接指定了数据链路层进行串行线路通信,这听起来可以跳过面向网络的协议层的不必要开销。

对于预期目的,您认为这会比 LwIP 更好吗?此外,是否有像 LwIP 这样广泛使用的开源实现,但适用于 Modbus?

0 投票
1 回答
12346 浏览

udp - 在 lwip ARP 中创建 RAW UDP 连接

我目前正在努力创建一个简单的以太网传输协议。我有一个 SP605 Xilinx 评估板,我用它来调试我们项目的以太网部分。我试图蚕食这个例子,但到目前为止还没有成功。目前,通信只需要一种方式。目前,我正在尝试查看使用 netcat 发送的数据。我也打开了wireshark,看到系统反复询问:

2217 1323.697811000 Xilinx_00:01:02 广播
ARP 60 谁有 192.168.1.11?告诉 192.168.1.10

我可以看到主机回复:

2217 1323.697811000 Xilinx_00:01:02 广播
ARP 60 谁有 192.168.1.11?告诉 192.168.1.10

我觉得我的配置有一些问题,但无法弄清楚它是怎么回事。我认为这可能与没有设置 recv 处理程序有关,但我不确定。

下面是我正在使用的代码。lwip_init() 正在模仿 Xilinx 提供的示例中的调用。

0 投票
1 回答
917 浏览

c - 多播 UDP 在我的板上不起作用

我正在通过我的网络通过多播传输数据。
我正在将数据发送到 PC 和运行 freeRTOS 和 Lwip 的开发板。数据直接在 PC 上接收,但不在我的开发板上。
板上的代码是 PC 中代码的精确相关副本。
我尝试了各种涉及设置 NETIF_FLAG_IGMP 标志的解决方案,使用 netconn_join_leave_group 而不是 igmp_leave 或 igmp_join 但它们似乎都不起作用。
上述两种解决方案是我最好的选择,但它们让我失望了。我试图找出解决这个问题三天的方法,但无济于事。

0 投票
0 回答
424 浏览

android - lwIP是否支持4.0.0以下的安卓版本

这是我的第一个问题.. 我正在研究 lwIP.. 我有自己的 AP,可以连接我的站(在这种情况下,它是我的 android 手机)。我的手机连接到 AP,但是当我尝试在手机上访问其 HTTP 页面时,它显示一些连接身份验证错误。我检查了wireshark数据包,我可以看到正确的tcp握手发生了。但是一旦客户端发送GET数据包,我的AP就会发送重置数据包并且没有进一步交换数据包。我手机的Android版本是2.2.2 .. 另一部Android 4.0.4 的手机连接到这个AP,我也可以访问AP 的HTTP 页面。这是内置的lwIP,它只支持android 4.0及以上版本???

提前致谢... :)

0 投票
1 回答
886 浏览

tcp - 用于图像传输的 TCP 或 UDP

我在我的嵌入式平台上使用 lwip 堆栈。我已通过以太网将板连接到我的 PC。我在船上运行的应用程序将图像数据转储出以太网。PC 应用程序等待标题,在标题之后它解码数据并显示图像。

这仅用于调试目的。我的图像是 4MBytes,每秒接收 20 帧。所以它将是每秒 80MBytes 的数据。

建议使用 TCP 还是 UDP?

我尝试使用 TCP,但我的发送缓冲区已满,它将等待大约 200 毫秒以接收确认。同时,我丢失了来自传感器的 5-6 张图像。如果我使用 UDP 可以解决这个问题吗?

谢谢, 沙迪亚

0 投票
1 回答
4190 浏览

c - lwIP 远程登录示例?

我正在一个小型嵌入式设备上使用 lwIP 做一些实验。lwIP 附带了一些示例,但它们对我没有帮助。我想要实现的是一个服务器(使用 wlIP),它接受一个连接,读取几个命令,向连接的客户端发送几个答案,并且仅在连接中断或发送特殊的关闭命令时关闭。

所以有点类似于远程登录服务器。

是否有可用的 lwIP 示例来演示此行为?

谢谢!

0 投票
1 回答
1137 浏览

udp - Lwip 发送大于 MTU 的 udp 数据包,但我的电脑无法重组它们

我使用 lwip-1.4.1 和 stm32f407。
我的 lwip 可以向 pc 发送 udp 数据包,但是当 udp 数据包大于 MTU 时,我的 pc 将无法重新组装。
我使用wireshark 来检查这些数据包上下文,但是来自我的lwip 的分段udp 数据包看起来和正常的分段udp 数据包一样好。

以下链接是来自wireshark的记录:
https ://dl.dropboxusercontent.com/u/1321251/test.pcapng

谢谢

0 投票
2 回答
8749 浏览

tcp - LwIP Netconn API + FreeRTOS TCP 客户端缓冲区问题

我一直在尝试使用 STM32F4DISCOVERY 板上的 LwIP 修改 tcp 服务器示例。我必须写一个不一定要回复服务器响应的发件人。例如,它可以以 100 ms 的频率发送数据。

首先,TCP服务器的例子是这样的:

我修改了这段代码以获得客户端版本,这就是我到目前为止所得到的:

当写入操作有效时,netconn_write 发送其缓冲区中的内容。它不关心是否b_data为NULL。我已经通过添加行对其进行了测试b_data = NULL;

所以 Comm Operator 中的结果输出是这样的:

但是,我希望它像这样工作:

当我再次按下按钮之前等待大约 8 秒时,就会发生所需的写入操作。

由于 netconn_write 函数不允许写入缓冲区,我无法清除它。而 netconn_send 只允许用于 UDP 连接。

我需要一些指导来理解问题并为其生成解决方案。任何帮助将不胜感激。

0 投票
0 回答
180 浏览

browser - UPnP 设备中的 HTML 登录页面

我正在使用功能相当有限的嵌入式设备。但是它确实具有 lwip 堆栈以及 UPnP 支持。问题是当前从设备传输数据非常慢,我想尽量减少发送的 http 请求数量,例如在打开登录页面时。知道如何优化吗?理想的方式是一些压缩格式,但我猜浏览器不喜欢这样。

0 投票
0 回答
814 浏览

tcp - 无法接受使用原始 tcp (lwIp) 的连接

我正在尝试使用 lwip 包中的原始 tcp api 创建简单的应用程序。所以,这是我的代码的一部分:

我尝试连接到 22 端口,但我什么也没得到。从串行调试中,我得知 thrd_pcb 已成功进入侦听模式。为什么会这样?