随着芯片资源的不断扩充,增加了app(application)升级方式的多样性。比如,本文要讨论的sota(software updates over the air),通过aurix tc3xx swap机制,使得app的升级更加便捷。本文讨论实现sota的一些关键性问题:
aurix tc3xx的内存映射机制
swap配置及注意事项
1 aurix tc3xx的内存映射机制
如果要支持swap功能,首先,硬件的内存资源需要足够。因为swap功能需要两个等大小的物理内存空间,用以存储程序。eg:app程序的大小为3mbyte,如果要支持swap功能,至少需要硬件的pflash空间>6mbyte。先看一下tc39x手册中的内存空间及映射机制:
一、standard address map
不启用sota功能时,app程序可以存在如下所示的pf0(program flash0)~ pf5(program flash5)中,空间大小共计16mbyte,16mbyte的空间划分在segement a,如下所示:
二、alternate address map
启用sota功能时,pflash被划分为两个bank group,即:a-banks和b-banks,这也就是我们常说的a/b分区,其中一个banks被映射到cpu的可执行空间,这个banks被称为激活区(active banks),未被映射到cpu执行空间的banks被称为非激活区(inactive banks)。其中,pf0、pf1、pf4映射到a-banks,pf2、pf3、pf5映射到b-banks,如下所示:
对于tc39x,swap的空间可以达到7mbyte,a/b分区如下所示:
a-banks和b-banks各使用7m的物理内存空间,而程序实际运行时,均可以映射到0xa0000000起始的虚拟地址空间,如下所示:
注意:
通过dmu(data memory unit)操作flash时,需要操作pflash映射的物理地址空间。即:active banks擦除inactive banks时,需要按照inactive banks映射的地址空间擦/写。
eg:a-banks(active banks)的起始地址0xa0000000,b-banks(inactive banks)的起始地址0xa0600000,a-banks操作flash driver擦/写b-banks时,操作的起始地址为0xa0600000。
2 swap配置及注意事项
1、swap使用的基本流程
对于swap功能的使能,包括基本的4个流程:
调整linker文件(链接文件);
软件开发,主要指app程序开发,生成可执行文件(*.bin、*.hex等);
将可执行文件烧录到pflash中;
配置swap,包括:a/b选择配置,swap使能。
对应流程如下所示:
注意:这里的reset,不能是application reset,推荐system reset。 (1)调整linker文件 这里给出一个linker文件调整的示意(不带hsm(hardware security module)),如下所示:
对于tc397,a/b均可以分配7m空间,之后根据调整的链接文件,分别编译project a和project b,即:project a对应a-banks的linker a,project b对应b-banks的linker b,一般处理时,linker a和linker b共用同一个链接文件。 本文关注的核心点:configuring swap。
2、swap配置
配置swap,需要配置ucb23(orig)和ucb31(copy),选择映射地址。ucb位于dflash0区域,ucb23(orig)和ucb31(copy)的地址空间范围如下所示:
ucb23的格式固定如下:
swap的实例最多可以配置16个,但是,固件ssw(startup software )只选择最后一个有效的执行。 (一)ucb_swap_orig_markerlx(x=0~15) swap位域设置地址映射方式,即:上述提到的std(standard address map,0x55),alt(alternate address map,0xaa),如下所示:
(二)ucb_swap_orig_markerhx(x=0~15)
markerhx中存放对应markerlx.swap的入口地址。
(三)ucb_swap_orig_confirmationlx(x=0~15)
如果要markerlx.swap有效,需要在ucb_swap_orig_confirmationlx寄存器中写入固定值0x57b5327f。
(四)ucb_swap_orig_confirmationhx(x=0~15)
存放confirmationlx.code的入口地址。
(五)swap配置的代码实现
swap的配置是swap使能的前提,如上的(1)~(4)的代码实现示意如下:
/* memory a/b swap */void swap_configandenable(uint32 map){ /* ucb_swap_copy */ ucb_erase(ucb_swap_copy); ucb_write(ucb_swap_copy, map, ucb_swap_copy); ucb_write(ucb_swap_copy + 8, confirmedcode, ucb_swap_copy + 8); ucb_write(ucb_swap_copy + 0x1f0, unlockcode, 0x00000000); /* ucb_swap_orig */ ucb_erase(ucb_swap_orig); ucb_write(ucb_swap_orig, map, ucb_swap_orig); ucb_write(ucb_swap_orig + 8, confirmedcode, ucb_swap_orig + 8); ucb_write(ucb_swap_orig + 0x1f0, unlockcode, 0x00000000); /* enable swap */ ucb_write(ucb_otp0_copy + 0x1e8, 0x00030000, 0x00000000); ucb_write(ucb_otp0_orig + 0x1e8, 0x00030000, 0x00000000);}
swap的禁用代码示意如下:
/* swap disable */void swap_disable(void){ // erase ucb31(ucb_swap_copy) ucb_erase(ucb_swap_copy); // write confirmation code into ucb31 ucb_write(ucb_swap_copy + 0x1f0, unlockcode, (uint32)0x00000000); // delete ucb23(ucb_swap_orig) ucb_erase(ucb_swap_orig); // write confirmation code into ucb23 ucb_write(ucb_swap_orig + 0x1f0, unlockcode, (uint32)0x00000000); // erase ucb40(ucb_otp0_copy) ucb_erase(ucb_otp0_copy); // write confirmation code into ucb40 ucb_write(ucb_otp0_copy + 0x1f0, unlockcode, (uint32)0x00000000); // erase ucb32(ucb_otp0_orig) ucb_erase(ucb_otp0_orig); // write confirmation code into ucb32 ucb_write(ucb_otp0_orig + 0x1f0, unlockcode, (uint32)0x00000000);}
提示:
这里的map = 0x55或者0xaa;
ucb23对应的confirmation寄存器配置成unlockcode模式(0x43211234)。
3、swap使能 swap的使能需要配置ucb_otpx_orig(x = 0~7),如下所示:
启动阶段,ssw会校验ucb_otp0~7:
默认校验ucb_otp0(在confirmed或者unlocked状态下均会校验);
对于ucb_otp1~7,只有在confirmed状态下才会校验;
如果orig区无效,会校验对应的copy区。
使能swap,需要配置ucb32的procontp寄存器(offset = 41e8h),即:向0xaf4041e8地址写入0x00030000。
swap的初始化流程如下所示:
注意:使能swap功能之前,需要确保ucb_swap_orig和ucb_swap_copy已完成配置。swapen配置使能以后,执行system reset生效。 当ucb32的procontp寄存器配置使能以后,可以通过读取hf_procontp的swapen位域确认sota的使能情况,如下所示:
软件可以通过读取scu_stmem1寄存器的swap_cfg位域确认当前激活的banks,如下所示:
4、swap配置不当导致的锁板风险
对于swap的使用,要特别的注意,否则就会导致板子锁死,且不可不恢复,如下所示:
介绍一款AD8602ARZ-REEL低功耗运算放大器
数字化转型变革,探第三方检验检测行业未来
中国汽车产业产能过剩问题日渐浮现,一汽-大众布局有条不紊
“燃一夏”上线 怪兽充电推出刘昊然“好燃先生”定制充电宝
Bluetooth跳频网络Piconet闻干扰分析研究
基于Aurix TC3xx SWAP机制的SOTA实现
AMD Vega显卡不会跳票 但你得准备好大电源:Vega显卡功耗巨高!
中国彩电前三季出货量为3460万台,同比下降2.8%,小米排名第一
逻辑角度展望未来2~3年的配网自动化设备市场
如何推动智慧城市的运转
2023 WAIC图技术激活数据要素论坛圆满召开!
基于PoA的系统将是私有区块链的最佳解决方案
致真精密仪器丨磁场探针台系列的应用参数分析
呵护口腔健康的冲牙器品牌 洁碧和心诺更受青睐
IBM芯片技术获突破 光信号超级PC将成现实
国外达人破解亚马逊Echo成监听设备 可远程窃听你发出的一切声音
HarmonyOS 4发布 软通动力全力拥抱新Harmony生态
STM32最小系统组成详解
到2021年底,可穿戴设备市值将高达450亿美元,年出货量将超过2.5亿
工业物联网如何解决智慧钢厂的数据采集需求