Bootstrap

2021-04-27

微处理器冷启动方式

概述

MPU(Micro Processing Unit,微处理器)和MCU(Micro ControlUnit,微控制器)芯片的启动可以分为冷启动和热启动。

冷启动也称上电启动,一般是接通电源后芯片的第一次启动。冷启动时,系统的易失存储(片上RAM、片上寄存器,片外DDR,片外RAM等等)处于不确定状态。启动需要完成加电、自检、硬件初始化等操作。

热启动是指处理器芯片在运行过程中重新启动系统,可以是一次有准备的软件复位,也有可能是系统保护机制触发的预料外的热启动操作)。如果是有准备的软件复位,关键的易失性存储可能已经完成初始化。

本文档主要关注MPU/MCU类芯片的冷启动方式。

冷启动类型

MCU/MPU类产品由于应用场景多样化,因此通常需要提供多种启动方式供用户选择。不同产品供用户选择启动方式的方法是不同的,本文档将启动选择方式分为三类:类型I是硬件冷启动,硬件通过启动管脚的配置,从不同的启动区域/介质开始执行程序,开始启动过程;类型II是软件冷启动,芯片固定从内部存储rom区域启动,软件通过管脚选择,执行不同的启动分支程序,由启动分支区分启动介质等;类型III是混合型冷启动,这是以上两类的混合型,即硬件通过启动管脚配置从内部存储rom区域启动,然后再通过相关管脚配置,软件执行不同的启动分支程序。

以上启动类型对于特定产品可以是变化的。例如出于代码安全因素或者方便应用内编程等因素,通常支持类型III启动的产品,可以通过OTP的配置,转化为固定介质启动或类型I或类型II的启动方式。

类型I启动选择

飞腾/FT-2000A/2

FT-2000A/2是飞腾公司的双核高性能嵌入式微处理器产品,兼容64位ARM V8指令系统,主频达到1GHz,片上存储包括32K字节的一级指令Cache,32K字节的一级数据Cache,1M字节的二级Cache。

由于没有合适的片上存储存放启动代码,FT-2000A/2采用类型I启动选择,支持SPI和LBC两种启动方式,通过spi_lbc_select管脚进行选择。

  1. spi_lbc_select管脚为0时,从spi启动
  2. spi_lbc_select管脚为1时,从lbc启动(lbc:局部总线接口,支持EPROM,flash EPROM,可突发RAM和其他外部设备等。地址和数据线复用)

Loongson/LS2K1000

LS2K1000是龙芯中科公司的双核高性能嵌入式微处理器产品,采用40nm工艺,片内集成2个GS264核,与MIPS64体系结构兼容,主频1GHz,64位DDR3控制器。,片上存储包括32K字节的一级指令Cache,32K字节的一级数据Cache,共享1M字节的二级Cache。

LS2K1000采用类型I启动选择,支持LIO/SPI/SDIO/NAND四种启动方式,通过SYS_BOOTSEL[1:0]管脚进行选择。

  1. SYS_BOOTSEL=00时,从LIO启动(LIO: LocalIO,提供简单外设访问接口,主要用于连接系统启动ROM。)
  2. SYS_BOOTSEL=00时,从SPI启动。
  3. SYS_BOOTSEL=00时,从SDIO启动。
  4. SYS_BOOTSEL=00时,从NAND启动。

Loongson/LS2H

LS2H是龙芯中科公司的单核安全适用领域微处理器产品,采用65nm工艺,片内集成1个GS464核,主频1GHz,64位DDR2/3控制器。,片上存储包括64K字节的一级指令Cache,64K字节的一级数据Cache,共享512K字节的二级Cache。

LS2H采用类型I启动选择,支持LPC/SPI/NAND三种启动方式,通过NAND_WR/SPI_SCK/SPI_CSn管脚进行选择。

  1. NAND_WR=1时,从NAND启动。
  2. {SPI_SCK,SPI_CSn}=00时,从NAND启动。
  3. {SPI_SCK,SPI_CSn}=10时,从LPC启动。
  4. {SPI_SCK,SPI_CSn}=x0时,从SPI启动。

类型II冷启动

Samsung/S5PC110

S5PC110是三星公司的2010年左右的32位微处理器,针对移动电话和通用领域,内建Cortex-A8处理器,支持ARM V7-A结构,32/32K字节I/D 一级cache,512K字节二级cache,主频1GHz。内建64K字节iROM,96K字节iRAM。芯片启动时,会从片内ROM区域的irom代码开始执行,然后irom会从如下设备中选择启动

  1. NAND flash
  2. SD/MMC
  3. eMMC
  4. eSSD memory
  5. UART或者USB设备
  6. OneNAND(三星的存储技术)
  7. UART
  8. USB

S5PC110的iROM程序通过内部熔丝(efuse)决定采用安全启动或者正常启动。

下图为S5PC110的bootloader和OS的启动过程示意

下图为S5PC110的boot code的流程图。

ST/STM32MP157A

ST产品主要以MCU为主,最近几年开始推出MPU产品。现在MPU全系列产品包括的STM32MP151x/153x/157x若干产品。均采用类型II的启动选择方式。以STM32MP157A为例,该产品内建双核32bit的ARM Cortex-A7处理器,32K/32K字节的I/D一级cache,共享256K字节的二级cache。内部集成128K字节安全启动ROM,708K字节内部RAM。芯片启动时,会从片内ROM区域的代码开始执行,然后结合OTP、内部寄存器和外部管脚状态等因素,从如下设备中选择启动:

 

 

从内部的ROM开始,ROM的代码启动过程

 

 

TI/AM437x启动

TI公司的AM437X微处理器采用32位Cortex-A9处理器核,主频1GHz。MPU子系统集成32K字节数据cache和指令cache;256K字节二级cache(也可配置成三级RAM);256K字节片上Boot ROM;64K字节片上RAM。

启动模式在上电reset期间,锁存住启动管脚的值,作为配置信号。启动管脚SYSBOOT[17:0]中包括8位的BOOTMODE,用来选择启动介质和10位的MCU_BOOTMODE,用来选择启动的时钟频率和备选启动设备。

  1. Bootrom
  2. QSPI

类型III冷启动

ST/STM32F373xx

ST公司的STM32F373XX是一款MCU产品,使用Coretex-M4处理器核,主频72MHz,CoreMark分数245分,片上集成64KB~256KB的用户flash存储,16KB~32KB的SRAM,和一段系统存储(sytem memory)区域。

启动时,通过BOOT0管脚和BOOT1选择以下三种启动设备启动。

  1. 片上flash的User Flash部分,这种模式是芯片正常工作的时候使用的启动模式。
  2. 系统存储,该部分预设了boot loader,可以从USART1,USART2,USB通过DFU(device firmware upgrade)功能升级用户固件。第二种模式可以在升级系统固件的时候使用。由于操作繁琐,需要改变boot管脚的值,并且需要硬重启,所以并不是经常使用。还有一种场景是用户下载错了user flash,系统变砖了,可以通过该模式重写user flash。不同的MCU中bootloader功能不尽相同,有些还可以支持从I2C,SPI等接口升级用户固件。
  3. 片上SRAM,这种模式一般在软件开发调试阶段使用,可以避免反复擦写flash。

这种启动方式是ST公司中低端MCU中最常用的启动方式。常见的STM32F1xx,STM32F3XX均采用这种启动方式。

ST/STM32F779XX

片上16K数据cache,16K指令cache,最大2MB的片上用户flash存储,512K字节的SRAM(包括128K字节DTCM+16K字节ITCM+4K字节低功耗备份RAM),灵活的外部存储(包括SRAM,PSRAM,SDRAM,NOR,NAND等)控制和一段系统存储(sytem memory)区域。

启动时,通过BOOT管脚和BOOT_ADDX寄存器选择,可以指定系统的入口地址。包括

  1. ITCM或者内部片上flash,或者外部接口上的FLASH地址
  2. 系统存储,该部分预设了boot loader,功能类似上述章节。
  3. RAM地址(ITCM,DTCM,片上RAM或者外部接口上的SRAM等)

F779的启动方式比较更灵活,只需一个boot引脚。但是一个引脚只能区分出两个状态,为了解决这个问题,专门配套了两个option bytes选项字节配置,如此以来就可以方便设置各种存储器地址了。

Boot模式选择

BOOT区域

Boot引脚

Boot地址

0

BOOT_ADD0[15:0]

启动地址由BOOT_ADDR0定义,默认值0x0800,对应flash首地址0x0800_0000

1

BOOT_ADDR1[15:0]

启动地址由BOOT_ADDR1定义,默认值0x1FF0,对应系统bootloader首地址0x1FF0_0000

BOOT_ADD0BOOT_ADD1对应32位地址的高16位。设置了选项字节后,掉电不会丢失,下次上电或者复位后,会根据BOOT引脚状态从BOOT_ADD0,或BOOT_ADD1所设置的地址进行启动。

如果用户不慎,设置的地址范围不在有效的存储器地址,那么BOOT = 0时,会从Flash首地址0x0800 0000启动,BOOT = 1时,会从ITCM首地址0x0000 0000启动。

      如果用户使能了Flash Level 2保护,那么只能从Flash地址空间进行启动。

 

 

小结

类型I的启动是在片上没有固化的bootrom时采用的方式。该方式优点是比较灵活,可以将bootrom的引导程序放在片外存储上,方便用户修改;缺点是相对类型II和类型III,解决成本相对较高,安全性相对来说较弱,无法做到安全启动的目的。

       类型II的启动一般是芯片应用非常确定的领域。

       类型III的启动是最多MPU采用的方式。在三种方式中最灵活。

;