配套上位机
上位机下载:
通过网盘分享的文件:serial-flash-prog_v1.3.1.exe
链接: https://pan.baidu.com/s/12QMAex-y_3XgMx17ifGcKw?pwd=L012 提取码: L012
上位机采用Tauri 2.0 | Tauri技术开发,html作为前端显示,rust作为后端功能,比起原先纯html来说更加规范一些。
Flash id: 用于指定向那个flash下载
Flash 大小:用于上位机拦截下载过大的文件
扇区大小:用于地址按扇区对齐
分包长度:用于调整最大数据包的长度
擦除超时时间:用于上位机等待下位机擦除的时间
版本号:用于版本管理,下位机可判断版本号决定是否更新
目标地址:用于总线类设备时,点对点传输
发送延时:用于调整发送的速度,当下位机无法接收过高的频率时,可插入延时时间
文件上传:支持任意类型的文件,上传必须是小于32个字符的英文文件名,大小小于flash大小即可
扇区号:用于显性的操作下载地址,往第几个扇区下载。
Tips: 支持多文件下载
样例demo
内存占用(KEIL O1 + LTO优化):7K左右 (如果内存优化更加激进占用会更加小)
队列大小2048
滑动窗口解析器最长数据帧1024
串口flash下载算法配置分包大小1024
RAM占用可以减小吗?
可以,我这里1024是为了充分加快下载速度,内存有限的话可以降低,但上位机要求最小分包长度为64,因此队列需要为128,滑动窗口解析器的最长命令帧为64,串口flash下载器的分包长度也要为64。队列必须两倍大小,滑动窗口解析器和串口flash下载器长度配置必须一样!!!
下载速度可以做到多快?
以CW32L012单片机为例,设置主频96M,波特率拉满到上位机支持的最大值2M,分包长度1024,关闭下载校验:
开启校验:
这么慢?
什么?91KB/s还是不够快,带宽没拉满?首先我们是UART外设,不是SWD外设(能跑10M),我们的设计架构就决定了不可能拉满带宽,我们是一发一回式,在从机处理期间我们是不再发送数据包,也就是最多就跑一半的带宽,再算上通讯开销,flash擦除写入等时间是不可能太快的。但v2的下载速度比v1提升了非常多的,simple queue队列提供数据的缓冲确保不丢包,sliding_window_parse能确保数据包的安全性(噪声、错误、粘包、断包)。
能不能应用于单片机OTA?
必能的兄弟!其实我们目标是做一个开放式协议,至于你往内部flash下载还是外部flash下载我们并不关心。
方案1:bootload 区直接对APP区更新程序
该方案需要设备进入bootload,在bootload区对APP区更新程序,更新完成校验固件后跳转,优点省内存,缺点更新失败会丢失旧固件。
方案2:双APP区
该方案有两个APP固件区域,可以在运行其中一个app区对另一个进行更新程序,更新完成以后校验,然后跳转到bootload区启动新固件。当然也可以在bootload中更新固件。
优点更新失败不会丢失旧固件,缺点占用比较大。
tips: 两个方案都需要额外掉电保存一些状态信息,如OTA状态,固件版本号等信息。
结语:
如今快节奏的生活已经容不下人停下来慢慢思考了,大家都一直在赶路,做产品也逐渐转成做快消品,没有多少深度思考的时间,我们放慢节奏,通过3期的内容,带大家从底层构建这个项目,深度研究技术的本质,如果支持我们的文章,请点赞转发哦~
扫码加入QQ群,3群| 610403240
195