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)的地址空间范围如下所示:
UCB Confirmation
State | Value | Description |
---|---|---|
UNLOCKED | 0x43211234 | Delivery State |
CONFIRMED | 0x57B5327F | Operational State |
ERASED | 0x00000000 | Erased State |
ERRORED | Others | Errored 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 初始化
② 向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操作错误
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_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
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
缩略词
缩写 | 全称 |
---|---|
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 |
评论