1、D1S芯片介绍
2、BROM介绍
(1)BROM(boot rom):存放启动代码的ROM,该ROM一般在芯片内部集成,是芯片上电执行的最开始代码;
(2)BROM里存放的程序主要功能:支持从USB或者SD卡强制升级;判断当前启动介质的优先级,从外部启动介质读取代码执行;
(3)BROM主要有两个模式:FEL模式是用于强制升级程序到flash中;Medium Boot module是正常启动模式,从外部启动介质读取启动代码并执行;
补充:BROM就是启动基石技术,可以参考博客:《启动基石(stepping stone)技术介绍》;
3、D1s芯片支持的启动介质
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模块介绍
SID是安全模块,在数据手册里没有过多介绍,需要知道安全模块里有个2Kb的eFuse可以烧写程序,在eFuse烧写的程序里有决定启动介质的代码;
4.3、通过GPIO引脚电平确认启动介质优先级
4.4、通过eFuse确认启动介质优先级
(1)eFuse_Boot_Select_Cfg决定启动介质优先级,总共分为4组,在启动时先判断高优先级的组是否有效;
5、BROM Process启动流程
6、Hotplug Process
个人理解这里的Hotplug程序对应软件上的复位,区别与按下复位按键的重启;
7、强制升级程序
7.1、如何进入到FEL模式?
7.2、FEL Process
进入到FEL程序,可以使用PC上运行的烧录工具将程序通过USB接口烧录到板子上的flash中;