一起游 手游攻略 手游评测 CW32串口flash编程工具分享

CW32串口flash编程工具分享

时间: 来源:互联网 浏览:0

网盘共享文件:串口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 是主要焦点。用户需要在该文件中实现相关端口接口。

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擦除函数

连接到您实际的闪存擦除功能接口。 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. Call the initialization function

函数调用位于sfp_pligin.h 文件中

wKgZO2lU5kyAOK7jAABiXIcuFh4970.png

wKgZO2lTfQyAPbPiAAArDozml_8820.jpg

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

函数调用位于sfp_pligin.h 文件中

在你的串口接收一帧数据的函数中,只要调用这个函数,将接收到的数据指针和接收到的长度作为形参传入即可。

wKgZPGlTfQyAGgpiAAAlQjSiBTQ428.jpg

wKgZO2lTfQyAZq0OAABChYFb0LE916.jpg

16、移植完成,可以使用上位机进行测试。

HTML上位机使用方法说明1. 使用浏览器打开serial_flash_download_tool.html 2. 选择串口设置波特率

wKgZPGlU5liARgoRAABXqbRO0Ko328.png

3.Set download parameters

Flash id : 区分不同的Flash设备,如果只有一个则忽略

Flash size: Limit the size of file downloads

扇区大小:要操作的flash的最小擦除大小(nor flash一般为4096)

扇区号:应该从哪个扇区下载?

数据包长度:协议数据包读写的最大值,与串口收发有关(默认可不做)

擦除超时:根据实际Flash擦除时间定义(时间与擦除的大小有关)

写入超时:根据实际flash写入时间修改(写入一般不会太长,不需要修改)

wKgZPGlTfQ2AWoS7AAAlpO4doAM365.jpg

4. Select the file to be downloaded

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

wKgZPGlU5mOAZh_XAABa5pBkocA776.png

5. Click to start downloading

是否需要验证、是否启用差异更新是可配置的。默认情况下它是启用的。 You can uncheck it if not required.

wKgZO2lTfQ6AJU8DAAAaxkk4k60080.jpg

6. Observe download progress and logs

wKgZO2lU5m2AciXmAABeXhLNwig213.png

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

最后,内部闪光灯的操作是相同的。只需将flash操作接口改为cw32l012内部flash操作API,然后编写bootload,在bootload中运行我们的框架将数据下载到内部flash,然后验证固件即可。成功后可以跳转执行APP代码。 Doesn't this realize the serial port OTA update!

标题:CW32串口flash编程工具分享
链接:https://yqqlyw.com/news/sypc/66997.html
版权:文章转载自网络,如有侵权,请联系删除!
资讯推荐
更多
  • M4-R1 开源鸿蒙(OpenHarmory)开发板
  • 瑞萨RA系列FSP库开发实战指南之DMA
  • 绯红之境兑换码最新2021 礼包兑换码大全

    绯红之境兑换码最新2021 礼包兑换码大全[多图],绯红之境兑换码怎么领取?绯红之境兑换码有哪些?绯红之境在今日

    2026-01-01
    三国群英传7霸王再临攻略 霸王再临攻略技巧开启方法

    三国群英传7霸王再临攻略 霸王再临攻略技巧开启方法[多图],三国群英传7霸王再临怎么玩?三国群英传7霸王再临

    2026-01-01
    妄想山海怎么加好友 加好友方法大全

    妄想山海怎么加好友 加好友方法大全[多图],妄想山海添加好友功能在哪里?妄想山海添加好友的方法是什么?好友添

    2026-01-01
    江南百景图又见桃花村钓鱼位置在哪?又见桃花村钓鱼攻略

    江南百景图又见桃花村钓鱼位置在哪?又见桃花村钓鱼攻略[多图],江南百景图又见桃花村钓鱼怎么钓?又见桃花村钓

    2026-01-01