根据 Luban-Lite RTOS SDK 文档D13x 平台为主下面按时间顺序梳理从上电到应用运行的完整启动过程。一、总体启动链四级文档定义的 Luban-Lite 标准启动流程为是否正常启动升级模式失败/CTRLC上电 / 复位Boot ROM BROM芯片内置 ROM需要初始化DRAM/PSRAM?PreBootProgram PBP初始化内存tinySPL Bootloader裸机引导程序启动模式加载并跳转 ApplicationRT-Thread 应用aicupg USB/SD/U盘 烧录串口命令行控制台烧录完成重新上电阶段名称运行位置主要职责1BROM芯片内部 Boot ROM从启动介质加载下一级程序客制化方案下可直接加载用户程序2PBP由 BROM 加载运行初始化DRAM/PSRAM合封 PSRAM 芯片必需3tinySPLFlashspl分区加载应用、USB/SD/U盘升级、命令行调试4Applicationos等分区RT-Thread 系统及业务应用参考文档topics/sdk/boot/lite_boot_direct.html二、硬件层上电与复位2.1 上电时序D13xVCC33_IO、VDD11_SYS、LDO18无严格上电顺序。VCC33_IO上升沿需 150 µs。2.2 复位源任一复位条件成立即复位芯片主要包括系统上电复位VCC33_IOVDD11_SYS上电后产生约 10 ms 内自动释放。RTC 上电复位、外部RESETN低电平 ≥ 2 ms、JTAG 复位、看门狗、过温、电压比较复位等。参考文档topics/product/d13x-pullup-down-timing.html三、Boot ROMBROM阶段3.1 基本行为芯片上电后首先执行 BROM固化在芯片内。BROM 从配置的启动介质SPI NOR / SPI NAND / eMMC / SD 等读取符合 AIC 镜像格式的程序并执行。程序必须按规定格式打包.aic否则 BROM 不会运行。3.2 BROM 运行环境限制D13xBROM 运行时性能受限影响加载速度限制项说明CPU 频率仅24 MHzCache未使能中断未使能因此镜像不宜过大超过一定大小应走 tinySPL而不是让 BROM 直接加载大应用。3.3 BROM 直接加载的大小限制存储介质限制SPI NANDAPP 不能超过2 个物理块eMMCAPP 不能超过512 KBSPI NOR启动分区默认 256 KB可加载更大程序但 BROM 速度慢不建议过大参考文档topics/sdk/d13x_bare_boot/brom-load-limit-and-notes.html3.4 D13x 内存加载地址约束客制化 / BROM 直启SRAM 起始0x30040000最低 16 KB0x30040000起被 BROM 占用镜像不能加载到此区间镜像头占256 字节Load address与Entry point至少相差 256 字节推荐加载地址≥0x30044000示例配置loader:{file:app.bin,load address:0x30044000,entry point:0x30044100}参考文档topics/sdk/d13x_bare_boot/generate-cus-brom-app.html四、PreBootProgramPBP阶段4.1 作用PBP 是BROM 的扩展在 BROM 与主程序之间运行。主要完成DRAM / PSRAM 初始化。对合封 PSRAM的 D13x 芯片若应用要用 PSRAM必须先跑 PBP。4.2 执行流程BROM 加载 PBPd13x.pbp及私有配置pbp_cfg.binPBP 完成内存初始化返回 BROMBROM 继续加载并跳转用户程序 / Bootloader4.3 镜像打包示例在image_cfg.json的resource中关联 PBPresource:{pbp:d13x.pbp,private:pbp_cfg.bin}生成命令mk_private_resource.py-lpbp_cfg.json-opbp_cfg.bin mk_image.py-p-cimage_cfg.json-d.参考文档topics/sdk/d13x_bare_boot/init-config-prsam.html五、tinySPLBootloader阶段5.1 定位与架构Luban-Lite 使用tinySPL作为 Bootloader非 U-Boot。基于 HAL 的裸机程序无线程、无中断处理、按需初始化驱动以加快启动。与 RT-Thread 应用共用Sys/Board/HAL代码便于板级适配。源码结构模块路径说明Sysbsp/artinchip/sys/chip/SoC 初始化Boardtarget/chip/board/板级初始化HALbsp/artinchip/hal/驱动 HALBootapplication/baremetal/bootloader/Bootloader 本体参考文档topics/sdk/boot/lite_boot_design_guide.html5.2 系统初始化调用链_start // startup_gcc.S → save_boot_params // 保存 BROM 传入的启动参数 → icache_enable() → dcache_enable() → SystemInit() → main() // bootloader/main.c → board_init() → heap_init() → aic_board_sysclk_init() → aic_board_pinmux_init() → uart_init(cons_uart) → stdio_set_uart(cons_uart) → console_init()原则不做多余驱动初始化用时再初始化缩短启动时间。5.3 启动与升级主流程main() → board_init() → console_init() → bd aic_get_boot_device() // 判断当前启动设备 → console_set_bootcmd(nor_boot) // 按介质设置nor_boot / nand_boot / mmc_boot / aicupg usb 0 等 → console_loop() → console_run_cmd(bootcmd) // 自动执行启动命令 → _console_loop() // bootcmd 失败则进入交互命令行5.4 支持的启动介质与命令menuconfig 中可配置nor boot/nand boot/mmc bootaicupg usb/aicupg nand/aicupg nor升级SD 卡 / U 盘 FAT32 烧录升级进入命令行方式启动时按住CtrlC、加载应用失败、或升级中 CtrlC 中止。参考文档topics/sdk/boot/lite_boot_test_guide.html、lite_boot_config_guide.html5.5 Bootloader 编译与部署scons --apply-def d21x_demo88-nand_baremetal_bootloader_defconfig scons产物output/.../images/下 elftarget/chip/board/pack/bootloader.bin供打包烧录注意编译应用时才打包完整烧录镜像若bootloader.bin已存在且分区未变可不重编 Boot。六、Flash 分区与存储布局6.1 分区类型类型典型分区名用途启动分区spl可自定义存放 BootloadertinySPL系统分区osRT-Thread 应用固件只读数据rodataAPP 资源FAT只读可写数据data运行时数据LittleFS/FATFSA/B 系统os/os_r等OTA 双系统B分区加_r后缀6.2 各介质启动分区默认尺寸介质位置默认大小说明SPI NOR0 ~ X256 KBBROM 从此读 BootloaderSPI NAND前 4 个物理块128K 块→512 KB256K 块→1 MB4 块存两份启动镜像eMMCUDA 17K ~ X建议 512 KBBROM 从该区域读取6.3 分区表示例SPI NANDspi-nand:{size:128m,partitions:{spl:{size:1m},os:{size:2m},rodata:{size:4m},data:{size:28m}}}参考文档topics/sdk/advanced/partition_intro.html、topics/sdk/linux/burn-image-partition-table.html七、烧录镜像结构image_cfg.json打包后的烧录镜像包含三部分image: { info: { ... }, // 平台、版本、存储介质信息 → 生成 Image Header updater: { ... }, // USB/SD 刷机时在 RAM 中运行的组件 target: { ... } // 要写入 Flash 的组件 }7.1 updater刷机时 RAM 执行组件说明spl第一级引导tinySPL第二级组件刷机程序可与正常 SPL 相同或不同属性file、ram下载地址、attrrequired/run。组件顺序决定 USB 升级时的下载与执行顺序。7.2 target写入 Flash属性说明file源文件part目标分区名attrburn/mtd/ubi/block/required/optional典型映射bootloader.bin→splrtthread.bin→os。八、ApplicationRT-Thread阶段8.1 正常启动路径tinySPL 执行nor_boot/nand_boot/mmc_boot从os分区读取应用镜像到 RAM或 XIP 直执跳转到应用入口RT-Thread 开始调度8.2 XIP 启动SPI NOR 可选方案若启用 XIPeXecute In PlaceBootloader 使能 XIP 寄存器配置 NOR Flash 控制器时序与地址映射将启动代码放到 NOR 指定区域初始化完成后直接从 Flash 执行RTOS减少 RAM 占用、加快启动参考文档topics/sdk/xip/1_introduction.html8.3 OTA 后的重启流程应用层 OTA 典型步骤ota_init()分配缓冲区分片下载ota_shard_download_fun()写入 Flash常写入 B 分区aic_upgrade_end()更新环境变量切换启动分区rt_hw_cpu_reset()复位再次走BROM → PBP → tinySPL → 新固件链参考文档topics/sdk/ota/ota_programming.html九、特殊启动模式9.1 USB 烧录BROM 升级模式设备进入BROM USB 升级模式通常配合 AiBurn 工具PC 通过 USB 下发updater中的组件到 RAM 并按序执行将target组件烧入对应分区9.2 SD 卡 / U 盘工厂烧录方式流程概要SD 卡FAT32 根目录放bootloader.aicbootcfg.txt→ 上电进 tinySPL 自动烧录 →拔卡再上电U 盘类似需使能aicupg udisk upgrade注意烧录完成后不会自动重启防止重复进入烧录模式。参考文档topics/sdk/advanced/burn-procedure-by-diff-media.html9.3 客制化启动跳过 Luban-Lite 标准链上电后 BROM直接运行用户客制程序不必是 SDK 编译的 RT-Thread需按 AIC 镜像格式打包并遵守内存地址约束可选嵌入 PBP 做 PSRAM 初始化参考文档topics/sdk/d13x_bare_boot/index.html十、安全启动可选若通过 eFuse 使能安全特性BROM 阶段会增加eFuse 功能作用阶段安全启动RSA 验签仅运行合法签名固件SPI ENCSPI 总线数据加密固件加密启动固件密文解密后执行PBP 加密PBP 程序加密开启安全启动后Bootloader 等组件也需参与签名打包。参考文档topics/sdk/secure/章节十一、端到端时序总结[硬件] 上电 → 系统复位释放(~10ms) ↓ [BROM] 24MHz/无Cache读启动介质 spl 区或客制镜像 ↓ [PBP] (可选) 初始化 PSRAM/DRAM → 回 BROM ↓ [tinySPL] 使能 Cache初始化时钟/UART/堆 ↓ ├─ bootcmd 成功 → 读 os 分区 → 跳转 RT-Thread ├─ USB/SD/U盘升级 → aicupg 烧写 Flash └─ 失败/CtrlC → 串口命令行 (nor_boot/mem/mtd...) ↓ [Application] RT-Thread 启动 → 驱动/文件系统/业务任务十二、关键文档索引主题文档路径启动总览topics/sdk/boot/lite_boot_direct.htmltinySPL 设计topics/sdk/boot/lite_boot_design_guide.htmlBoot 配置编译topics/sdk/boot/lite_boot_config_guide.html分区说明topics/sdk/advanced/partition_intro.html镜像配置topics/sdk/boot/image-file-intro.htmlD13x 客制化启动topics/sdk/d13x_bare_boot/PBP/PSRAMtopics/sdk/d13x_bare_boot/init-config-prsam.htmlXIPtopics/sdk/xip/xip_user_guide.htmlSD/U盘烧录topics/sdk/advanced/burn-procedure-by-diff-media.html以上梳理基于当前工作区中的 Luban-Lite SDK 文档。
D13x平台Luban-Lite RTOS启动全解析
根据 Luban-Lite RTOS SDK 文档D13x 平台为主下面按时间顺序梳理从上电到应用运行的完整启动过程。一、总体启动链四级文档定义的 Luban-Lite 标准启动流程为是否正常启动升级模式失败/CTRLC上电 / 复位Boot ROM BROM芯片内置 ROM需要初始化DRAM/PSRAM?PreBootProgram PBP初始化内存tinySPL Bootloader裸机引导程序启动模式加载并跳转 ApplicationRT-Thread 应用aicupg USB/SD/U盘 烧录串口命令行控制台烧录完成重新上电阶段名称运行位置主要职责1BROM芯片内部 Boot ROM从启动介质加载下一级程序客制化方案下可直接加载用户程序2PBP由 BROM 加载运行初始化DRAM/PSRAM合封 PSRAM 芯片必需3tinySPLFlashspl分区加载应用、USB/SD/U盘升级、命令行调试4Applicationos等分区RT-Thread 系统及业务应用参考文档topics/sdk/boot/lite_boot_direct.html二、硬件层上电与复位2.1 上电时序D13xVCC33_IO、VDD11_SYS、LDO18无严格上电顺序。VCC33_IO上升沿需 150 µs。2.2 复位源任一复位条件成立即复位芯片主要包括系统上电复位VCC33_IOVDD11_SYS上电后产生约 10 ms 内自动释放。RTC 上电复位、外部RESETN低电平 ≥ 2 ms、JTAG 复位、看门狗、过温、电压比较复位等。参考文档topics/product/d13x-pullup-down-timing.html三、Boot ROMBROM阶段3.1 基本行为芯片上电后首先执行 BROM固化在芯片内。BROM 从配置的启动介质SPI NOR / SPI NAND / eMMC / SD 等读取符合 AIC 镜像格式的程序并执行。程序必须按规定格式打包.aic否则 BROM 不会运行。3.2 BROM 运行环境限制D13xBROM 运行时性能受限影响加载速度限制项说明CPU 频率仅24 MHzCache未使能中断未使能因此镜像不宜过大超过一定大小应走 tinySPL而不是让 BROM 直接加载大应用。3.3 BROM 直接加载的大小限制存储介质限制SPI NANDAPP 不能超过2 个物理块eMMCAPP 不能超过512 KBSPI NOR启动分区默认 256 KB可加载更大程序但 BROM 速度慢不建议过大参考文档topics/sdk/d13x_bare_boot/brom-load-limit-and-notes.html3.4 D13x 内存加载地址约束客制化 / BROM 直启SRAM 起始0x30040000最低 16 KB0x30040000起被 BROM 占用镜像不能加载到此区间镜像头占256 字节Load address与Entry point至少相差 256 字节推荐加载地址≥0x30044000示例配置loader:{file:app.bin,load address:0x30044000,entry point:0x30044100}参考文档topics/sdk/d13x_bare_boot/generate-cus-brom-app.html四、PreBootProgramPBP阶段4.1 作用PBP 是BROM 的扩展在 BROM 与主程序之间运行。主要完成DRAM / PSRAM 初始化。对合封 PSRAM的 D13x 芯片若应用要用 PSRAM必须先跑 PBP。4.2 执行流程BROM 加载 PBPd13x.pbp及私有配置pbp_cfg.binPBP 完成内存初始化返回 BROMBROM 继续加载并跳转用户程序 / Bootloader4.3 镜像打包示例在image_cfg.json的resource中关联 PBPresource:{pbp:d13x.pbp,private:pbp_cfg.bin}生成命令mk_private_resource.py-lpbp_cfg.json-opbp_cfg.bin mk_image.py-p-cimage_cfg.json-d.参考文档topics/sdk/d13x_bare_boot/init-config-prsam.html五、tinySPLBootloader阶段5.1 定位与架构Luban-Lite 使用tinySPL作为 Bootloader非 U-Boot。基于 HAL 的裸机程序无线程、无中断处理、按需初始化驱动以加快启动。与 RT-Thread 应用共用Sys/Board/HAL代码便于板级适配。源码结构模块路径说明Sysbsp/artinchip/sys/chip/SoC 初始化Boardtarget/chip/board/板级初始化HALbsp/artinchip/hal/驱动 HALBootapplication/baremetal/bootloader/Bootloader 本体参考文档topics/sdk/boot/lite_boot_design_guide.html5.2 系统初始化调用链_start // startup_gcc.S → save_boot_params // 保存 BROM 传入的启动参数 → icache_enable() → dcache_enable() → SystemInit() → main() // bootloader/main.c → board_init() → heap_init() → aic_board_sysclk_init() → aic_board_pinmux_init() → uart_init(cons_uart) → stdio_set_uart(cons_uart) → console_init()原则不做多余驱动初始化用时再初始化缩短启动时间。5.3 启动与升级主流程main() → board_init() → console_init() → bd aic_get_boot_device() // 判断当前启动设备 → console_set_bootcmd(nor_boot) // 按介质设置nor_boot / nand_boot / mmc_boot / aicupg usb 0 等 → console_loop() → console_run_cmd(bootcmd) // 自动执行启动命令 → _console_loop() // bootcmd 失败则进入交互命令行5.4 支持的启动介质与命令menuconfig 中可配置nor boot/nand boot/mmc bootaicupg usb/aicupg nand/aicupg nor升级SD 卡 / U 盘 FAT32 烧录升级进入命令行方式启动时按住CtrlC、加载应用失败、或升级中 CtrlC 中止。参考文档topics/sdk/boot/lite_boot_test_guide.html、lite_boot_config_guide.html5.5 Bootloader 编译与部署scons --apply-def d21x_demo88-nand_baremetal_bootloader_defconfig scons产物output/.../images/下 elftarget/chip/board/pack/bootloader.bin供打包烧录注意编译应用时才打包完整烧录镜像若bootloader.bin已存在且分区未变可不重编 Boot。六、Flash 分区与存储布局6.1 分区类型类型典型分区名用途启动分区spl可自定义存放 BootloadertinySPL系统分区osRT-Thread 应用固件只读数据rodataAPP 资源FAT只读可写数据data运行时数据LittleFS/FATFSA/B 系统os/os_r等OTA 双系统B分区加_r后缀6.2 各介质启动分区默认尺寸介质位置默认大小说明SPI NOR0 ~ X256 KBBROM 从此读 BootloaderSPI NAND前 4 个物理块128K 块→512 KB256K 块→1 MB4 块存两份启动镜像eMMCUDA 17K ~ X建议 512 KBBROM 从该区域读取6.3 分区表示例SPI NANDspi-nand:{size:128m,partitions:{spl:{size:1m},os:{size:2m},rodata:{size:4m},data:{size:28m}}}参考文档topics/sdk/advanced/partition_intro.html、topics/sdk/linux/burn-image-partition-table.html七、烧录镜像结构image_cfg.json打包后的烧录镜像包含三部分image: { info: { ... }, // 平台、版本、存储介质信息 → 生成 Image Header updater: { ... }, // USB/SD 刷机时在 RAM 中运行的组件 target: { ... } // 要写入 Flash 的组件 }7.1 updater刷机时 RAM 执行组件说明spl第一级引导tinySPL第二级组件刷机程序可与正常 SPL 相同或不同属性file、ram下载地址、attrrequired/run。组件顺序决定 USB 升级时的下载与执行顺序。7.2 target写入 Flash属性说明file源文件part目标分区名attrburn/mtd/ubi/block/required/optional典型映射bootloader.bin→splrtthread.bin→os。八、ApplicationRT-Thread阶段8.1 正常启动路径tinySPL 执行nor_boot/nand_boot/mmc_boot从os分区读取应用镜像到 RAM或 XIP 直执跳转到应用入口RT-Thread 开始调度8.2 XIP 启动SPI NOR 可选方案若启用 XIPeXecute In PlaceBootloader 使能 XIP 寄存器配置 NOR Flash 控制器时序与地址映射将启动代码放到 NOR 指定区域初始化完成后直接从 Flash 执行RTOS减少 RAM 占用、加快启动参考文档topics/sdk/xip/1_introduction.html8.3 OTA 后的重启流程应用层 OTA 典型步骤ota_init()分配缓冲区分片下载ota_shard_download_fun()写入 Flash常写入 B 分区aic_upgrade_end()更新环境变量切换启动分区rt_hw_cpu_reset()复位再次走BROM → PBP → tinySPL → 新固件链参考文档topics/sdk/ota/ota_programming.html九、特殊启动模式9.1 USB 烧录BROM 升级模式设备进入BROM USB 升级模式通常配合 AiBurn 工具PC 通过 USB 下发updater中的组件到 RAM 并按序执行将target组件烧入对应分区9.2 SD 卡 / U 盘工厂烧录方式流程概要SD 卡FAT32 根目录放bootloader.aicbootcfg.txt→ 上电进 tinySPL 自动烧录 →拔卡再上电U 盘类似需使能aicupg udisk upgrade注意烧录完成后不会自动重启防止重复进入烧录模式。参考文档topics/sdk/advanced/burn-procedure-by-diff-media.html9.3 客制化启动跳过 Luban-Lite 标准链上电后 BROM直接运行用户客制程序不必是 SDK 编译的 RT-Thread需按 AIC 镜像格式打包并遵守内存地址约束可选嵌入 PBP 做 PSRAM 初始化参考文档topics/sdk/d13x_bare_boot/index.html十、安全启动可选若通过 eFuse 使能安全特性BROM 阶段会增加eFuse 功能作用阶段安全启动RSA 验签仅运行合法签名固件SPI ENCSPI 总线数据加密固件加密启动固件密文解密后执行PBP 加密PBP 程序加密开启安全启动后Bootloader 等组件也需参与签名打包。参考文档topics/sdk/secure/章节十一、端到端时序总结[硬件] 上电 → 系统复位释放(~10ms) ↓ [BROM] 24MHz/无Cache读启动介质 spl 区或客制镜像 ↓ [PBP] (可选) 初始化 PSRAM/DRAM → 回 BROM ↓ [tinySPL] 使能 Cache初始化时钟/UART/堆 ↓ ├─ bootcmd 成功 → 读 os 分区 → 跳转 RT-Thread ├─ USB/SD/U盘升级 → aicupg 烧写 Flash └─ 失败/CtrlC → 串口命令行 (nor_boot/mem/mtd...) ↓ [Application] RT-Thread 启动 → 驱动/文件系统/业务任务十二、关键文档索引主题文档路径启动总览topics/sdk/boot/lite_boot_direct.htmltinySPL 设计topics/sdk/boot/lite_boot_design_guide.htmlBoot 配置编译topics/sdk/boot/lite_boot_config_guide.html分区说明topics/sdk/advanced/partition_intro.html镜像配置topics/sdk/boot/image-file-intro.htmlD13x 客制化启动topics/sdk/d13x_bare_boot/PBP/PSRAMtopics/sdk/d13x_bare_boot/init-config-prsam.htmlXIPtopics/sdk/xip/xip_user_guide.htmlSD/U盘烧录topics/sdk/advanced/burn-procedure-by-diff-media.html以上梳理基于当前工作区中的 Luban-Lite SDK 文档。