本位将介绍stm32f407vgt6 芯片制作bootloader程序,用作app的远程升级。
一、硬件介绍:
stm32f407vgt6 主频:166MHZ flash : 1M SRAM:192K
stm32f407vgt6 使用的phy芯片为:lan8720a, 外挂一个16M的spiflash
硬件介绍完毕!
二、软件介绍
bootloader 下面简称为(e-boot): 采用最新rtthread3.3.0+lwip2.0.2
升级方式支持两种:TFTP 和 Ymodem (不懂改协议的自行百度,使用方法下面会介绍)
spiflash 底层驱动采用:sfud 开源spiflash库: 源码地址:[email protected]:armink/SFUD.git 直接克隆下来添加到keil工程即可。
spiflash:上层应用采用开源的easyflash : 源码地址: https://gitee.com/armink/EasyFlash 直接克隆下来添加到keil工程即可。
系统上电,自动判断有无app, 3秒内,敲回车键可停留在E-BOOT ,如果没有app,将自动停在e-boot下。
三、具体介绍软件的使用方法:
1. 介绍 ymodem 方法升级
将rthread源码目录下的: \rt-thread\components\utilities\ymodem ymodem.c ymodem.h 添加到工程
再将easyflash源码下面的 EasyFlash\demo\iap ymodem-rtt.c 添加到keill工程后,主要需要改文件里面的upadte函数,处理接收到的文件。
重启之后,取出env环境变量,将spiflash内容 拷贝到内部flash,并在console终端执行跳转到app命令即可。跳转命令实现如下:
效果如下:
上面是正在下载文件,下面是下载完文件重启,进行拷贝到内部flash
拷贝方法非常简单如下:
升级成功跳转到app开始执行:
2. 使用tftp进行升级
首先去rtthread 文档中心,找到TFTP工具方法的使用,下载TFTP源码
将下载好的源文件,添加到keil工程:
这里只需要修改tftp_prot.c文件即可
该函数,tftp开始时,会将文件名传过来,如果你没有使用文件系统,那就可以不用open创建该文件。
同样的道理,TFTP在接收文件内容时,会回调此函数,p->len 为接收到数据长度:p->payload 为数据指针。同样,如果你没有使用文件系统,那么write函数就不能使用,这时你只需要把数据拷贝到spiflash就行。接收到数据,重启跳转即可
效果如下:启动TFTP server
接下来使用TFTPd32 工具将升级文件,下发到e-boot即可
三、
网上有说跳转不成功的文件,一定要把中断映射表整对就行了。
app需要修改的地方:
1.
2.
3.
四。
至此,你的升级就大功告成了。