打印
[技术相关]

RT-Thread Studio烧写国产mcu(swm320)固件的方法

[复制链接]
478|28
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
喂什么玩意|  楼主 | 2023-1-18 16:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
笔者最近在试用一款华芯微特的MCU,SWM32SRET6。其片上有FLASH 512KB, RAM 128KB, 内部集成了TFT LCD控制器,并内置8MB SDRAM,面向家电、工业控制、消费电子等需求屏驱应用的场景。这款芯片支持RT-Thread,这也是笔者试用它的重要原因。

使用2.1.0版本的RT-Thread Studio,下载lastest源码和Synwit BSP,即可创建RT-Thread工程。



————————————————


使用特权

评论回复
评论
喂什么玩意 2023-1-18 23:00 回复TA
版权声明:本文为CSDN博主「wenbodong」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/wenbodong/article/details/115405144 

相关帖子

沙发
喂什么玩意|  楼主 | 2023-1-18 16:33 | 只看该作者
一切都是那么顺利


版权声明:本文为CSDN博主「wenbodong」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wenbodong/article/details/115405144

使用特权

评论回复
板凳
喂什么玩意|  楼主 | 2023-1-18 16:36 | 只看该作者
编译也没有问题

使用特权

评论回复
地板
喂什么玩意|  楼主 | 2023-1-18 16:37 | 只看该作者

使用特权

评论回复
5
喂什么玩意|  楼主 | 2023-1-18 16:48 | 只看该作者
下载时傻眼了

使用特权

评论回复
6
喂什么玩意|  楼主 | 2023-1-18 16:49 | 只看该作者

使用特权

评论回复
7
喂什么玩意|  楼主 | 2023-1-18 16:52 | 只看该作者
调试配置选择的是RT-Thread Studio自带的J-link。根据上述提示,J-Link软件不识别它。

使用特权

评论回复
8
华芯微特FAE| | 2023-1-18 17:20 | 只看该作者
本帖最后由 华芯微特FAE 于 2023-1-18 17:21 编辑
喂什么玩意 发表于 2023-1-18 16:52
调试配置选择的是RT-Thread Studio自带的J-link。根据上述提示,J-Link软件不识别它。 ...

您点击ok后,识别不到,请问是找不到内核,还是什么情况呢

使用特权

评论回复
9
喂什么玩意|  楼主 | 2023-1-18 22:56 | 只看该作者
华芯微特FAE 发表于 2023-1-18 17:20
您点击ok后,识别不到,请问是找不到内核,还是什么情况呢

使用Keil导入厂家提供的DFP (Device Family Pack) ,打开厂家的示例工程,是可以下载和调试程序的。

Keil成功下载固件:

Keil之所以能成功下载,是因为厂家提供DFP包含了下载算法。

在Flash Download中可以选择对应的算法。

在选择算法时,笔者注意到一个细节。Keil内置了一些mcu的下载算法,比如绿线勾划的。同时,Keil也为mcu厂商提供了添加下载算法的方法,即放在DFP之中。

再转回RT-Thread Studio,是一样的道理。RT-Thread Studio使用JLinkGDBServerCL.exe进行固件下载和调试,J-Link同样需要下载算法。Supported devices - J-Link列举了其支持的mcu。对于不支持的,需要额外添加下载算法。


使用特权

评论回复
10
喂什么玩意|  楼主 | 2023-1-18 23:08 | 只看该作者
为什么需要下载算法

在讲具体的方法之前,我们先思考一下,为什么需要下载算法?

下图是stm32f4xx的debug模块框图,stm32f4xx的内核是Cortex-M4,它的SWJ-DP(serial wire and JTAG debug port)模块是嵌在Cortex-M4内核之中,而非是stm32f4xx的专利。J-Link通过SWJ-DP与Cortex-M4内核通信,实现下载和调试功能。

同样,swm320也是Cortex-M4内核,也内嵌了与stm32f4xx一样的SWJ-DP。
那么J-Link在下载时为何需要针对不同的mcu(即使是相同的cortex内核)选择不同的下载算法呢?

原因很简单,虽然swm320与stm32f4xx拥有相同的Cortex-M4内核和SWJ-DP,但是它们的外设是由厂商自行设计,包括片内Flash。从片内Flash读取数据与从RAM读取数据一样,执行ARM的读取指令即可。而向片内Flash写入数据,即所谓的编程,则要复杂一些。

下图是stm32f4xx的Flash编程步骤,涉及多条寄存器操作,而非简单的向Flash地址进行写操作。

J-Link虽然可以访问mcu的整个内存空间,但是它并不知道mcu自己定义的Flash编程步骤。除非你告诉它,即通过提供下载算法。

使用特权

评论回复
11
喂什么玩意|  楼主 | 2023-1-18 23:09 | 只看该作者
添加下载算法

准确的说,对于J-Link来说,其下载固件到mcu中,需要一个加载程序Flashloader。Open_Flashloader详细讲述了如何去为一个新的mcu指定Flashloader。

可以指定两种类型的FlashLoader:

按Open_Flashloader文章的方法开发出的FlashLoader,是一个elf格式的可执行程序。
CMSIS flash loader,通常是FLM格式。
这个FLM,有没有感觉很亲切呢?这就是厂家提供的DFP中的那个东西,也正是Keil所使用的下载算法。把其添加到J-Link软件之中即可。

找到RT-Thread Studio所使用的J-Link软件目录,笔者的为:

D:\RT-ThreadStudio\repo\Extract\Debugger_Support_Packages\SEGGER\J-Link\6.80d

1
把FLM复制进来。笔者在Device中新建了一个Synwit,这是swm320厂家的名称。因为笔者只使用了SWM32SRET6,先把对应的复制过来试试。swm320s是在swm320的基础上内嵌了8MB的SDRAM,其他是完全一样的。

使用特权

评论回复
12
喂什么玩意|  楼主 | 2023-1-18 23:12 | 只看该作者

在J-Link\6.80d\JLinkDevices.xml中添加描述信息:
<div>
</div><div><Device></div><div>    <ChipInfo Vendor="Synwit" Name="SWM320XE" Core="JLINK_CORE_CORTEX_M4" WorkRAMAddr="0x20000000" WorkRAMSize="0x20000" /></div><div>    <FlashBankInfo Name="Internal Flash" BaseAddr="0x00000000" MaxSize="0x80000" Loader="Devices/Synwit/SWM320xE.FLM" LoaderType="FLASH_ALGO_TYPE_OPEN" AlwaysPresent="1"/></div><div></Device> </div><div>1</div><div>2</div><div>3</div><div>4</div>


ChipInfo是设备的基本信息,指定内核类型、RAM地址和大小。

Vendor设备商名称
Name设备名称,在工程调试配置里面会用到.
WorkRAMAddr十六进制格式的RAM首地址,与WorkRAMSize一起指定了J-Link下载固件时可用的内存空间。一般可指定为MCU的整个RAM空间。
WorkRAMSize十六进制格式的RAM大小,单位是字节。
CoreMCU内核,比如Cotex-M4对应为JLINK_CORE_CORTEX_M4。


使用特权

评论回复
13
喂什么玩意|  楼主 | 2023-1-18 23:13 | 只看该作者
FlashBankInfo指定设备Flash的空间以及下载算法。

Name        给人看的,取个有意义的即可。比如片内Flash可命名为Internal Flash。
BaseAddr        十六进制格式的Flash首地址,与MaxSize一起指定了Flash的空间。
MaxSize        十六进制格式的Flash大小,单位是字节。
Loader        FlashLoader的路径,可为相对路径,也可为绝对路径。如果是相对路径,则其为相对于JLinkDevices.xml文件的位置。如前所述,可以是elf也可以是FLM。
LoaderType        FlashLoader的类型。目前只能为FLASH_ALGO_TYPE_OPEN。
AlwaysPresent        对于片内Flash,此值为1,表示本块Flash是始终存在的。

使用特权

评论回复
14
喂什么玩意|  楼主 | 2023-1-18 23:14 | 只看该作者
在RT-Thread Studio的项目资源管理器中选中相应工程,打开调试配置,将Device name配置为SWM320XE。

使用特权

评论回复
15
喂什么玩意|  楼主 | 2023-1-18 23:15 | 只看该作者
成功下载

下载和调试都成功了。

使用特权

评论回复
16
喂什么玩意|  楼主 | 2023-1-18 23:16 | 只看该作者

使用特权

评论回复
17
喂什么玩意|  楼主 | 2023-1-18 23:17 | 只看该作者
后话

在此之前,笔者还用过一款国产MCU(华大的HC32L110)。这两个厂商的产品有一个共同之处:只支持在Keil和IAR中开发。看过笔者飞控移植系列文章的同学应该有印象,笔者喜欢使用Eclipse家族的IDE,而不喜欢Keil,因为它的代码浏览和编辑功能太简陋。

Eclipse家族IDE不能用于开发这些国产MCU,最大的问题就是在于下载和调试,也就是本文遇到的问题。笔者当初在使用HC32L110的时候,选择了一个折衷的方法。在TRUEStudio(一款Eclipse IDE)中编写代码,也可编译以查看语法错误。而真正的编译固件和下载调试,则在Keil之中进行。这次看到RT-Thread Studio可以创建出swm320的工程,然而最终还是卡在了下载。笔者不想再妥协了,于是有了这篇文章。本文的方法不局限于芯微特的MCU,是一个通用的解决方案噢。

添加下载算法一节提到两种方法,这次选择了第2种,一个快速而简单的方案。其实笔者在看Open Flashloader那篇wiki时,正襟危坐,仔细阅读,准备大干一翻,自己来开发这个Flashloader。这应该会是一次有趣的体验,有空时搞一把,到时会分享给大家。

使用特权

评论回复
18
plsbackup| | 2023-2-7 21:19 | 只看该作者
RT-Thread Studio现在支持的芯片太多了。

使用特权

评论回复
19
jtracy3| | 2023-2-7 21:47 | 只看该作者
不是使用RT-Thread Studio做代码开发的吗?

使用特权

评论回复
20
hilahope| | 2023-2-7 21:55 | 只看该作者
以后组件开发简单了。              

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

26

主题

336

帖子

0

粉丝