嵌入式板子(如开发板、ARM板、单片机系统)的上电启动方式,通常由Boot ROM、启动引脚电平和存储器类型共同决定。以下是常见的几种上电启动方式:
1. 从片内 Flash 启动(Nor Flash / 嵌入式 Flash)
原理:芯片上电后,PC指针直接指向片内Flash的起始地址(如0x08000000 for STM32,或0x00000000 for many ARM),开始执行程序。
特点:最快、最简单;无需外部电路;代码可一次性烧录;芯片出厂或裸板常用。
适用:单片机、RTOS固件、Bootloader第一级。
2. 从 NAND Flash / eMMC / SD 卡启动
原理:芯片内部 BootROM 将 NAND 前4K/8K代码拷贝到内部SRAM中执行,该代码再初始化DDR并从NAND加载更多内容。
特点:容量大、成本低;启动速度较慢(需复制,且NAND有坏块问题);需BootROM支持NAND控制器。
适用:Linux/Android系统,U-Boot常存放在NAND/eMMC。
3. 从 UART / Serial Flash 启动(串行下载模式)
原理:BootROM 等待串口(UART0)收到特定协议(如XModem、YModem)数据,将接收到的代码存入SRAM并执行。
特点:无需预先烧录任何存储器;只能加载有限大小程序(受片上SRAM限制);速度慢。
适用:烧录裸机程序;紧急修复Bootloader;STM32的System Bootloader模式。
4. 从 USB / OTG 启动
原理:BootROM 初始化USB设备控制器,模拟成USB大容量存储或DFU(Device Firmware Upgrade)设备,主机通过USB发送镜像。
特点:比UART快得多;无需存储卡或编程器;依赖主机USB驱动。
适用:烧写eMMC或Flash;现代SoC(如i.MX、Raspberry Pi)的恢复模式。
5. 从 SPI NOR Flash 启动
特点:介于片内Flash和NAND之间:接口简单、引脚少、支持XIP(Execute In Place,可直接执行代码);读取速度适中,写入较慢。
适用:存储Bootloader或简单固件(如BIOS、U-Boot SPL)。
6. 从 Ethernet / PXE / TFTP 网络启动
原理:BootROM或U-Boot内嵌TCP/IP协议栈,通过DHCP获取IP再通过TFTP下载内核镜像。
特点:无需本地存储介质;适合无盘系统、批量部署、调试;需要网络环境及服务器支持。
适用:服务器、树莓派(网络引导)、工业自动化升级。
7. 从外部并行 NOR / SRAM / ROM 启动(旧式或FPGA)
原理:CS/WE/OE等信号直接连接并行存储器,放在总线地址0位置。
特点:占用引脚多、成本高;速度尚可,支持XIP。
适用:DSP、某些FPGA软核、工控板。
8. 从外部中断 / 调试接口(JTAG/SWD)启动(特殊调试模式)
原理:上电后CPU直接挂起,等待JTAG/SWD连接,由调试主机将代码写入ITCM/DTCM并启动执行。
特点:无需芯片内部有代码;用于底层调试和Flash编程初始化。
适用:开发调试、生产烧录。
启动方式通常由 BOOT 引脚选择
| BOOT0 | BOOT1 | 启动介质 | 典型芯片 |
|---|---|---|---|
| 0 | X | 主Flash | STM32 |
| 1 | 0 | System Memory (UART Bootloader) | STM32 |
| 1 | 1 | SRAM (调试) | STM32 |
在ARM/Linux SoC中(如i.MX6、RK3399):
BOOT_MODE[1:0] = 00 → Fuse 决定启动顺序
= 01 → Serial Downloader (USB/UART)
= 10 → Internal Boot (eFuse预配置的Flash/SD/eMMC)