文章目录
- 前言
- Firmware启动过程
- BMHD Check流程
- ABM启动
- Internal Flash启动
- Bootloader Mode
- Processing in case no valid BMHD found
- Processing in case no Boot Mode configured by SSW
- 总结
前言
之前介绍过UCB BMHD的使用,它在启动过程中起着重要的作用,本文详细介绍TC3xx的启动过程中的硬件启动阶段-Boot Firmware
Firmware启动过程
Firmware存储在BootRom中
BROM是内置在芯片内的一块存储区域,这块存储区通常为只读存储区,可用于存储Firmware程序,之后,由Firmware引导程序启动。如下,为Tc3xx的BROM地址,8开头带cache,A开头不带cache
SSW在CPU0上执行——所有其他cpu在引导期间保持Halt状态,由用户软件启动,而:
BootROM中的SSW起始地址为CPU0程序计数器寄存器中的复位值。从这个位置获取一条指令,这是任何设备启动后执行的第一条指令
-在此入口点之后,固件立即检查testmode,如果选择testmode,则执行跳转到测试固件
最后一条SSW指令执行跳转到第一条用户代码指令。根据用户选择的启动配置,可以从不同的位置获取第一个用户指令
启动软件包含根据以下一项或多项初始化设备的过程
-先前存储在专用闪存位置的信息
-专用寄存器/内存位置的特殊位/字段的当前状态
-触发ssw执行的事件类型(最后一次重置事件)
-应用于外部(配置-)引脚的值(可选)
BMHD Check流程
BMHD从0-3依次进行check,如果找到有效的BMHD,则不会check后面的了
BMHD校验有效后,会获取PINDIS,如果=0,且DMU_HF_PROCONTP.BML等于0时
会获取STSTAT.HWCFG [3],当为0时,通过HWCFG4,5来确认要执行的模式,否则从BMHD中的BMI字段获取启动模式
ABM启动
Alternate Boot Mode备用启动模式处理由备用启动模式标头的内容控制。表47中定义了单个备用启动模式头的结构。
当选择ABM启动时,BMHD中的STAD地址需要设置为ABMHD的地址
ABMHD可以是pflash上的任意一块地址
而在ABMHD中的STADABM中定义用户的起始地址
ABM模式可以校验用户的内存区域,在上图的Code CRC校验处,可以作为简单的校验用户的boot
使用的应该是和BMHD一样的校验算法
当校验失败时,如果是从HW启动的(在BMHD阶段会Set BOOT_PIN Flag),则会再次根据PIN4,5的状态来加载是ASC还是Generic BSL(01 Generic,10 ASC)
BOOT_PIN在如下寄存器中:
Internal Flash启动
内部flash启动,一般正常启动时用的就是这种方式
-这是通常的简单启动模式,其中执行是从内部flash开始的
-起始地址由启动模式头(BMHDx.STAD)定义
如果是HW PIN方式,则需要PIN4,5都为高电平
如果不是HW PIN方式,则根据BMHD中的BMI的HWCFG寄存器位决定,需要设置为111
Bootloader Mode
根据HW PIN或BMHD中的HWCFG来决定选哪个内部boot
Processing in case no valid BMHD found
如果上述序列没有找到有效的引导模式标头,则SSW不会执行用户代码。SSW准备设备,以便用户可以连接、安装有效的Boot Mode Headers、将应用程序代码写入PFlash或安装其他设备配置。
- 检查设备是否启用了“默认配置”—条件是HSM启动被禁用
(DMU_SP_PROCONHSMCCFG.HSMBOOTEN=0)和启动模式锁定未激活
(DMU_HF_PROCONTP.BML = 00 b)
a)如果是-在SCU_STMEM1寄存器中设置标志BOOTMODE_CONFIGURED=1,继续下一步
b)如果不是-指示“No Boot Mode configured”(在SCU_STMEM1寄存器中重置标志BOOTMODE_CONFIGURED),然后转到步骤4
注意: 这种Case下, Processing in case no Boot Mode configured by SSW将会被执行 - initialize security sensitive RAMs
- 检查是否收到Reset后暂停请求(CBS_OSTATE.HARR=1)(eg:debugger)
a)如果是,将BOOT_CFG安装为Flash方式内部启动-对应0b111
b)如果不是- install BOOT_CFG to Generic BSL mode-对应0b100,将CPU0程序暂存内存(CPU0_PSPR)的第一个地址作为用户码起始地址安装到BOOT_ADDR中,然后执行步骤5 - 在PFLASH0的逻辑扇区S40中安装偏移量为0x0020的地址(即0xA000A020),作为用户代码启动地址进入BOOT_ADDR
- 保存启动模式信息,以便HSM和应用软件可用
a)配置启动模式BOOT_CFG -在SCU_STMEM1寄存器中
b)配置启动地址BOOT_ADDR -在SCU_STMEM2[31:2](地址是word对齐的-位[1:0]在这里不改变) - 当没有找到有效的BMI时配置锁步监控功能-设置SCU_LCLCON0.LSEN0=0 (disable lockstep for CPU0)
Processing in case no Boot Mode configured by SSW
如果最初没有找到有效的启动模式头,并且上述序列(在没有找到有效BMHD的情况下进行处理)在其第一步退出(因为设备的“默认配置”被禁用)- SSW不能选择任何启动模式,这意味着不会有效地退出SSW。
在这种情况下,SSW流程是(参见图20):
检查设备是否允许调试访问
—if yes - enable debug access by installing CBS_OSTATE.IF_LCK to 1 (done using CBS_OEC register)
else -enter endless NOP loop
-没有设置启动模式,SSW会进入无限循环。
-如果调试接口没有被HSM锁定,调试器仍然可以连接到设备重新编程
此处的CBS_OSTATE在手册中查不到,需要到OCDS文档中查,目前没有该文档。对应为Cerberus寄存器中的OSCU寄存器中的OSTATE
总结
硬件Firmware启动需要Check BMHD,在开发过程中,通过四个BMHD设置不同的起始地址(第一个BMHD设置为Boot起始地址,后面设置为APP起始地址),可以实现Boot不存在时,单APP也可以正常启动。跳转到BMHD的起始地址后,后面的启动过程就是用户可以修改的了,后面会再介绍~