PowerPC

https://mp.weixin.qq.com/s/SpBOfzJJ1OizYP-rsLJVqQ

Flash启动模式为最常用模式。

一般情况下,芯片上电之后,从flash起始位置读取第一条指令的地址,然后跳转到改地址处执行,进行一系列初始化动作。

flash起始位置存放的一般为reset中断处理程序的地址。

MPC56xx SoC的启动模块,做的更多。但背离了惯常做法,增加学习成本,吃力未必讨好。

一. Flash地址区间

芯片逻辑System Status and Configuration Module (SSCM)模块按地址从低到高,逐个检查Boot sector,看是否包含合法的BOOT_ID(0x5A),如果有,则选择该Boot sector使用。

如果所有的都找完之后,没有发现合法的Boot sector,则进入静态模式。

二. 静态模式

找不到合法的Boot sector,SSCM执行如下动作:

1. 为从BAM起始位置开始的4KB区间,创建MMU TLB entry,默认为VLE指令模式;

2. 设置CPU的程序计数器(PC)指向BAM首地址,并开始执行以进入静态模式。

这个程序执行如下过程:

a. 打开看门狗Software Watchdog Timer (SWT);

b. 执行wait指令,暂停CPU执行;

3. 大约10ms后,SWT看门狗触发reset程序,再次搜索合法的Boot sector;

如此周而复始。

三. Boot sector

Boot sector包含两项内容:

1. 16-bit Reset Configuration Half Word (RCHW),包含BOOT_ID和VLE模式开关;

2. 32-bit reset vector,如果Boot sector合法,则SSCM将CPU的PC指向这个地址开始执行;

PS. 从flash结构图可以看出,可以配置多个boot sector,存放多个系统。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )