ARM9的启动方式及Bootloader的下载
2025-07-22
14
0
下面详细说明 ARM9(以经典的 S3C2440 芯片为例)的两种主要启动方式、配置方法,以及在这些模式下下载 Bootloader 所使用的工具。
S3C2440 的启动方式由 OM0 和 OM1 这两个引脚的电平状态决定。
工作模式 | OM0 | OM1 | 备注 |
---|---|---|---|
NOR Flash 启动 | 0 | 0 | JTAG开发 |
NAND Flash 启动 | 1 | 0 | 引导代码将NAND的前4K复制到RAM中,然后从RAM中启动 |
串口下载模式 | 1 | 1 | 使用串口工具下载BOOTLOADER,下载完成后从RAM地址0启动 |
常用串口下载工具:DNW(Windows)、Xmodem/Ymodem(配合SecureCRT、Tera Term等终端软件)
方式一:从 NOR Flash 启动
这是最直接、最简单的启动方式,常用于直接在 Flash 上运行代码(XIP)的场景,或者作为烧写 NAND Flash 的一个跳板。
1. 启动流程
- 配置:设置
OM0=0
,OM1=0
。通常是通过开发板上的跳线帽或拨码开关来设置。 - 上电/复位:
- CPU 的 0 地址(
0x00000000
)被物理映射到外部 NOR Flash 的起始地址。 - CPU 从
0x00000000
处(也就是 NOR Flash 的第一条指令)开始执行。 - Bootloader 必须预先被烧录在 NOR Flash 的起始位置。
- CPU 的 0 地址(
2. Bootloader 下载工具与方法
由于 NOR Flash 支持随机读写且可以直接地址映射,下载 Bootloader 到 NOR Flash 通常使用 JTAG 仿真器。
硬件工具:
- J-Link(SEGGER 公司)
- ULINK(ARM/Keil 公司)
- ST-Link (ST 公司,主要用于 STM32,但也可配合 OpenOCD 用于其他 ARM)
软件工具:
- J-Flash (J-Link 配套软件):
- 连接 J-Link 到开发板的 JTAG 口。
- 打开 J-Flash 软件,选择 S3C2440 芯片型号。
- 加载你编译好的
u-boot.bin
或其他裸机程序的二进制文件。 - 设置烧录的起始地址为
0x0
。 - 点击“烧录”或“Program”按钮,软件会通过 JTAG 协议将 Bootloader 写入 NOR Flash。
- OpenOCD (开源工具):
- 功能强大,但需要编写配置文件来描述开发板和芯片信息。
- 配合 GDB 可以进行在线调试。
- H-JTAG (国内开发者开发):
- 简单易用,支持多种并口/USB JTAG。
- J-Flash (J-Link 配套软件):
总结:NOR Flash 启动模式下,主要依赖 JTAG 工具链来完成 Bootloader 的首次烧写。
方式二:从 NAND Flash 启动
这是嵌入式 Linux 系统最常用的启动方式,因为 NAND Flash 容量大、成本低。但由于其特性,启动流程稍微复杂。
1. 启动流程
- 配置:设置
OM0=1
,OM1=0
。 - 上电/复位:
- S3C2440 芯片检测到这个配置后,会执行一段内部固化的引导代码(被称为 “Steppingstone”)。
- 这段引导代码非常小(只有4KB),它的唯一任务是:将 NAND Flash 起始的 4KB 数据,自动复制到片内的 SRAM(称为“步进石”)中。
- 复制完成后,CPU 会自动跳转到 SRAM 的起始地址(
0x40000000
)开始执行。 - 因此,Bootloader 的前 4KB 必须能独立完成对整个系统的初始化(特别是 SDRAM),然后将完整的 Bootloader 从 NAND Flash 的剩余部分复制到外部 SDRAM 中,最后再跳转到 SDRAM 中执行完整的 Bootloader。
2. Bootloader 下载工具与方法
在这种模式下,如果你想烧写 Bootloader 到一个空的 NAND Flash,流程如下:
- 临时切换到另一种下载模式:因为芯片无法直接从空的 NAND 启动。通常是临时切换到“串口下载模式”或使用 JTAG。
- 使用串口下载工具:
- 硬件工具:USB 转 TTL 串口线 (如 CH340, PL2303)。
- 软件工具:
- DNW (三星官方或社区修改版,Windows平台):
- 这是 S3C2440 最经典的下载工具。
- 操作步骤:
- 将开发板通过串口连接到 PC。
- 临时将
OM0
设置为0(或根据开发板手册进入下载模式),让芯片进入下载等待状态。 - 在 PC 上打开 DNW 软件,配置好串口号和波特率(通常是115200)。
- 通过 DNW 的 “USB Port -> Transmit” 功能,选择一个能在 RAM 中运行的 U-Boot 版本(通常文件名带有
ram
或有特别说明),并设置下载地址为 SDRAM 的地址(如0x30000000
)。 - 下载完成后,U-Boot 会在 SDRAM 中运行起来。
- 在串口终端(如 SecureCRT, PuTTY)中,使用 U-Boot 提供的
nand
命令(如nand erase
,nand write
),将需要固化到 NAND Flash 的 U-Boot 版本 (u-boot-nand.bin
) 烧写到 NAND 的 0 地址处。
- SecureCRT / PuTTY / Tera Term (配合 U-Boot 的 kermit/ymodem 协议):
- U-Boot 运行起来后,可以通过
loadb
(二进制),loady
(Y-Modem) 等命令,从 PC 接收文件到 RAM,然后再烧写到 NAND。
- U-Boot 运行起来后,可以通过
- DNW (三星官方或社区修改版,Windows平台):
总结:NAND Flash 启动模式下,首次烧写 Bootloader 通常需要先借助一个临时RAM版本的Bootloader,这个临时版本可以通过 串口工具(如DNW) 或 JTAG 下载到 RAM 中运行,然后再由它来完成对 NAND Flash 的最终烧写。
两种模式对比总结
特性 | NOR Flash 启动 (OM0=0, OM1=0 ) |
NAND Flash 启动 (OM0=1, OM1=0 ) |
---|---|---|
0地址映射 | 外部 NOR Flash | 片内 SRAM (Steppingstone),由内部ROM代码完成数据搬运 |
启动过程 | CPU 直接从 NOR Flash 取指执行。 | CPU 先执行内部代码,将NAND前4KB拷到SRAM,再从SRAM启动,最后完整Bootloader在SDRAM运行。 |
适用场景 | 裸机、XIP、系统引导修复。 | 嵌入式 Linux 系统的主流启动方式。 |
烧写工具 | JTAG 仿真器 (如 J-Link) + J-Flash 软件。 | 串口下载工具 (如 DNW) + U-Boot 自身的 nand 命令。 |
理解这两种模式的硬件配置和软件流程,是进行 ARM9 嵌入式系统开发的基础。