STM32 LwIP PPPos - 入门
STM32 LwIP PPPos - getting started
我正在努力(就像许多其他人一样)开始使用 STM32 的 LwIP over PPPos(ppp over serial)。我本可以早点结束这句话,因为即使没有 PPPos,我也很难理解从哪里开始。
我有read, and read, and read。他们的官方主页、wiki、大量论坛,并试图为其他平台消化 github 示例。但我仍然很难找到从哪里开始的线索。
网上似乎很少(none?)示例带我完成了整个过程。我真的不明白。物联网世界正在爆炸式增长。所以我真的认为有一些 hello world 示例会很“容易”。
我目前拥有的:
- 我可以通过 AT 命令使用的 LTE 调制解调器
- 在我的 nucleo (F446ze) 板上运行的一个小应用程序,它可以使 LED 闪烁,通过 UART3 与我的 PC 通信,以及通过 UART2 与 LTE 调制解调器通信
- 玩过免费的 RTOS,这部分非常容易熟悉
但我不想使用 AT 命令(和 AT+CMQTT 命令)进行笨拙的互联网通信,而是希望依靠适当的 TCP/IP 堆栈。将 LTE 调制解调器设置为数据模式 (PPP),并让 LwIP 接管 TCP/IP 堆栈。
2021 年还是很复杂吗?还是我完全看错了方向?有没有人可以指出我正确的方向?
我也已经有 freertos 了。我不介意使用它。我也不介意没有。我只是在寻找一种无需完全逆向工程 LwIP 堆栈即可开始使用 LwIP 的方法。
从上到下,你有你的应用程序代码,它最终可能想要与一些服务器交谈:解析 DNS 名称,打开一个 tcp 连接等。这就是 LwIP 提供的 - 一组 API functions:socket函数,DNS函数等。例如,当您对给定的 IP 地址和端口执行 TCP 套接字 connect
时,它会决定使用可用网络接口中的哪个,以字节数组的形式构造一个帧并通过该接口发送这些字节。这是 LwIP 部分结束的地方 - 它请求给定的网络接口输出它提供的 X 字节,以及消耗可能到达该接口的任何字节。它不知道如何让字节“出来”,但它知道如何构造要发送的数据并理解你给它的数据。
从下到上,您拥有自己的调制解调器 - LTE、3G、2G 并不重要。调制解调器提供一组 AT 命令与它们通信以执行一组功能:设置 SIM 卡 PIN、获取信号质量、列出可用的运营商、select 运营商等,以及将其切换到的方法PPP模式,里面还做了ATD
命令。假设调制解调器之前已正确配置,一旦您将其切换到 PPP 模式,它将能够使用 PPP 协议发送数据,并且还将“吐出”它接收到的任何数据。这是调制解调器部分结束的地方——当切换到 PPP 模式时,调制解调器能够使用 PPP 协议发送和接收原始网络流量。它知道如何输出你给它的原始字节,但它不能在很高的层次上理解它们。
你的角色是连接(接口)这两个部分。您的调制解调器使用 PPP 来产生和消耗网络流量。 LwIP 具有理解和生成 PPP 帧的能力。
在发送数据的情况下,在准备 PPP 帧后,LwIP 将调用 sio_write
函数,该函数预期将提供的字节发送到已经处于 PPP 模式的调制解调器。这是您需要填写的部分。在读取的情况下使用 sio_read
并且您的工作是填写它以便从调制解调器接收到 returns 字节。你将如何做到这一点——使用 RTOS 和字节队列,没有 RTOS 或任何其他方式——并不重要。这是您觉得更方便或更适合您的整体项目结构的东西。只要这些功能发挥它们应有的作用,LwIP 就会很乐意使用它们。
此处更详细地讨论了此接口:https://lwip.fandom.com/wiki/PPP#PPP_over_serial。同样,一般概念是 LwIP 只是一个软件库,最终它会发送和接收字节。您的工作是通过填写它期望的功能来使其能够这样做。
我正在努力(就像许多其他人一样)开始使用 STM32 的 LwIP over PPPos(ppp over serial)。我本可以早点结束这句话,因为即使没有 PPPos,我也很难理解从哪里开始。
我有read, and read, and read。他们的官方主页、wiki、大量论坛,并试图为其他平台消化 github 示例。但我仍然很难找到从哪里开始的线索。
网上似乎很少(none?)示例带我完成了整个过程。我真的不明白。物联网世界正在爆炸式增长。所以我真的认为有一些 hello world 示例会很“容易”。
我目前拥有的:
- 我可以通过 AT 命令使用的 LTE 调制解调器
- 在我的 nucleo (F446ze) 板上运行的一个小应用程序,它可以使 LED 闪烁,通过 UART3 与我的 PC 通信,以及通过 UART2 与 LTE 调制解调器通信
- 玩过免费的 RTOS,这部分非常容易熟悉
但我不想使用 AT 命令(和 AT+CMQTT 命令)进行笨拙的互联网通信,而是希望依靠适当的 TCP/IP 堆栈。将 LTE 调制解调器设置为数据模式 (PPP),并让 LwIP 接管 TCP/IP 堆栈。
2021 年还是很复杂吗?还是我完全看错了方向?有没有人可以指出我正确的方向?
我也已经有 freertos 了。我不介意使用它。我也不介意没有。我只是在寻找一种无需完全逆向工程 LwIP 堆栈即可开始使用 LwIP 的方法。
从上到下,你有你的应用程序代码,它最终可能想要与一些服务器交谈:解析 DNS 名称,打开一个 tcp 连接等。这就是 LwIP 提供的 - 一组 API functions:socket函数,DNS函数等。例如,当您对给定的 IP 地址和端口执行 TCP 套接字 connect
时,它会决定使用可用网络接口中的哪个,以字节数组的形式构造一个帧并通过该接口发送这些字节。这是 LwIP 部分结束的地方 - 它请求给定的网络接口输出它提供的 X 字节,以及消耗可能到达该接口的任何字节。它不知道如何让字节“出来”,但它知道如何构造要发送的数据并理解你给它的数据。
从下到上,您拥有自己的调制解调器 - LTE、3G、2G 并不重要。调制解调器提供一组 AT 命令与它们通信以执行一组功能:设置 SIM 卡 PIN、获取信号质量、列出可用的运营商、select 运营商等,以及将其切换到的方法PPP模式,里面还做了ATD
命令。假设调制解调器之前已正确配置,一旦您将其切换到 PPP 模式,它将能够使用 PPP 协议发送数据,并且还将“吐出”它接收到的任何数据。这是调制解调器部分结束的地方——当切换到 PPP 模式时,调制解调器能够使用 PPP 协议发送和接收原始网络流量。它知道如何输出你给它的原始字节,但它不能在很高的层次上理解它们。
你的角色是连接(接口)这两个部分。您的调制解调器使用 PPP 来产生和消耗网络流量。 LwIP 具有理解和生成 PPP 帧的能力。
在发送数据的情况下,在准备 PPP 帧后,LwIP 将调用 sio_write
函数,该函数预期将提供的字节发送到已经处于 PPP 模式的调制解调器。这是您需要填写的部分。在读取的情况下使用 sio_read
并且您的工作是填写它以便从调制解调器接收到 returns 字节。你将如何做到这一点——使用 RTOS 和字节队列,没有 RTOS 或任何其他方式——并不重要。这是您觉得更方便或更适合您的整体项目结构的东西。只要这些功能发挥它们应有的作用,LwIP 就会很乐意使用它们。
此处更详细地讨论了此接口:https://lwip.fandom.com/wiki/PPP#PPP_over_serial。同样,一般概念是 LwIP 只是一个软件库,最终它会发送和接收字节。您的工作是通过填写它期望的功能来使其能够这样做。