一、一句话定义

Bootloader = 系统启动引导程序硬件上电后第一个跑的软件,负责初始化硬件、加载操作系统 / 应用程序,最后把 CPU 控制权交给主程序。

类比电脑:BIOS 就是电脑的 Bootloader。

TI C2000 系列 DSP 的 Bootloader 是芯片上电 / 复位后执行的第一段代码,分为两层:

  • ROM Bootloader(固化层)
  • :TI 出厂固化在片上 Boot ROM(地址 0x000000–0x0003FF),不可修改,负责硬件初始化、引导模式检测、加载 Flash Kernel 到 RAM。

  • Flash Bootloader(用户层 / IAP)

    :用户开发并烧录到 Flash,负责固件升级、应用校验、跳转执行,支持 SCI、CAN、SPI、USB 等通信接口。

类比:ROM Bootloader 是 “BIOS”,Flash Bootloader 是 “系统引导器”,共同完成从硬件复位到用户程序(如电机控制、电源算法)的过渡。

图片

二、DSP支持的BOOT 模式

图片

不同的BOOT模式通过配置GPIO的引脚来选择。

三、SCI启动分析

SCI 启动模式以异步方式将代码从 SCI-A 区域传输到内部存储器中。这种启动模式仅支持 8 位数据流的输入。​

•SCIRXDA:GPIO28​

•SCITXDA:GPIO29​

设备通过 SCI-A与外部主机进行通信。SCI 端口的自动波特率功能可用于与主机锁定一致的波特率。在每次数据传输之后,设备都会将接收到的 8 位字符反馈给外部主机。通过这种方式,主机可以确认每个字符是否真的被设备接收到了。​

在更高的波特率下,由于收发器和连接器的性能问题,传入数据位的转换速率可能会受到影响。虽然普通的串行通信在一般情况下能够正常工作,但较高的波特率(通常超过 100kbaud)可能会限制自动波特检测功能的可靠性,从而导致自动波特锁定功能失效。为了避免这种情况,建议采取以下措施:​

1.通过降低波特率,实现外部主机与设备SCI 引导程序之间的波特锁定。​

2.以较低的波特率加载传入的设备应用程序或自定义加载器。​

3.然后,主机可以与已加载的设备应用程序进行握手,以将 SCI 的波特率寄存器设置为所需的高波特率。

图片

四、核心启动模式

图片

五、标准启动流程

1. 上电 / 复位(硬件触发)

芯片上电或复位引脚拉低,硬件强制 PC 指针跳转到 Boot ROM 起始地址(0x000000),开始执行固化代码。

2. ROM 层硬件初始化(最小系统)

  • 关看门狗、配置系统时钟(PLL)、设置 Flash 等待周期

  • 初始化 GPIO(读取 BMSP 电平)、配置基础外设时钟

  • 关键:EALLOW/EDIS 保护机制,仅特权状态可写系统寄存器。

3. 引导模式检测(决定去向)

  • 读取 BMSP 引脚电平(如 GPIO24 = 高、GPIO32 = 低 → SCI 模式)

  • 或读取 OTP 配置(已固化启动模式)

  • 若为 Flash 模式:直接跳转到 Flash 入口(0x080000)执行应用

  • 若为 加载模式(SCI/CAN):继续执行下一步。

4. 加载 Flash Kernel(关键中转)

  • ROM Bootloader 初始化选定外设(如 SCI 波特率自动匹配)

  • 从上位机接收 Flash Kernel(Flash 操作核心代码),加载到片上 RAM(0x008000–0x00FFFF)

  • 校验 Kernel 完整性(CRC16),无误则跳转执行 Kernel。

5. Flash Kernel 执行(固件升级核心)

  • 重新配置系统时钟(提升频率,加快烧录)

  • 初始化通信外设(SCI/CAN),等待上位机发送应用固件(.hex/.bin)

  • 接收固件并分块写入 Flash(先擦除→再编程→后校验)

  • 支持断点续传、回滚机制(升级失败恢复旧固件)。

6. 跳转用户应用(启动业务程序)

  • 固件烧录完成后,校验应用程序(CRC/MD5)

  • 重映射中断向量表到应用程序入口

  • 跳转至应用程序起始地址(如 0x080000),Bootloader 休眠。

六、实战要点(避坑指南)

1. 内存分区规划(必须合理)

  • Bootloader 区

    :0x080000–0x081FFF(8KB,存放 Flash Bootloader)

  • 应用区

    :0x082000–0x10FFFF(剩余 Flash,存放用户程序)

  • 备份区(可选)

    :0x110000–0x18FFFF(存放旧固件,升级失败回滚)

  • 关键

    Bootloader 区必须独立,防止升级时被覆盖。

2. 中断向量重映射(最易出错)

  • Bootloader 运行时使用自身中断向量表

  • 跳转应用前,必须将 PieVectTable 指向应用程序起始地址

  • 否则会出现 “跳转后死机、中断异常” 问题。

3. 安全启动(Secure Boot)

  • C2000 高端型号(F2838x)支持加密启动

    • 固件加密存储,防止篡改

    • 仅认证通过的固件可执行

    • 保护知识产权,防止程序被克隆。

4. OTP 配置谨慎使用

  • OTP 是一次性可编程内存,写一次后永久不可修改

  • 若设置为 SPI 模式,后续无法改回 Flash 模式

  • 推荐:默认 Flash 模式,通过 GPIO 电平切换加载模式。

  • 图片

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐