tc39x SOTA
Memory Maps (MEMMAP)
| segment | function |
|---|---|
| 0,2 | reserved |
| 1,3-7 | PSDR,DSPR,PCACHE,DCACHE |
| 8 | cached PFlash and BROM |
| 9 | cached LMU and EMEM |
| 10 | non-cached PFlash,DFlash and BROM |
| 11 | non-cached LMU and EMEM |
| 12-14 | reserved |
| 15 | lower 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)的地址空间范围如下所示:

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 初始化
② 向MARKERL0写入0x00000055
③ 向MARKERH0写入MARKERL0的系统地址
④ 向CONFERMATIONL0写入0x57B5327F
⑤ 向CONFERMATIONH0写入CONFERMATIONL0的系统地址
⑥ 将UCB_OTP0中SWAPEN标志位置为Enable
⑦ 重启MCU
① 将新的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操作错误
寄存器
HF_PROCONTP
(DMU 0xFFC00000 + 0x0084) (UCB 0xAF404000 + 0x41E8)
Tuning Protection Configuration
| Field | Bits | Type | Description |
|---|---|---|---|
| TP | 1 | rh | Tuning Protection |
| BML | [9:8] | rh | Boot Mode Lock 0: c启动评估 HWCFG 引脚 |
| SWAPEN | [17:16] | rh | Enable SOTA mode |
| CPUxDDIS (x=0-5) | x+18 | rh | Disable direct LPB(Local PFlash Bank) access |
| UCB | [31:24] [15:10] [7:1] | rh | Reserved for UCB |
SCU_STMEM1
(SCU 0xF0036000 + 0x0184)
Tuning Protection Configuration
| Field | Bits | Type | Description |
|---|---|---|---|
| 1 | 0 | r | Reserved |
| BMI_VALID | 1 | r | BMI valid flag |
| BOOT_PIN | 2 | r | Configuration from HWCFG pins flag |
| BMHD_COPY | 3 | r | Valid BMHD Copy flag ( ORIG / COPY ) |
| BMHD_INDEX | [5:4] | r | Index of the valid BMHD(0-3) |
| BOOT_CFG | [8:6] | r | Start-up mode effectively taken by SSW (Flash/BSL/ASC/Can BSL) |
| SCRDIS | 9 | r | SCR disabled flag |
| BOOTMODE_CONFIGURED | 10 | r | Boot Mode Configured flag (BMHDx/pins by the last SSW execution) |
| RES | [13:11] | r | Reserved |
| HARREQ | 14 | r | Halt-After-Reset REQuest flag |
| RES | 15 | r | Reserved |
| SWAP_CFG | [17:16] | r | SWAP configuration |
| SWAP_TARGET | 18 | r | UCB_SWAP used for configuration flag (ORIG or COPY) |
| SWAP_DW_INDEX | [23:19] | r | Offset from UCB_SWAP_ORIG/COPY begin |
| RES | [31:24] | r | Reserved |
HF_CONFIRM0
Flash Confirm Status Register 0
PROINBMHDxO (0-3)
PROINBMHDxC (0-3)
PROINSSW
PROINUSER
PROINTEST
PROINSRT
HF_CONFIRM1
Flash Confirm Status Register 1
HF_CONFIRM2
Flash Confirm Status Register 2
PROINOTPxC (0-7)
PROINOTPxO (0-7)
UCB (User Configuration Block)
0xAF40000 - 0xAF405FFF 24 Kbyte
- TC3xx芯片在启动时会运行固化在芯片内部的名为SSW的软件
- SSW软件在运行时可以读取用户的配置信息来进行特定化的启动操作,比如
- SSW运行完后跳转到客户应用程序的起始地址
- RAM是否需要进行初始化等
- 是否需要进行LBIST操作等。
- 而这些可以让用户自定义的配置就是UCB的配置内容
- 运行时可以对系统行为进行调整或保护
Register Address Space
| Module | Base Address | End Address | Note |
|---|---|---|---|
| UCB | AF400000H | AF405FFFH | 24kB in Data Flash 0 UCB(DF0) |
UCB Confirmation
| State | Value | Description |
|---|---|---|
| UNLOCKED | 0x43211234 | Delivery State |
| CONFIRMED | 0x57B5327F | Operational State |
| ERASED | 0x00000000 | Erased State |
| ERRORED | Others | Errored State |
UCB_BMHD0_ORIN/COPY功能详细分析
UCB_BMHD0_ORIN和UCB_BMHD0_COPY用来配置Boot Mode Headers (BMHD),SSW程序在启动时会读取UCB_BMHD0_ORIN和UCB_BMHD0_COPY配置信息进行评估,然后执行对应的操作

- PINDIS: 是否可以通过HWCFG pins外部配置Start-up mode
- HWCFG:程序的Start-up mode选择,比如配置为111B则SSW介绍后直接跳转到Checker Software
- LSENAx: 配置是否使能CPUx的Lockstep monitoring
- LBISTENA: 配置是否在SSW执行LBIST
- CHSWENA:配置SSW程序结束后是否执行CHSW
- STAD:如果是ABM启动,则为Alternate Boot Mode Header的起始地址;如果为Internal 启动,则为用户程序的起始地址
- CRCBMHD: 是BMI + BMHDID +STAD值的CRC32校验值
- CRCBMHD_N: 是BMI + BMHDID +STAD反向值的CRC32校验值
- 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- 往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
| Field | Bits | Type | Description |
|---|---|---|---|
| TP | [0] | rh | Tuning Protection |
| UCB | 7:1, 15:10, 31:24 | rh | Reserved for UCB |
| BML | [9:8] | rw | Boot Mode Lock |
| SWAPEN | [17:16] | rh | Enable SOTA mode |
| CPUxDDIS(x=0-5) | [x+18] | rh | Disable direct LPB access |
UCB_SWAP_ORIG/COPY
(UCB ORIG 0xAF400000 + 0x2E00) (UCB COPY 0xAF400000 + 0x3E00)
UCB23 (x=0-15)

MARKERLx
SWAP [31:0]
- 0x00000000, ERASED, Erased state
- 0x00000055, Selects standard address map
- 0x000000AA, Selects alternate address map
MARKERHx
ADDR [31:0]
- Address of corresponding MARKERLx.SWAP entry as confirmation or erased
CONFIRMATIONLx
CODE [31:0]
- 0x00000000, ERASED, Erased state
- 0x57B5327F, CONFIRMED, Confirmed code
CONFIRMATIONHx
ADDR [31:0]
- Address of corresponding CONFIRMATIONLx.CODE entry as confirmation or erased
缩略词
| 缩写 | 全称 |
|---|---|
| SOTA | Software Updates Over The Air |
| SPB | System Peripheral Bus |
| SRI | Shared Resource Interconnect |
| BBB | Back Bone Bus |
| PSPR | Program Scratch-Pad SRAM |
| DSPR | Data Scratch-Pad SRAM |
| BROM | Boot ROM |
| SSW | Startup Software |
| BMHD | Boot Mode Headers |
| CHSW | Check Software |
| LBIST | Logic Built-in-Self-Test |
| ABM | Alternate Boot Modes |
| SCU | System Control Units |
| BSL | Bootstrap Loaders |
| LPB | local Pflash BanK |
参考
基于Aurix TC3xx SWAP机制(A/B分区)的SOTA实现
demo-Aurix-TC387-SWAP
AURIX-TC3xx基于以太网的OTA研究与实现
AB SWAP on Aurix TriCore platform for OTA
评论