芯旺微 KungFu系列之KF32A156的boot loader的CAN协议UDS升级应用说明
请尊重原创,转载本文需注明源出处!!!
hello大家好!bootloader升级在MCU的程序设计中常常用到。那本篇主要根据官方例程 来说说 can通讯 UDS协议进行APP升级。
一、首先不管什么通讯进行升级,都要说明一下bootloader升级需要先了解的一些知识点:
1、向量表重映射:
boot和APP各自有各自的中断向量表,而当 app启动后需要将 boot 程序的向量表切换为 app 程序自己的向量表。这里就涉及到如何去将向量表的初始值进行修改,那这里就是通过向 SYS_VECTOFF 赋值 app 程序偏移地址的方式实现重映射过程。
2、APP程序地址偏移:
因为IDE的编译默认是从0x00000000地址开始放置指令的,但是前面的地址已经被放置boot程序,故这里需要进行将APP程序初始地址进行偏移。具体设置方法如下:
(1)、ChipON IDE\KungFu32\ChiponCC32\scripting\ccr1_issue 找到对应芯片型号的 xxx.ld链接文件,将其复制到工程目录下。
(2)、打开 ld 文件后可以看到对应记录的 flash 起始地址和大
小。本此示例中将 boot 程序大小限制在 0x8000,所以将 app 的起始地址修改为 0x0000 8000。
(3)、最后,将修改好的 ld 文件在 IDE 中生效: 选中项目->右键->属性->C/C++构建->设置->通用设定->芯片脚本文件写入 -T"…/KF32F156MQV.ld" ->应用->确定。
**注意事项:**为了避免 boot 区程序超过界限,应当在 boot 程序中配置程序大小为 0x8000。
app的 ld 文件配置图示如下:
app的 工程属性 配置配置图示如下:
**这里有一个提醒:**就是从BOOT跳转到APP的时候,在 startup() 函数没有调整过的前提下,在app跑起来的时候会对ram进行初始化,但是对于boot程序配置的寄存器来说,是依然保留的。如果需要则可以进行保留,不需要挥着需要更改则可以进行该外设的重新初始化。
二、当我们把官方例程的BOOT和APP 程序编译完成后,即可进行升级流程的操作。这里篇幅问题就不说具体UDS流程部分的程序,感兴趣的可以自行研究。
实验所需:156demo板或者自己的板子均可,官方提供的boot和app程序,KF32烧录器,can卡(官网使用的是图莫斯,我这里使用的是周立功的can卡,上位机是ZCANPRO),连接线若干。
1、boot程序下载,将官方提供的boot程序编译完成后,将程序下载至demo板上,官方使用的使用的CANFD6进行升级的。USB端口可以打印串口数据至电脑端查看。当我们下载完成后,串口数据打印出来如下图:
2、先将APP程序进行编译。can卡和板子连接完好。然后对ZCANPRO进行配置,步骤:打开CANPRO软件,打开设备,设置成500k,其他不在赘述。连接完成后我们选择 高级功能 — ECU刷新 其他配置可以参考下图:
可以自行对照此流程在左边的方框内进行添加流程,配置文件下载时,加载HEX时按照图示配置即可。配置完成后点击 应用到执行器 , 弹出如下弹框后 点击 开始刷写 ,即可开始刷写。
刷写过程如下图示:
直到刷写完成后 弹出如下框:
由于刷写完成后有复位的指令,此时可以在串口打印工具中看到此时程序已经运行到APP,如图:
以上操作即可实现整个过程。具体的UDS协议客户可根据自身要求进行修改。本次演示就结束啦。
例程可以去芯旺微的GITEE上下载,都是免费提供给大家学习的,也可以找对应的FAE进行获取。
本文第一次编写时间:2023 10 30!