• 正文
  • 相关推荐
申请入驻 产业图谱

【教程】CW32L012串行flash下载项目配套上位机教程

21小时前
195
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

配套上位机

上位机下载:

通过网盘分享的文件: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期的内容,带大家从底层构建这个项目,深度研究技术的本质,如果支持我们的文章,请点赞转发哦~

【教程】CW32L012滑动窗口解析库

扫码加入QQ群,3群| 610403240

相关推荐

以开放、共享、互助为理念,致力于构建武汉芯源半导体CW32系列MCU生态社区。无论是嵌入式MCU小自还是想要攻破技术难题的工程师,亦或是需求解决方案的产品经理都可在CW32生态社区汲取营养、共同成长。