当前位置: 首页 > news >正文

TC3xx学习笔记-启动过程详解(一)

文章目录

    • 前言
    • 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 BSL01 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或安装其他设备配置。
在这里插入图片描述

  1. 检查设备是否启用了“默认配置”—条件是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将会被执行
  2. initialize security sensitive RAMs
  3. 检查是否收到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
  4. 在PFLASH0的逻辑扇区S40中安装偏移量为0x0020的地址(即0xA000A020),作为用户代码启动地址进入BOOT_ADDR
  5. 保存启动模式信息,以便HSM和应用软件可用

    a)配置启动模式BOOT_CFG -在SCU_STMEM1寄存器中

    b)配置启动地址BOOT_ADDR -在SCU_STMEM2[31:2](地址是word对齐的-位[1:0]在这里不改变)
  6. 当没有找到有效的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的起始地址后,后面的启动过程就是用户可以修改的了,后面会再介绍~

http://www.lqws.cn/news/83737.html

相关文章:

  • Arch安装botw-save-state
  • deep forest安装及使用教程
  • 一步一步配置 Ubuntu Server 的 NodeJS 服务器详细实录——4. 配置服务器终端环境 zsh , oh my zsh, vim
  • 基于爬取的典籍数据重新设计前端界面
  • 前端八股之CSS
  • 推荐一款使用html开发桌面应用的工具——mixone
  • 力扣HOT100之多维动态规划:62. 不同路径
  • 力扣HOT100之多维动态规划:64. 最小路径和
  • 量子物理:深入学习量子物理的基本概念与应用
  • Python_day43
  • Linux运维笔记:服务器感染 netools 病毒案例
  • mysql专题上
  • Vue 项目创建教程 (开发前的准备工作保姆级辅助文档)
  • 专注成就技术传奇:一路向前的力量
  • 数学建模期末速成 最短路径
  • Ubuntu22.04 安装 ROS2 Humble
  • Spark-TTS: AI语音合成的“变声大师“
  • ubuntu 添加应用到启动菜单
  • P5684 [CSP-J2019 江西] 非回文串 题解
  • Webpack依赖
  • Android高级开发第四篇 - JNI性能优化技巧和高级调试方法
  • 网络攻防技术三:网络脆弱性分析
  • 高阶数据结构——并查集
  • C语言基础(10)【二维数组 字符数组 字符串相关操作】
  • DAY01:【ML 第三弹】基本概念和建模流程
  • pytorch基本运算-范数
  • SCAU8640--希尔排序
  • 【知识点】第3章:基本数据类型
  • Python基础入门:开启编程之旅
  • 【算法训练营Day05】哈希表part1