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 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的起始地址后,后面的启动过程就是用户可以修改的了,后面会再介绍~
相关文章:

TC3xx学习笔记-启动过程详解(一)
文章目录 前言Firmware启动过程BMHD Check流程ABM启动Internal Flash启动Bootloader ModeProcessing in case no valid BMHD foundProcessing in case no Boot Mode configured by SSW 总结 前言 之前介绍过UCB BMHD的使用,它在启动过程中起着重要的作用࿰…...

Scratch节日 | 六一儿童节抓糖果
六一儿童节怎么能没有糖果?这款 六一儿童节抓糖果 小游戏,让你变身小猫,开启一场甜蜜大作战! 🎮 游戏玩法 帮助小猫收集所有丢失的糖果,收集越多分数越高! 小心虫子一样的“坏糖果”ÿ…...
系统调用与程序接口的关系
程序接口类型 系统调用:是操作系统提供给应用程序的接口 ,允许应用程序请求操作系统执行特定操作,像文件操作(打开、读写、关闭文件 )、进程管理(创建、终止进程 )、设备管理(操作磁…...
从线性方程组角度理解公式 s=n−r(3E−A)
从线性方程组角度理解公式 sn−r(3E−A) 这个公式本质上是 齐次线性方程组解空间维度 的直接体现。下面通过三个关键步骤解释其在线性方程组中的含义: 1. 公式对应的线性方程组 考虑矩阵方程: (3E−A)x0 其中: x 是 n 维未知向量3E−…...

通信算法之280:无人机侦测模块知识框架思维导图
1. 无人机侦测模块知识框架思维导图, 见文末章节。 2. OFDM参数估计,基于循环自相关特性。 3. 无人机其它参数估计...

【Doris基础】Apache Doris中的Coordinator节点作用详解
目录 1 Doris架构概述 2 Coordinator节点的核心作用 2.1 查询协调与调度 2.2 执行计划生成与优化 2.3 资源管理与负载均衡 2.4 容错与故障恢复 3 Coordinator节点的关键实现机制 3.1 两阶段执行模型 3.2 流水线执行引擎 3.3 分布式事务管理 4 Coordinator节点的高可…...
软考 系统架构设计师之考试感悟3
接前一篇文章:软考 系统架构设计师之考试感悟2 上周六(2025年5月24日),本人第三次参加了软考系统架构师的考试。和前两次一样,考了一天,身心俱疲。不过这次感觉比上一次要稍微好点,可能也是考的…...

【Kubernetes-1.30】--containerd部署
文章目录 一、环境准备1.1 三台服务器1.2 基础配置(三台机通用)1.3 关闭 Swap(必须)1.4 关闭防火墙(可选)1.5 加载必要模块 & 配置内核参数 二、安装容器运行时(containerd 推荐)…...
Flutter 嵌套H5 传参数
你可以通过在加载 H5 页面时,将 token 作为 URL 参数拼接,或者通过 WebView 的 JavaScript 通信功能(如 runJavaScript 或 addJavaScriptChannel)传递 token。常用方式如下: 方式一:URL 拼接参数 假设你的…...
什么是线程上下文切换?
导语: 线程上下文切换(Context Switch)是Java并发编程中一个常见但容易被忽视的概念。在高并发场景下,它直接影响系统性能。本文将从面试官角度深入剖析这个话题,帮你理解底层原理、掌握优化思路、规避项目中的常见陷阱…...
Jvm 元空间大小分配原则
JVM元空间(Metaspace)的大小分配原则与系统物理内存密切相关,但并不是直接等比例分配,而是通过一系列参数和JVM的动态管理机制来确定。下面从原理和实际行为两方面详细说明: 1. 元空间(Metaspace࿰…...

相机--相机标定
教程 内外参公式及讲解 相机标定分类 相机标定分为内参标定和外参标定。 相机成像原理 相机成像畸变 链接 四个坐标系的转变 内参标定 内参 相机内参通常用一个 33 矩阵(内参矩阵,KK)表示,形式如下: (1)焦距&…...

MongoDB(七) - MongoDB副本集安装与配置
文章目录 前言一、下载MongoDB1. 下载MongoDB2. 上传安装包3. 创建相关目录 二、安装配置MongoDB1. 解压MongoDB安装包2. 重命名MongoDB文件夹名称3. 修改配置文件4. 分发MongoDB文件夹5. 配置环境变量6. 启动副本集7. 进入MongoDB客户端8. 初始化副本集8.1 初始化副本集8.2 添…...

131. 分割回文串-两种回溯思路
我们可以将字符串分割成若干回文子串,返回所有可能的方案。如果将问题分解,可以表示为分割长度为n-1的子字符串,这与原问题性质相同,因此可以采用递归方法解决。 为什么回溯与递归存在联系?在解决这个问题时࿰…...

[Java恶补day13] 53. 最大子数组和
休息了一天,开始补上! 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组是数组中的一个连续部分。 示例 1: 输入:nums …...

摩尔投票算法原理实现一文剖析
摩尔投票算法原理&实现一文剖析 一、算法原理1.1 基本思想1.2 数学原理 二、算法实现2.1 Python实现2.2 Java实现2.3 C实现 三、复杂度分析四、应用场景4.1 多数元素问题4.2 扩展应用:寻找出现次数超过n/3的元素 五、算法优势与注意事项5.1 优势5.2 注意事项 总…...
springboot项目下面的单元测试注入的RedisConnectionFactory类redisConnectionFactory值为什么为空呢?
你遇到的问题是: RedisConnectionFactory redisConnectionFactory 在单元测试中为 null 这是 Spring Boot 单元测试中非常常见的问题,根本原因是你的测试类没有启用 Spring 容器上下文,导致 Resource 注解无法注入 Bean。 ✅ 正确做法&…...

MyBatis操作数据库(2)
1.#{}和${}使用 Interger类型的参数可以看到这里显示的语句是:select username,password,age,gender,phone from userinfo where id? 输入的参数并没有在后面进行拼接,,id的值是使用?进行占位,这种sql称之为"预编译sql".这里,把#{}改成${}观察情况:这里可以看到…...

C++面向对象(二)
面向对象基础内容参考: C面向对象(一)-CSDN博客 友元函数 类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员。尽管友元函数的原型有在类的定…...

【C语言入门级教学】冒泡排序和指针数组
文章目录 1.冒泡排序2.⼆级指针3.指针数组4.指针数组模拟⼆维数组 1.冒泡排序 冒泡排序的核⼼思想:两两相邻的元素进⾏⽐较。 //⽅法1 void bubble_sort(int arr[], int sz)//参数接收数组元素个数 { int i 0;for(i0; i-1; i) { int j 0; for(j0; j-1; j) { …...

shell脚本中常用的命令
一、设置主机名称 通过文件的方式修改通过命令修改 二、nmcli 查看网卡 ip a s ens160 (网卡名称) ifconfig ens160 nmcli device show ens160 nmcli device status nmcli connection show ens160 2.设置网卡 a)当网卡没有被设置时 b)网卡被设定,需要修改 三…...

Nuxt3部署
最近接了一个项目,需要用到 nuxt3 技术来满足甲方所要求的需求,在部署的时候遇到了很多问题,这里我一一给大家讲述部署流程,以及所遇到的坑 打包部署 部署分为俩种方式: 静态(spa)部署 和 ssr部署 静态部署 静态部…...

网络攻防技术一:绪论
文章目录 一、网络空间CyberSpace1、定义2、基本四要素 二、网络空间安全1、定义2、保护对象3、安全属性4、作用空间 三、网络攻击1、攻击分类2、攻击过程 四、网络防护1、定义2、安全模型3、安全服务5类4、特定安全机制8种5、普遍性安全机制5种 五、网络安全技术发展简史1、第…...

【人工智能】deepseek七篇论文阅读笔记大纲
七篇文章看了整整五天,加上整理笔记和问ds优化,大致的框架是有了。具体的公式细节比较多,截图也比较麻烦,就不列入大纲去做笔记了。 DeepSeek-LLM:一切的起点,所以探索的东西比较多,包括&#x…...
unix/linux source 命令,在当前的 Shell 会话中读取并执行指定文件中的命令
source 命令 (或者它的POSIX等效命令 .):在当前 Shell 环境中执行脚本 简单来说,source 命令的作用是:在当前的 Shell 会话中读取并执行指定文件中的命令。 这意味着,被 source 执行的脚本中的所有命令,就好像是你直接在当前的命令行提示符下逐行输入并执行的一样。 核…...
[leetcode] 二分算法
本文介绍算法题中常见的二分算法。二分算法的模板框架并不复杂,但是初始左右边界的取值以及左右边界如何向中间移动,往往让我们头疼。本文根据博主自己的刷题经验,总结出四类题型,熟记这四套模板,可以应付大部分二分算…...
imgsz参数设置
在YOLOv8中,imgsz参数控制输入图像的尺寸,它直接影响模型的精度、速度和显存占用。对于1280720像素的原始图片,选择合适的imgsz需要平衡以下因素: 一、推荐设置 1. 兼顾精度与速度(推荐) model<...

【算法】分支限界
一、基本思想 (分支限界, 分枝限界, 分支界限 文献不同说法但都是一样的) 分支限界法类似于回溯法,也是一种在问题的解空间树上搜索问题解的算法。 但一般情况下,分支限界法与回溯法的求解目标不同。回溯…...
使用 C/C++ 和 OpenCV 调用摄像头
使用 C/C 和 OpenCV 调用摄像头 📸 OpenCV 是一个强大的计算机视觉库,它使得从摄像头捕获和处理视频流变得非常简单。本文将指导你如何使用 C/C 和 OpenCV 来调用摄像头、读取视频帧并进行显示。 准备工作 在开始之前,请确保你已经正确安装…...
历史数据分析——广州港
个股简介 公司简介: 华南地区最大的综合性主枢纽港。 本公司是由广州港集团、国投交通、广州发展作为发起人,共同出资以发起方式设立的股份有限公司。 经营分析: 一般经营项目:企业管理服务(涉及许可经营项目的除外);港务船舶调度服务;船舶通信服务;企业自有资金…...