下载算法写完!TKM32F499终于可以直接用JLINK下载了,附下载算法文件

内容

回复: 35

打印 上一主题 下一主题

出0入143汤圆

本帖最后由 tiky 于 2020-11-18 14:52 编辑        TKM32F499在设计的时候,就不打算依赖任何下载器的,不过做出来以后,发现大家对JLINK、ST-LINK、ARM-OB、DAP下载仿真有无限的魔力,我们也逃不掉ST的的生态链。工程师本来想偷懒一下的,发现反而更麻烦。实在受不了,今天把这个下载算法弄好了,现发出来供大家选择。目前TK499已经支持两种下载方法:1、USB直接下载;2、用JLINK、ST-LINK、ARM-OB、DAP等各类仿真下载器来下载;

       两种方法各有优点:USB是TK499专用的下载方式,速度非常快,不依赖下载器,当你把东西寄给客户时,如果要改点什么东西,不用到处找串口,也不用打开什么上位机,直接一根USB搞定;JLINK下载的话,就是开发比较方便,下载仿真,一步到位,也不用来回按那个复位及上电等操作,JLINK有复位指令,直接一步到位,开发的时候比较方便。

        由于KEIL下载的时候,是一个包一个包地发送给单片机的,所以TK499是不知道要下载的程序长度,只能用笨办法,用累加法计算出程序长度。并且KEIL在擦除,编程及校验都复位一次MCU,所以全局变量不能用,本来有简单的方法就可以了,搞到最后还要靠用QSPI FLASH做临时内存,这个下载算法就变得有点复杂了。不知道大家有没有知道这个KEIL在下载的时候,哪里能获取这个下载程序长度的简单方法或者哪里可以弄个标志位,指示哪个包是最后一个包。

下载算法文件,解压后把它放到KEIL目录下\ARM\Flash里面,然后以后所有工程打开后都可以在下载设置里看到TKM32F499GT8的芯片下载算法了,

TKM32F499GT8.rar (67.56 KB)

然后下载方式选择上,选择用仿真器下载

在下载设置里,选择如下图

注意:1、不要选择全片擦除,因为QSPI FLASH上还有其它数据 及 Bootloader,如果都擦除了又得重新下载一次;2、有的工程PA14及PA15仿真下载口已经被占用作普通GPIO了,要记得不要占用下载仿真口;如果你不小心下载了一个下载口已经被占用的程序,那你再也不能用仿真器下载了,解锁方法很简单:1:按住PA1或者PA13,令芯片一上电就进入下载模式,相当于解锁了;2、按住复位不放,在KEIL上点下载,待下载开始后,迅速松开复位,也能解锁(这个方法放也可以用于ST及其它一些国产ARM的cortex-M核的芯片解锁,全是ARM的东西,全系列兼容 );3、或者干脆用USB随便下载一个PA14及PA15仿真口没被占用的程序也能解锁。招数比ST系列的多,爱用哪样用哪样;

最后给出一个设置好的,可以用JLINK仿真下载的工程方便大家参考,其实设置很简单,一般自己设置一下就行

1、TK499_GPIO.rar (282.9 KB)

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入143汤圆

 楼主| 发表于 2020-11-18 18:16:45 | 只看该作者

again 发表于 2020-11-18 14:58
直接强制在中断向量表后面加上固件信息呗

      看样子是个不错的方法,有参考文档吗?我尝试叫工程师试一下。

      现在搞编译器这一块发现资料还是比较少。目前KEIL给出的下载算法参考是以4KB为一个扇区,这么小的扇区已经不太合适大容量的TK499了,要改为64KB为一个扇区,同样也遇到问题,不知是JLINK缓冲太少了,还是编译器哪个文件没弄妥,暂时未能成功,如果成功了,下载速度应该还能加快一些。

出0入0汤圆

发表于 2020-11-22 10:22:20 | 只看该作者

由于KEIL下载的时候,是一个包一个包地发送给单片机的,所以TK499是不知道要下载的程序长度,只能用笨办法,用累加法计算出程序长度。并且KEIL在擦除,编程及校验都复位一次MCU,所以全局变量不能用,本来有简单的方法就可以了,搞到最后还要靠用QSPI FLASH做临时内存,这个下载算法就变得有点复杂了。

你这个芯片是外挂SPI FLASH,  理论上跟H750或者一些外挂FLASH XIP的CM4/7应该没区别啊,那些芯片都有开源的下载算法文件,理论上应该修改下就行,不用特别考虑什么长度啊,扇区大小,复位之类的事情吧。       比如现在火热的H750,人家也是用的一样的SPI FLASH。

出0入143汤圆

 楼主| 发表于 2020-11-22 16:58:30 | 只看该作者

      看了H750的,也是找不到突破口,给函数参数来来回回无非就是:地址,一个包的size,及该包的buf (unsigned long adr, unsigned long sz, unsigned char *buf),KEIL肯定知道要下载程序的长度,但是你总得要KEIL告诉你才行,你下载的时候,是KEIL把数据传给JLINK的。发包的KEIL老大都不知道有没有分发这个长度。就不知道是否还有其它API        4楼的again网友提供的思路也是一个方向,直接解释KEIL第一个传来的包,里面应该有长度信息。

出0入143汤圆

 楼主| 发表于 2020-12-8 11:01:54 | 只看该作者

先不要折腾什么下载,看看能不能读到内核不;为确保仿真口没有设置为普通GPIO,可以到评估板的资料集帖子里任意下载一个简单的程序用USB先烧进去。如果你芯片上跑了禁用仿真口的程序,你是连接不上的。

总结
文章介绍了TKM32F499芯片的下载算法,包括USB直接下载和使用JLINK、ST-LINK、ARM-OB、DAP等仿真下载器下载两种方法。作者分享了下载算法文件的设置方法,并提供了可用JLINK仿真下载的工程示例。文章还讨论了KEIL下载时的一些问题和解决方法,以及对下载速度的优化探讨。最后,引用了一句头文字D的台词,表达了对技术的探索和挑战。