发新帖本帖赏金 50.00元(功能说明)我要提问
返回列表
打印
[APM32F4]

LWIP升级代码

[复制链接]
24477|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
夜声|  楼主 | 2024-3-25 23:00 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
#申请原创# @21小跑堂

1.LWIP
1.1LWIP简介
LwIP 是一款轻量化的 TCP/IP 协议,是瑞典计算机科学院(SICS)的 AdamDunkels 开发的一个小型开源的 TCP/IP 协议栈。在保持 TCP 协议主要功能的基础上减少对资源的占用。此外 LwIP 既可以移植到操作系统上运行,也可以在无操作系统的情况下独立运行。可以在网页http://savannah.nongnu.org/projects/lwip/,下载获取到 LwIP 的各个版本的源代码包和对应的contrib 包。
本次计划基于上一篇LWIP移植的基础上实现LWIP网络传输固件进行升级。
1.2硬件设计
开发板使用 APM32F407 控制器通过 RMII 接口和 SMI 接口与 LAN8720A 以太网 PHY 进行连接。通过接下拉电阻把 nINTSEL 引脚设置为低电平,从而使能 nINT/REFCLKO 引脚的输出功能为RMII 接口中 REF_CLK 信号线提供时钟信号,硬件上 XTAL1 与 XTAL2 之间接入提供 25MHz时钟,经过 LAN8720A 内部 PLL 电路陪频后使得 nINT/REFCLKO 引脚的输出的时钟信号为50MHz 时钟。

2.移植步骤
2.1Bootloader配置
本次由于在bootloader程序中添加了lwip的代码,需要将bootloader的大小调整一下,初步编译了一下,大概占用30k左右的样子,这里进行试验就调整大一点,200k

应用程序配置,只需要调整APP的起始地址即可。

同时应用APP程序中只需要一个简单的例子即可,2s闪烁一次LED

接下来在bootloader建立TcpServer服务器,端口设置为80,代码基于lwip移植和串口IAP升级的工程合并而成。

Lwip接收数据回调函数,连接收向服务器发送消息证明建立通讯

接下来就是接收数据后的回调函数,先将接收的数据返回发送到服务器

实现Tcpserver这个功能后在实现代码升级的部分,然后初始化函数放在主函数中初始化。

打开网络测试工具,先ping一下,ping正常

接下来点击打开TCP,可以发现lwip Tcpserver connect  这串字符上传,这是代码里面写的,说明成功,接下来向服务器发送数据11,返回11。说明功能已正常使用

2.2网络固件传输调整
由于最开始使用的串口升级的的方式,现在需要使用lwip实现,从串口IAP升级中将串口接收的数据固定存放在一个区域就可以,lwip升级同样也是。通过对lwip接收到的数据存放在我们的app段地址,通过按键去启动。
可以同样使用串口的缓冲,将lwip接收的数据存放在串口升级的缓冲区,首先找到lwip接收数据的接口tatic err_t tcp1_server_recv(void *arg, struct tcp_pcb *pcb, struct pbuf *tcp_recv_pbuf, err_t err)。其lwip接收到的数据存放在tcp_recv_pbuf这个结构体中。

将接收到数据指针指向我们的串口接收缓冲区,同时拿出接收的长度

串口缓冲区数据存放地址

在主循环中通过检测按键进行代码升级和运行APP。检测到lwip接收的数据不为0,将接收的数据写入到指定区域。

3.验证
打开网络工具,本次使用野火的上位机,可以发文件,点击网络助手,配置协议类型为TCP Client,以及开发板的地址,端口,点击建立连接

接下来点击右下角的加载文件,选择APP代码生成的bin文件,如下所示

点击发送数据,接下来就可以通过串口看到输出消息,按下按键,执行用户程序。

正确执行升级后的代码,LED灯按APP的代码执行。

使用特权

评论回复

打赏榜单

21小跑堂 打赏了 50.00 元 2024-03-26
理由:恭喜通过原创审核!期待您更多的原创作品~

评论
21小跑堂 2024-3-26 14:34 回复TA
一个通过LWIP升级代码的简单示例,具体实现流程较为完善,若可多做些知识发散和流程精析可获得更高打赏哦 
沙发
储小勇_526| | 2024-3-27 08:32 | 只看该作者
正好最近有这方面的需求,值得好好学习。

使用特权

评论回复
板凳
ColeYao| | 2024-3-27 08:36 | 只看该作者
很多网上的方案中lwip TCP连接发送小数据包可以,大数据包定时发送(几秒一次)很快就会断开连接,目前看起来还是UDP更靠谱,不过UDP传输不方便做内网穿透。

使用特权

评论回复
地板
@若水| | 2024-4-6 21:21 | 只看该作者
ColeYao 发表于 2024-3-27 08:36
很多网上的方案中lwip TCP连接发送小数据包可以,大数据包定时发送(几秒一次)很快就会断开连接,目前看 ...

TCP能穿透UDP也一定能穿透,这个跟TCP与UDP的关系不大的

使用特权

评论回复
5
weifeng90| | 2024-4-6 23:59 | 只看该作者
LWIP很经典的嵌入式以太网通信协议

使用特权

评论回复
6
ColeYao| | 2024-4-7 12:05 | 只看该作者
@若水 发表于 2024-4-6 21:21
TCP能穿透UDP也一定能穿透,这个跟TCP与UDP的关系不大的

实际测试TCP/UDP协议都不能穿透内网,MQTT协议是可以的,内网穿透工具用的是神卓互联的。

使用特权

评论回复
7
@若水| | 2024-4-9 21:28 | 只看该作者
ColeYao 发表于 2024-4-7 12:05
实际测试TCP/UDP协议都不能穿透内网,MQTT协议是可以的,内网穿透工具用的是神卓互联的。 ...

MQTT可是基于TCP的哦,如果TCP不行,MQTT肯定也不行,只是我说的穿透与你所说的穿透是否是一回事

使用特权

评论回复
8
chenqianqian| | 2024-4-10 08:06 | 只看该作者
LWIP还是经典的嵌入式以太网协议栈

使用特权

评论回复
9
ColeYao| | 2024-4-10 11:54 | 只看该作者
@若水 发表于 2024-4-9 21:28
MQTT可是基于TCP的哦,如果TCP不行,MQTT肯定也不行,只是我说的穿透与你所说的穿透是否是一回事 ...

内网穿透就是软件和电脑本地的端口通讯正常(不可以从外网访问),通过工具软件把本地端口映射到外部端口(可从外网访问)后软件和外部端口之间通讯还是正常的。 看起来就像是把内网的资源架设到了外网上。

使用特权

评论回复
10
xionghaoyun| | 2024-4-11 16:53 | 只看该作者
学习一下

使用特权

评论回复
11
OKAKAKO| | 2024-4-15 20:02 | 只看该作者
LwIP 是一款轻量化的 TCP/IP 协议,是瑞典计算机科学院(SICS)的 AdamDunkels 开发的一个小型开源的 TCP/IP 协议栈。

使用特权

评论回复
12
szt1993| | 2024-4-16 19:52 | 只看该作者
使用lwip实现,从串口IAP升级中将串口接收的数据固定存放在一个区域就可以

使用特权

评论回复
发新帖 本帖赏金 50.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

26

主题

85

帖子

2

粉丝