tc39x SOTA

Memory Maps (MEMMAP)

segmentfunction
0,2reserved
1,3-7PSDR,DSPR,PCACHE,DCACHE
8cached PFlash and BROM
9cached LMU and EMEM
10non-cached PFlash,DFlash and BROM
11non-cached LMU and EMEM
12-14reserved
15lower 128M SPB, upper 128M SRI

如下图,相同的flash区域,通过在不同的segment的map实现不同的功能

SOTA MAP

  • PFlash 分为 A/B 大小相同的bank
  • tc397的PF0-5共计16M,但是tc397的PF4-5大小的限制,导致的升级的ota大小支持最大3M+3M+1M=7M

通过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。

SWAP配置及注意事项

  • 调整Linker文件(链接文件)
  • App程序开发,生成可执行文件(.bin、.Hex等)
  • 可执行文件烧录到PFlash中
  • 配置SWAP,包括:A/B选择配置,SWAP使能

调整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。

如果是两个link的话,如何管控 ??
如果是一个link的话,如何知道升级的a or b?

swap配置

配置SWAP,需要配置UCB23(ORIG)和UCB31(COPY),选择映射地址。UCB位于DFlash0区域,UCB23(ORIG)和UCB31(COPY)的地址空间范围如下所示: UCB23的格式固定如下:

UCB Confirmation

StateValueDescription
UNLOCKED0x43211234Delivery State
CONFIRMED0x57B5327FOperational State
ERASED0x00000000Erased State
ERROREDOthersErrored State

swap的激活配置,索引在寄存器SCU_STMEM1中设置

SCU_STMEM1.SWAP_CFG: SWAP configuration
SCU_STMEM1.SWAP_TARGET: UCB_SWAP used for configuration flag (ORIG/COPY)
SCU_STMEM1.SWAP_DW_INDEX: Offset from UCB_SWAP_ORIG/COPY begin

swap 初始化

① 用烧写器把APP烧写进PFlash的组A地址处
② 向MARKERL0写入0x00000055
③ 向MARKERH0写入MARKERL0的系统地址
④ 向CONFERMATIONL0写入0x57B5327F
⑤ 向CONFERMATIONH0写入CONFERMATIONL0的系统地址
⑥ 将UCB_OTP0中SWAPEN标志位置为Enable
⑦ 重启MCU

进行APP更新的步骤:
① 将新的APP写入PFlash中未激活的部分,即上文提到的Inactive Bank,并进行准确性校验
② 如果新的APP被写入组B,则向MARKERLx.SWAP写入0x000000AA,启用Alternate地址映射模式;如果新的APP被写入组A,则向MARKERLx.SWAP写入0x00000055,启用标准地址映射模式。(x是0-15的值,从0开始向上递增,由上文可知UCB_SWAP最多能存储16组标志值,存满后再擦除重新写入。)
③ MARKERHx.ADDR、CONFIRMATIONLx.CODE和CONFIRMATIONHx.ADDR配置同上文
④ 向CONFIRMATIONL(x-1).CODE再次写入0xFFFFFFFF,来使上一组UCB_SWAP值失效。向PFlash再次写入全1的值不会导致PFlash操作错误

UCB (User Configuration Block)

0xAF40000 - 0xAF405FFF 24 Kbyte

  • TC3xx芯片在启动时会运行固化在芯片内部的名为SSW的软件
  • SSW软件在运行时可以读取用户的配置信息来进行特定化的启动操作,比如
    • SSW运行完后跳转到客户应用程序的起始地址
    • RAM是否需要进行初始化等
    • 是否需要进行LBIST操作等。
  • 而这些可以让用户自定义的配置就是UCB的配置内容
  • 运行时可以对系统行为进行调整或保护

Register Address Space

ModuleBase AddressEnd AddressNote
UCBAF400000HAF405FFFH24kB in Data Flash 0 UCB(DF0)

UCB_BMHD0_ORIN/COPY功能详细分析

UCB_BMHD0_ORIN和UCB_BMHD0_COPY用来配置Boot Mode Headers (BMHD),SSW程序在启动时会读取UCB_BMHD0_ORIN和UCB_BMHD0_COPY配置信息进行评估,然后执行对应的操作 UCB00 Boot Mode Header(BMHD): 4块

  • PINDIS: 是否可以通过HWCFG pins外部配置Start-up mode
  • HWCFG:程序的Start-up mode选择,比如配置为111B则SSW介绍后直接跳转到Checker Software
  • LSENAx: 配置是否使能CPUx的Lockstep monitoring
  • LBISTENA: 配置是否在SSW执行LBIST
  • CHSWENA:配置SSW程序结束后是否执行CHSW
  1. STAD:如果是ABM启动,则为Alternate Boot Mode Header的起始地址;如果为Internal 启动,则为用户程序的起始地址
  2. CRCBMHD: 是BMI + BMHDID +STAD值的CRC32校验值
  3. CRCBMHD_N: 是BMI + BMHDID +STAD反向值的CRC32校验值
  4. PW0-PW7: 给UCB_BMHD0_ORIN和UCB_BMHD0_COPY安装(Install)密码(Password),如果我们在运行时想要修改UCB_BMHD0_ORIN和UCB_BMHD0_COPY的内容,需要通过Disable Protection指令传入Password进行match后才能修改。
1ST 553CH, UC
2ST.W 553CH, PW0
3ST.W 553CH, PW1
4ST.W 553CH, PW2
5ST.W 553CH, PW3
6ST.W 553CH, PW4
7ST.W 553CH, PW5
8ST.W 553CH, PW6
9ST.W 553CH, PW7
  1. 往Confirmation位域中写入特定的值就能让Confirmation处于:UNLOCKED, CONFIRMATION,ERASED,ERRORED四种状态之一

UCB_PFLASH_ORIG/COPY

UCB16

PFLASH p Sector x Locked for Write Protection HP_PROCONPi0 (i=0-5) SxL (x=0-31) HP_PROCONPi1 (i=0-5) SxL (x=32-63) HP_PROCONPi5 (i=0-5) SxL (x=160-191)

UCB_OTPy_ORIG/COPY (y = 0 - 7)

The layout of UCB33 to UCB47 is identical to UCB32 but on different offset addresses (see Table 216) and therefore not shown here.

UCB32

PFLASH p Sector x Locked for Forever HP_PROCONOTPi0 (i=0-5) SxROM (x=0-31) HP_PROCONOTPi1 (i=0-5) SxROM (x=32-63) HP_PROCONOTPi5 (i=0-5) SxROM (x=160-191)

HF_PROCONTP

0xAF40 0000 + 0x41E8

FieldBitsTypeDescription
TP[0]rhTuning Protection
UCB7:1,
15:10,
31:24
rhReserved for UCB
BML[9:8]rwBoot Mode Lock
SWAPEN[17:16]rhEnable SOTA mode
CPUxDDIS(x=0-5)[x+18]rhDisable direct LPB access

UCB_SWAP_ORIG/COPY

UCB23

MARKERLx (x=0-15)

SWAP [31:0]

  • 0x00000000, ERASED, Erased state
  • 0x00000055, Selects standard address map
  • 0x000000AA, Selects alternate address map

MARKERHx (x=0-15)

ADDR [31:0]

  • Address of corresponding MARKERLx.SWAP entry as confirmation or erased

CONFIRMATIONLx (x=0-15)

CODE [31:0]

  • 0x00000000, ERASED, Erased state
  • 0x57B5327F, CONFIRMED, Confirmed code

CONFIRMATIONHx (x=0-15)

ADDR [31:0]

  • Address of corresponding CONFIRMATIONLx.CODE entry as confirmation or erased

缩略词

缩写全称
SOTASoftware Updates Over The Air
SPBSystem Peripheral Bus
SRIShared Resource Interconnect
BBBBack Bone Bus
PSPRProgram Scratch-Pad SRAM
DSPRData Scratch-Pad SRAM
BROMBoot ROM
SSWStartup Software
BMHDBoot Mode Headers
CHSWCheck Software
LBISTLogic Built-in-Self-Test
ABMAlternate Boot Modes
SCUSystem Control Units
BSLBootstrap Loaders
LPBlocal Pflash BanK

参考

基于Aurix TC3xx SWAP机制(A/B分区)的SOTA实现
demo-Aurix-TC387-SWAP