0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【教程】CW32串口flash编程工具分享

CW32生态社区 来源:CW32生态社区 作者:CW32生态社区 2025-12-31 17:01 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

通过网盘分享的文件:串口flash编程工具例程.zip

https://pan.baidu.com/s/1oc4oJFO8HVznDo2h3eBvfQ?pwd=CW32

提取码: CW32

前言

在往期的分享中,我们分享过在cw32L012上运行keil的FLM外部flash下载算法的方法。【CW32L012实现外部flash下载算法简单回顾,在项目开发过程中,当需要掉电保存大量的数据时(几十上百K字节数据),放到单片机内部flash是不明智的,内部flash资源宝贵,用于存代码才是最好的,所以我们需要将数据下载到外部flash中。

keil外部flash下载算法,简单来说它使用SWD调试接口下载,用户根据keil提供的下载算法模板修改,对接外部flash编程的接口,编译生成FLM文件,当需要下载时,把待下载数据定义到外部flash的地址范围中,然后添加该下载算法即可下载,总体来说稍复杂。

经常会有客户问我们能不能用串口下载更新flash?有没有用串口OTA更新的方法(包含内部flash),本次分享就利用串口进行flash编程,该方式更加通用。

Keil 外部flash下载的缺陷

每种单片机都需要写一遍外部flash下载算法,然后生成FLM文件,比较依赖keil开发环境,

下载算法是加载到RAM执行的,算法大小必须小于等于RAM的大小,对于RAM比较小的单片机,很难应用该方法

下载算法加载以后,每次点下载都会完整把外部flash的数据下载一遍,即使你只改变的是局部数据,或者内部flash的代码,只要下载,都会重新下载一遍,除非每次屏蔽,或者专门做一个下载的工程。

因为使用的是SWD调试接口下载,如果产品不希望引出该接口给客户使用,或者因为代码安全原因屏蔽了该接口,下载就比较受限

串口flash编程工具简介

该工具是基于HTML语言开发,使用串口进行通讯,支持多种波特率,可配置下载的参数,如flash id号、flash 大小、下载扇区号、扇区大小、通讯分包长度 、擦除超时时间和写入超时时间等。参数均可修改,当修改的不合法时会自动调整到合法数值。文件的选择不关心文件类型,可以是任意类型,但文件大小要小于flash大小。另外设计有数据校验、差分更新、进度条和日志显示功能。

该工具使用自定义串口协议,可能大家比较疑惑为什么不使用现成的modbus协议,或者XYZ-MODEM协议,或者是其他文件传输协议?因为主要考虑灵活性、后期可维护性和轻量级的特性,因此自定义协议是最佳选择。

测试硬件平台

依旧选择cw32L012,该单片机有很多优点,高性价比,主频可达96M,SPI可运行在48M,高速的SPI对于flash的操作是非常吃香的,有更高的通讯带宽,对比103的18M SPI来说,提升太大了,我们测试读写w25q128速度如下:

wKgZO2lTfQaALdQ3AADSYMXsrws999.jpg

可以看到cw32l012这款芯片对于读写w25q128速度是相当快的,读取2K的数据也只需要2ms,真的非常快,该芯片还有4路DMA,对于需要高速传输的场景还可以开启DMA,但目前测试下来也够用了,大家有高速SPI的需求可以选择该芯片哦。

移植教程

有了html上位机还缺嵌入式的通讯代码,通讯协议细节大家不必关注,已经完成协议的对接,只需要用户完成所在平台的以下接口:串口收发接口、待操作flash的读写擦除接口,以及一些参数检查和初始化。Cw32写的代码高内聚低耦合,代码框架良好,函数命名合理,充分考虑了代码的封装性和可移植性。

注意:在移植该框架之前必须打通串口收发功能,flash擦除写入读取功能,串口接收一帧数据按超时断帧方法,短帧时间需要在5-20ms之间。我们提供了基于cw32L012的完整的工程,用户可以参考。

1.准备好串口flash编程算法库文件

Comm_fmt不必关注,该文件用于构造解析命令体

Sfp_plugin.c为主要关注对象,用户需要在该文件内实现相关port接口

wKgZPGlTfQeAJqj9AAATeLbdyNE860.jpg

wKgZO2lTfQeAJs5RAAAWsLpie08670.jpg

2.添加.c文件与.h文件的路径

wKgZPGlTfQeATb7bAAAgih1s77M864.jpg

wKgZO2lTfQeAIY3eAAA3OPzvKvo970.jpg

3.编译添加的文件

有错误和警告自行解决

chaijie_default.png

4.编写sfp_pligin.c初始化代码

初始非常简单,只需要给定一个发送缓冲区就行。

wKgZPGlTfQiAcT_YAAAwlNbZenQ200.jpg

5.对接sfp_pligin.c中串口发送函数

对接你实际通讯用的串口发送接口,这里我们使用的是串口3。

(flash_id 在后面的移植中会一直出现,其设计目的是区分不同flash,当设备有多个flash时,通过判断该id号去操作不同的flash,如果只操作一个flash,该参数忽略)

wKgZPGlTfQmAQYLaAAAUrC8PvHQ178.jpg

6.对接sfp_pligin.c中flash擦除函数

对接你实际的flash擦除函数接口。Addr为擦除的起始地址,len为擦除的总长度,你可以根据要擦除的大小自行决定擦除策略,如可以按最小扇区擦除,也可以判断如果len达到了32k或64k级别,去调用更大的扇区擦除函数,此处按最小扇区大小擦除。

wKgZO2lU5iyAWoTMAACBxYajwNM980.png

7.对接sfp_pligin.c中flash写函数接口

写函数非常简单,写入起始地址,数据,数据长度。

wKgZPGlTfQqAXjHlAAAa3idyxBk979.jpg

8.对接sfp_pligin.c中flash读函数接口

读函数与写函数参数差不多,不过多介绍。

wKgZO2lTfQqANcEQAAAX5LlqKIk569.jpg

9.对接sfp_pligin.c中进入编程模式接口

该函数用于提示用户现在已经请求进入编程状态,用户可根据实际情况去调用sfp_plugin_set_prog_allow(SFP_PROG_ALLOW);来允许,或者调用sfp_plugin_set_prog_allow(SFP_PROG_DISALLOW);来拒绝。(此处固定允许编程)

wKgZO2lU5jyAWRi4AABsxYwxpas952.png

10.对接sfp_pligin.c中退出编程模式接口

该接口用于提示用户已经退出编程模式了,download_status用户反馈本次的操作状态(操作成功、下载中断、校验失败),用户可判断其状态来做一些状态的指示,例如向GUI线程发送状态告知用户下载的结果。

wKgZPGlTfQuAYZAZAAAwSFrkhcA127.jpg

11.对接sfp_pligin.c中检查编程信息的接口

该接口用于检查上位机待下载的数据信息,如file_size(下载的大小),start_addr

(下载的起始地址),packed_len(分包的长度),用户需要根据自己所在平台的实际情况判断,有错误就返回错误码,此处可按作者写的不用改。

wKgZO2lTfQuAQPHrAABU1Gv-IiA435.jpg

12.对接sfp_pligin.c中读取信息的检查接口

该接口用于检查上位机读取的信息是否合法,如读取地址,读取的长度是否超过范围,同样可不修改,按作者的方式。

wKgZPGlTfQuAFOoqAAA-iPaJ_rI509.jpg

13.对接完毕,编译检查

至此,需要对接的函数已经全部完成了,编译成功即可下一步

14.调用初始化函数

sfp_pligin.h文件中找到该函数调用

wKgZO2lU5kyAOK7jAABiXIcuFh4970.png

wKgZO2lTfQyAPbPiAAArDozml_8820.jpg

15.调用串口接收事件函数

sfp_pligin.h文件中找到该函数调用

在你的串口收到一帧数据的函数中,调用该函数即可,形参传入接收到的数据指针,接收到的长度。

wKgZPGlTfQyAGgpiAAAlQjSiBTQ428.jpg

wKgZO2lTfQyAZq0OAABChYFb0LE916.jpg

16.移植已全部完成,可以使用上位机进行测试

HTML上位机使用方法说明

1.使用浏览器打开serial_flash_download_tool.html2.选择串口设置波特率

wKgZPGlU5liARgoRAABXqbRO0Ko328.png

3.设置下载参数

Flash id : 区分不同的flash设备,只有一个时忽略

Flash 大小:限制文件下载的大小

扇区大小:待操作flash的最小擦除大小(nor flash一般都是4096)

扇区号:需要从第几个扇区开始下载

分包长度:协议分包读写的最大值,和串口收发有关(可默认不修改)

擦除超时时间:根据实际flash擦除耗时时间去定义(时间和擦除的大小有关)

写入超时时间:根据实际flash写入耗时实际去修改(写入一般不会太久可不修改)

wKgZPGlTfQ2AWoS7AAAlpO4doAM365.jpg

4.选择待下载的文件

文件必须小于flash的大小,否则会报错,选择以后会统计文件大小,占用多少扇区。

wKgZPGlU5mOAZh_XAABa5pBkocA776.png

5.点击开始下载

可配置是否需要校验,是否启用差分更新,默认开启,不需要可以取消勾选。

wKgZO2lTfQ6AJU8DAAAaxkk4k60080.jpg

6.观察下载进度和日志

wKgZO2lU5m2AciXmAABeXhLNwig213.png

总结

本次分享的是用CW32L012的串口去下载外部flash,该方法通用性强,移植便捷,代码风格好,易于阅读维护,上位机界面清晰,操作简单,易于使用,硬件上性能强,有48M SPI 和96M 主频,喜欢做高速SPI传输的客户一定不要错过这么高性价比的芯片哦!

最后对于内部flash的操作,也是一样的呀,只需将flash操作接口换成cw32l012内部flash操作的API,然后写好bootload,在bootload中运行我们这个框架将数据下载到内部flash,然后校验固件,成功以后就可以跳转执行APP代码了,这不就实现了串口OTA更新了嘛!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FlaSh
    +关注

    关注

    10

    文章

    1764

    浏览量

    156252
  • 串口
    +关注

    关注

    15

    文章

    1630

    浏览量

    83654
  • CW32
    +关注

    关注

    1

    文章

    326

    浏览量

    2007
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    CW32移植Free-RTOS】CW32开发者扶持计划

    CW32配置Free-RTOS全过程,CW32开发者扶持计划
    的头像 发表于 04-18 09:38 7636次阅读
    【<b class='flag-5'>CW32</b>移植Free-RTOS】<b class='flag-5'>CW32</b>开发者扶持计划

    CW32饭盒派开发板试用体验】串口实验

    CW32饭盒派开发板实现串口接收并控制LED
    的头像 发表于 05-29 09:13 42w次阅读
    【<b class='flag-5'>CW32</b>饭盒派开发板试用体验】<b class='flag-5'>串口</b>实验

    CW32快速开发入门

    CW32快速开发入门
    的头像 发表于 04-24 18:56 3921次阅读
    <b class='flag-5'>CW32</b>快速开发入门

    CW32量产烧录工具

    本节主要介绍CW32微控制器的烧录器CW-Writer,以及与之配合的软件CW-Programmer的使用方法。烧录器CW-Writer通过ISP协议,可实现对
    的头像 发表于 04-25 15:22 3233次阅读
    <b class='flag-5'>CW32</b>量产烧录<b class='flag-5'>工具</b>

    如何使用新版本J-Flash编程CW32 MCU

    :AppData是隐藏目录,需打开显示。 3、将CW32 MCU器件支持包JlinkDevices_WHXY.rar解压到新建的JlinkDevices子目录即可。 4、运行JFlash.exe,通过Jlink连接CW32 MCU测试板,进行
    发表于 11-12 07:24

    使用J-Flash编程CW32 MCU

    1.安装J-Flash: 从SEGGER官方网站下载最新版本的J-Flash工具。 按照安装向导的指示完成安装过程。 2.连接硬件: 将CW32 MCU通过调试器(如J-LINK)连接
    发表于 11-25 07:00

    【应用笔记】CW32 自举程序中使用的 ISP 协议

    CW32 自举程序中使用的 ISP 协议CW32 微控制器片上 FLASH 存储器有一部分区域用于存储 BootLoader 启动程序,在芯片出厂时已编程,用户可利用 BootLoad
    发表于 06-06 13:26

    CW32 MCU开发资料汇总(手册、工具、固件库)

    32L083_StdPeriph_Lib.zip4、CW32 MCU开发工具:*附件:CW-DAPLINK调试器驱动.zip*附件:CW-DAPLINK使用手册.pdf*附件:
    发表于 07-27 14:47

    CW Programmer CW32系列芯片烧录工具配套软件

    CW Programmer CW32系列芯片的烧录工具配套软件
    发表于 09-15 07:44

    应用笔记(二)| 武汉芯源CW32自举程序中使用的ISP协议

    前言CW32微控制器片上FLASH存储器有一部分区域用于存储BootLoader启动程序,在芯片出厂时已编程,用户可利用BootLoader启动程序提供的ISP模式,通过UART串口
    的头像 发表于 07-11 16:08 2782次阅读
    应用笔记(二)| 武汉芯源<b class='flag-5'>CW32</b>自举程序中使用的ISP协议

    cw32和stm32的区别

    cw32和stm32的区别 CW32和STM32是两种常见的单片机,被广泛应用于各种电子设备中。在本文中,我们将深入探讨CW32和STM32之间的区别和优劣势。 1. 硬件性能 硬件性能是衡量单片机
    的头像 发表于 08-16 11:15 6684次阅读

    cw32和gd32的区别

    cw32和gd32的区别 CW32和GD32是两种不同的芯片系列,分别由WCH和GigaDevice公司推出,两者有很多不同之处,下面我们来详细介绍。 首先从CW32系列开始,CW32
    的头像 发表于 08-16 11:15 3480次阅读

    应用笔记-CW32 自举程序中使用的 ISP 协议

    CW32自举程序中使用的ISP协议CW32微控制器片上FLASH存储器有一部分区域用于存储BootLoader启动程序,在芯片出厂时已编程,用户可利用BootLoader启动程序提供的
    发表于 06-06 13:37 8次下载

    基于CW32的物联网应用

    CW32】基于CW32的物联网应用
    的头像 发表于 11-02 15:55 2196次阅读
    基于<b class='flag-5'>CW32</b>的物联网应用

    如何使用新版本J-Flash编程CW32 MCU?

    CW32 MCU器件支持包JlinkDevices_WHXY.rar解压到新建的JlinkDevices子目录即可。 4、运行JFlash.exe,通过Jlink连接CW32 MCU测试板,进行编程测试
    的头像 发表于 07-01 15:05 1223次阅读
    如何使用新版本J-<b class='flag-5'>Flash</b><b class='flag-5'>编程</b><b class='flag-5'>CW32</b> MCU?