简述RT-Thread Studio烧写国产MCU_SWM32S固件的方法

笔者最近在试用一款华芯微特的MCU,SWM32SRET6 。其片上有FLASH 512KB, RAM 128KB, 内部集成了TFT LCD控制器,并内置8MB SDRAM,面向家电、工业控制、消费电子等需求屏驱应用的场景 。这款芯片支持RT-Thread,这也是笔者试用它的重要原因 。

简述RT-Thread Studio烧写国产MCU_SWM32S固件的方法

文章插图
同样,swm320也是Cortex-M4内核,也内嵌了与stm32f4xx一样的SWJ-DP 。那么J-Link在下载时为何需要针对不同的mcu(即使是相同的cortex内核)选择不同的下载算法呢?
原因很简单,虽然swm320与stm32f4xx拥有相同的Cortex-M4内核和SWJ-DP,但是它们的外设是由厂商自行设计,包括片内Flash 。从片内Flash读取数据与从RAM读取数据一样,执行ARM的读取指令即可 。而向片内Flash写入数据,即所谓的编程,则要复杂一些 。
下载算法
准确的说,对于J-Link来说,其下载固件到mcu中,需要一个加载程序Flashloader 。Open_Flashloader详细讲述了如何去为一个新的mcu指定Flashloader 。
Open_Flashloader
https://wiki.segger.com/Open_Flashloader
可以指定两种类型的FlashLoader:
按Open_Flashloader文章的方法开发出的FlashLoader,是一个elf格式的可执行程序 。
CMSIS flash loader,通常是FLM格式 。
这个FLM,有没有感觉很亲切呢?这就是厂家提供的DFP中的那个东西,也正是Keil所使用的下载算法 。把其添加到J-Link软件之中即可 。
找到RT-Thread Studio所使用的J-Link软件目录,笔者的为:

简述RT-Thread Studio烧写国产MCU_SWM32S固件的方法
文章插图
ChipInfo是设备的基本信息,指定内核类型、RAM地址和大小 。
FlashBankInfo指定设备Flash的空间以及下载算法 。

简述RT-Thread Studio烧写国产MCU_SWM32S固件的方法
文章插图
在此之前,笔者还用过一款国产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 。这应该会是一次有趣的体验,有空时搞一把,到时会分享给大家 。
【简述RT-Thread Studio烧写国产MCU_SWM32S固件的方法】 编辑:jq
.dfma {position: relative;width: 1000px;margin: 0 auto;}.dfma a::after {position: absolute;left: 0;bottom: 0;width: 30px;line-height: 1.4;text-align: center;background-color: rgba(0, 0, 0, .5);color: #fff;font-size: 12px;content: "广告";}.dfma img {display: block;}
简述RT-Thread Studio烧写国产MCU_SWM32S固件的方法
文章插图

    推荐阅读