D1s芯片启动流程(BROM System)分析

1、D1S芯片介绍

D1s芯片启动流程(BROM System)分析_第1张图片

2、BROM介绍

D1s芯片启动流程(BROM System)分析_第2张图片
D1s芯片启动流程(BROM System)分析_第3张图片

(1)BROM(boot rom):存放启动代码的ROM,该ROM一般在芯片内部集成,是芯片上电执行的最开始代码;
(2)BROM里存放的程序主要功能:支持从USB或者SD卡强制升级;判断当前启动介质的优先级,从外部启动介质读取代码执行;
(3)BROM主要有两个模式:FEL模式是用于强制升级程序到flash中;Medium Boot module是正常启动模式,从外部启动介质读取启动代码并执行;
补充:BROM就是启动基石技术,可以参考博客:《启动基石(stepping stone)技术介绍》;

3、D1s芯片支持的启动介质

D1s芯片启动流程(BROM System)分析_第4张图片

4、启动介质优先级

4.2.1、选择启动介质的方法

4.2.1.1、BOOT_MODE介绍

BOOT_MODE Boot_Select Type
0 由特定GPIO引脚高低电平决定启动介质
1 由eFuse(一次性可编程存储器)来决定

(1)BOOT_MODE的值从SID模块(寄存器:0x03006210)读取,决定启动介质是由GPIO引脚还是eFuse决定;
(2)eFuse是一次性可编程存储器,只能烧录一次,在嵌入式开发中,我接触过的都是GPIO引脚来决定,很少使用eFuse,eFuse不灵活,至少前期调试不使用eFuse,后期产品量产可以考虑;
备注:在《D1s_User Manual_V1.0.pdf》手册里没有看到0x03006210寄存器描述,也许在其他的文档里有说明,我猜测应该也是某个GPIO引脚来决定的;

4.2.1.2、SID模块介绍

D1s芯片启动流程(BROM System)分析_第5张图片

D1s芯片启动流程(BROM System)分析_第6张图片

SID是安全模块,在数据手册里没有过多介绍,需要知道安全模块里有个2Kb的eFuse可以烧写程序,在eFuse烧写的程序里有决定启动介质的代码;

4.3、通过GPIO引脚电平确认启动介质优先级

D1s芯片启动流程(BROM System)分析_第7张图片

4.4、通过eFuse确认启动介质优先级

D1s芯片启动流程(BROM System)分析_第8张图片

(1)eFuse_Boot_Select_Cfg决定启动介质优先级,总共分为4组,在启动时先判断高优先级的组是否有效;

5、BROM Process启动流程

D1s芯片启动流程(BROM System)分析_第9张图片

6、Hotplug Process

D1s芯片启动流程(BROM System)分析_第10张图片

个人理解这里的Hotplug程序对应软件上的复位,区别与按下复位按键的重启;

7、强制升级程序

7.1、如何进入到FEL模式?

D1s芯片启动流程(BROM System)分析_第11张图片

7.2、FEL Process

D1s芯片启动流程(BROM System)分析_第12张图片

进入到FEL程序,可以使用PC上运行的烧录工具将程序通过USB接口烧录到板子上的flash中;

8、快速启动模式

D1s芯片启动流程(BROM System)分析_第13张图片

你可能感兴趣的:(#,东山PI-D1S板子学习笔记,RISC-V架构,启动流程)