-
技术大纲摘要
基于TFTP文件传输协议,实现STM32F407局域网内远程网络升级。单片机与网络IC均采用正点原子的STM32F407探索者,采用RAW LWIP例程进行移植,采用lwip1.4.1版本。
在学习本技术前,应以熟悉TCP/IP中UDP协议,面向无连接,可支持同时多设备在线同时TFTP远程升级。
BootLoader_TFTP程序下载:
https://download.csdn.net/download/weixin_38366885/15419655?spm=1001.2014.3001.5503
APP应用程序:
https://download.csdn.net/download/weixin_38366885/15419655?spm=1001.2014.3001.5503
Tftpd64工具:
https://download.csdn.net/download/weixin_38366885/15419655?spm=1001.2014.3001.5503
1.1 关于TFTP介绍
TFTP是一个传输文件的简单协议,它基于UDP协议而实现,但是我们也不能确定有些TFTP协议是基于其它传输协议完成的。此协议设计的时候是进行小文件传输的。因此它不具备通常的FTP的许多功能,它只能从文件服务器上获得或写入文件,不能列出目录,不进行认证,它传输8位数据。传输中有三种模式:netascii,这是8位的ASCII码形式,另一种是octet,这是8位源数据类型;最后一种mail已经不再支持,它将返回的数据直接返回给用户而不是保存为文件。(百度百科)
重点了解:TFTP端口号69;TFTP基于UDP协议;TFTP操作码01-05;TFTP错误码01-07;TFTP各数据包,TFTP与FTP以及TFTP优势,等。
1.2 TFTP通讯架构图
单片机以客户端模式向TFTP服务器请求数据包;TFTP服务器收到请求后,开启一个客户端(可多个客户端)随机端口,连接到单片机服务端,并向单片机发送数据包1;单片机收到数据包1并完成处理后,向服务器返回收到数据包1确认消息。
若TFTP服务器没有收到ACK确认码,或单片机收到数据包错误,如下图:
2. TFTP服务器搭建
2.1 Windows下TFTP服务器
开启WIN10下FTP服务:
配置本机电脑开启FTP传输协议(以WIN10_64位为例),“控制面板--》程序--》启用或关闭windows功能”,找到Internet information service(信息服务),并选中“FTP服务”、“FTP扩展性”和“IIS管理控制台”前的复选框,点击“确定”,
完成配置后,重启电脑。
下载“Tftpd64”应用,可作为Windows的TFTP服务器使用。
下载地址:...
2.2 基于Linux Ubuntu 18.04搭建TFTP服务器
TFTP(Trivial File Transfer Protocol,简单文件传输协议),是一个基于UDP 协议实现的用于在客户机和服务器之间进行简单文件传输的协议,适合于开销不大、不复杂的应用场合。TFTP 协议专门为小文件传输而设计,只能从服务器上获取文件,或者向服务器写入文件,不能列出目录,也不能进行认证。
(1)安装xinetd “sudo apt-get install xinetd”
(2)安装tftp和tftpd “sudo apt-get install tftp tftpd”
(3)简历tftp的配置文件 “vi /etc/xinetd.d/tftp” 必须严格按照下面的格式输入
其中server_args 设置的/var/tftpboot 目录是tftp 服务器的目录,TFTP 客户端就是从这个目录里面获取服务器上的文件的
(4)新建tftp服务器目录 mkdir /var/tftpboot
(5)设置 /var/tftpboot 的访问权限为 777
(6)重启xinetd服务 “sudo /etc/init.d/xinetd restart”
根据上述操作,完成TFTP服务器搭建,并完成TFTP服务器配置。
linux系统建议采用静态IP。
服务器测试
(1)在/var/tftpboot 下面建立一个文件test,在里面输入tftptest success
(2)开启另外一个终端 输入 “tftp 127.0.0.1”
(3)输入get test
(4)通过ls 可以看到下载下来的那个文件 通过cat 输出文件内容
————————————————
原文链接:https://blog.csdn.net/zhuisaozhang1292/article/details/83047365
关于服务器上文件上传,前期可采用U盘,或TFTP命令来上传升级文件到服务器。
2.3 TFTP命令与测试
使用两条TFTP命令:
TFTP -i host GET source
TFTP -i host PUT source
将本地文件上传到TFTP服务器,具体操作如下:
host为服务器服务器IP地址。
将TFTP服务器文件下载到本地,具体操作如下:
2.4 抓取网络包
推荐使用wireshark , 具体使用,参考其他
下载地址:...
使用网络抓包工具,进行抓包分析数据,如下:
3. STM32F407编程
3.1 网络升级程序流程图Bootloader
3.2 BootLoader程序修改
本试验使用的网络芯片为LAN8720, 产品实际使用的是DP83848网络芯片,如有需求请联系博主。
LAN
修改tftp_example.c文件中的下载 文件名,目标IP
修改lwip_comm.c文件中的服务器IP,本地IP,子网掩码,默认网关
3.3 应用程序APP程序
应用程序应注意首地址起始位置,内存映射等问题。(参考正点原子的IAP程序)
由于在BootLoader中将APP应用程序下载到0x08010000地址处(可修改),所以此处填写0x8010000。
偏移量设置为APP应用程序首地址:0x08010000
4.整体测试
将RTC.bin放到服务器上,烧录BootLoader程序:
完成测试,速度还可以。
5. 应用说明与实例
最好搭载W25QXX Flash与网络协议,做标志位判断,来判断是否升级APP应用程序。
因使用UDP方式,用于搭载本地服务器的设备。UDP外网技术涉及UDP穿透打洞技术,难以进行外网远程网络升级。