1、 前言
本博文讲解英飞凌TC397系列多核单片机的SOTA功能以及代码实现;
所谓SOTA,即是不使用劳特巴赫、UDE或者其他调试器连接Debug口,而是通过CAN总线、UART等方式实现更新应用软件的功能。
说到SOTA,肯定有人会问和FOTA的区别,这里举个简单的例子:比如常见的手机软件升级,如手机中大家经常玩的王者荣耀,王者荣耀这个APP进行升级就认为是SOTA并且你在升级王者荣耀的时候不影响你看电视剧琅琊榜,而有的时候手机会提示你系统已经发布了新的版本,此时若是你选择更新手机系统,手机还会提示你更新过程中保证手机有足够的电量(我遇到这种情况都会连上充电器,以防止更新过程中断电,手机变砖),并且此种情况下,你是无法继续进行追琅琊榜电视剧的。总而言之,FOTA可以理解是一个系统性的升级,SOTA只是一个系统升级里面的APP(应用程序)升级。
2、SOTA功能介绍
常见的SOTA功能实现都是基于单片机开发的BootLoader功能,通过BootLoader完成应用程序的更新,具体方案可以参考我写的单片机IAP方案设计
这里只进行TC397 SOTA方案的讲解,如下:
TC397的PFlash支持两种地址映射方式,从而可以使得应用程序(APP)在编译的时候不需要区分AB区,使用相同的地址即可,简言之一次编译后再A区B区都可以运行。
2.1 TC397的Flash地址映射方式
TC397的PFlash分为Standart Address Map(标准地址映射方式)和Alternate Address Map(备用地址映射)。
标准地址映射方式,如下图,表中PF0~PF5表示物理意义上的5块PFlash
备用地址映射方式,如下图,表中PF0~PF5表示物理意义上的5块PFlash,在次映射模式下,标准模式下的PF0-PF1的地址范围被映射到了PF2-PF3上,而标准模式下PF4的地址范围被映射到了PF5。
3、TC397的SOTA功能
当配置寄存器开启SOTA功能时,PFlash的空间被划分为两个部分,一部分用来存储可执行代码(被称为Active bank),另一部分可用来写入和读取(被称为Inactive bank),当应用程序(APP)更新校验完成后,执行SWAP功能,重启后两个区进行互换,其实就是这两种映射地址进行切换,在标准地址模式下使用PF0-PF1和PF4作为Active bank(通常称为A区或A bank),在备用地址模式下使用PF2-PF3和PF5作为Active bank(通常称为B区或B bank)。
TC397 SOTA地址映射的参数在UCB(User Configuration Block)中进行配置,在UCB中配置后,需要重新复位MCU之前的配置才会生效。在使用SOTA功能之前,一定要先看一下手册中的UCB章节,UCB除了可以配置SOTA功能外,还关系到程序能否正常运行、是否可以链接调试器,若是一不小心配置失误,就有可能锁芯片,一旦芯片是由于操作UCB失误锁止,芯片基本上就报废只能吹下来,重新焊一颗新的。
4、TC397 SOTA的配置参数
TC397 SOTA相关的配置寄存器如下图:
(1) SOTA Mode Enable
该参数决定TC397芯片是否启动SOTA模式,设置寄存器Tuning Protection Configuration的bit16和bit17位1,即可使能SOTA功能,使能后跟SOTA相关的其它配置参数有效的情况下,系统复位之后再次启动后便会进入SOTA模式。
(2) Bank Swap
这个寄存器组主要是用来配置PFLASH地址映射的一组寄存器,用来选择使用Standard Address Map(标准地址映射方式)还是Alternate Address Map(备用地址映射方式)。其中需要我们修改的是前4个参数和最后一个CONFIRMATION参数,UCB如下图所示
<1> UCB_SWAP_ORIG_MARKERLx.SWAP用来选择是标准地址映射还是备用地址映射,
当向UCB_SWAP_ORIG_MARKERLx.SWAP写入0x55时表示复位重启后使用标准地址映射(即是执行A Bank区域的代码)。
当向UCB_SWAP_ORIG_MARKERLx.SWAP写入0xAA时,表示复位重启后使用备用地址模式(即执行B Bank区域的代码)。
<2> UCB_SWAP_ORIG_MARKERHx.ADDR是对应UCB_SWAP_ORIG_MARKERLx.SWAP寄存器的地址,用来做校验用。
<3> UCB_SWAP_ORIG_CONFIRMATIONLx.CODE是确认代码,用于进一步确认,在操作时需要向此寄存器中写入0x57B5327F,写入后上面操作的UCB_SWAP_ORIG_MARKERLx.SWAP才会有效。
<4> UCB_SWAP_ORIG_CONFIRMATIONHx.ADDR是用来存放UCB_SWAP_ORGI_CONFIRMATIONLx.CODE寄存器的地址,也是用来做效验的。
(3) CPUxDDIS配置参数
此配置参数的作用是禁止CPU直接访问PFlash Bank,而是通过SRI进行访问PFlash Bank,此配置参数跟SOTA使能参数在同一个寄存器中(Tuning Protection Configuration)