笔者最近在试用一款华芯微特的mcu,swm32sret6。其片上有flash 512kb, ram 128kb, 内部集成了tft lcd控制器,并内置8mb sdram,面向家电、工业控制、消费电子等需求屏驱应用的场景。这款芯片支持rt-thread,这也是笔者试用它的重要原因。
keil内置了一些mcu的下载算法,比如绿线勾划的。同时,keil也为mcu厂商提供了添加下载算法的方法,即放在dfp之中
再转回rt-thread studio,是一样的道理。rt-thread studio使用jlinkgdbservercl.exe进行固件下载和调试,j-link同样需要下载算法。supported devices - j-link列举了其支持的mcu。对于不支持的,需要额外添加下载算法。
supported devices - j-link
https://www.segger.com/downloads/supported-devices.php
在讲具体的方法之前,我们先思考一下,为什么需要下载算法?
swj-dp
同样,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软件目录,笔者的为:
chipinfo是设备的基本信息,指定内核类型、ram地址和大小。
vendor 设备商名称
name 设备名称,在工程调试配置里面会用到.
workramaddr 十六进制格式的ram首地址,与workramsize一起指定了j-link下载固件时可用的内存空间。一般可指定为mcu的整个ram空间。
workramsize 十六进制格式的ram大小,单位是字节。
core mcu内核,比如cotex-m4对应为jlink_core_cortex_m4。
参数 含义
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是始终存在的。
参数 含义
在此之前,笔者还用过一款国产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。这应该会是一次有趣的体验,有空时搞一把,到时会分享给大家。
笃行致远,砥砺前行丨视爵光旭总裁郝宗潮发表2021年终致辞
鲲游光电正式国内首发量产型全息光栅AR光波导——逍遥系列,引发业界关注
土壤酸度测量仪是什么,它的使用技巧有哪些
TCL出售智能终端业务聚焦半导体领域
专访Altera亚太区江允贵:FPGA争食监控应用大饼
简述RT-Thread Studio烧写国产MCU(SWM32S)固件的方法
完整地平面的串扰
看Aqara如何玩转HomeKit!
北京已建成3个封闭测试场 可提供全天候全路况自动驾驶测试服务
福禄克测试测量产品实力亮相SNEC2019
怎么样判断一款连接器的质量是否合格
iOS 13将会去掉iPhone 6S系列的升级不支持搭载A9处理器的机型
大屏时代的到来,激光电视已逐渐取代液晶电视
上海圣戈班玻璃工厂初体验:揭开东风雪铁龙C6玻璃的奥秘
掌握find命令的这几种用法,就没有找不到的文件!
压感触控成智能硬件新焦点,纽迪瑞布局全场景人机交互
人工智能对医疗的赋能:提升了医疗效率降低了医疗成本
手动星三角启动器电路图原理
通过ICE1CS02芯片如何实现PFC+PWM电路的设计
MLPerf最新发布人工智能推理基准的首个结果