1. 嵌入式Boot Loader:从冷启动到系统就绪的幕后指挥官
每次给一块嵌入式板卡上电,看着串口终端里滚过的一行行启动信息,最后稳定地进入操作系统或者应用程序,这个过程看似理所当然,背后却是一个精密而复杂的“点火”流程。这个流程的起点和总指挥,就是Boot Loader。它不是操作系统,却为操作系统的运行铺平了道路;它体积小巧,却掌管着硬件初始化的生杀大权。对于嵌入式开发者而言,深入理解Boot Loader,就如同赛车手熟悉自己赛车的点火系统和变速箱,是进行高效开发、深度调试和解决棘手启动问题的基石。
以Motorola(现NXP)PowerPC 8xx系列处理器平台上的PlanetCore Boot Loader为例,它是一个非常经典且功能丰富的Boot Loader实现。它不仅仅完成最基本的CPU、内存初始化,还集成了一套完整的命令行交互环境、网络加载、内存测试和配置管理工具,相当于把一个轻量级的“调试监控程序”固化在了板卡的Flash中。这为产品开发阶段的烧录、测试、更新以及现场的问题诊断提供了极大的便利。本文将深入拆解Boot Loader的核心工作机制,特别是其多样的操作模式,并详解那些在调试台上每天都会用到的关键命令,让你能真正驾驭这个系统启动的“第一推动力”。
2. Boot Loader操作模式深度解析:三副面孔应对不同场景
Boot Loader并非只有一种启动路径。为了适应开发、生产、故障恢复等不同场景,一个设计良好的Boot Loader会提供多种操作模式。PlanetCore Boot Loader主要定义了三种核心模式:Normal模式、User模式和Fallback模式。理解这些模式的区别和切换机制,是灵活使用Boot Loader的前提。
2.1 Normal模式:标准的系统检查与报告
Normal模式是Boot Loader最基础、最完整的启动流程。当系统以该模式启动时,它会严格执行一套标准的初始化序列。
启动后,Boot Loader首先会从板载的EEPROM中读取预先配置好的系统参数。这些参数可能包括CPU时钟频率、内存大小和时序、串口波特率、网络IP地址等,是硬件板卡的“身份证”和“调校手册”。读取完成后,Boot Loader会利用这些配置信息,对CPU、内存控制器等关键硬件进行初始化。
紧接着,它会执行一系列快速的设备自检。这些自检通常是非破坏性的,例如检查内存总线的基本连通性、校验EEPROM数据的完整性等,目的是在加载主程序前,确保核心硬件环境是基本可用的。
完成上述步骤后,Boot Loader并不会自动跳转到用户程序,而是会在连接的终端上打印一份详细的系统配置报告。这份报告通常包含Boot Loader版本号、检测到的DRAM大小、CPU型号、时钟频率、DIP开关状态以及从EEPROM读取的各项配置参数。对于开发者来说,这份报告是验证硬件焊接、配置是否正确以及进行初步调试的宝贵信息。
注意:Normal模式是进行板卡“裸机”功能验证的理想模式。当你拿到一块新板子,或者修改了硬件配置后,首先应该让Boot Loader进入Normal模式,查看其报告是否与预期一致,这是排查硬件问题的第一步。
2.2 User模式:无缝衔接应用程序
User模式的设计目标是实现“无感”启动。在此模式下,Boot Loader的启动前半段与Normal模式完全相同:读取EEPROM配置、初始化硬件、执行快速自检。
区别在于后续动作。完成自检后,Boot Loader不会停留在命令行界面打印报告,而是会主动在Flash存储器的特定地址范围(通常是紧接着Boot Loader自身存储空间之后的区域)搜索有效的用户程序。这个“有效”的判断可能基于特定的文件头魔数、校验和或者向量表。
如果它找到了一个可执行的用户程序镜像(例如一个嵌入式Linux内核的uImage,或者一个裸机应用程序的bin文件),便会立即将CPU的执行权移交(Jump)给这个程序,系统由此无缝地进入应用程序运行状态。如果搜索失败,没有找到任何有效的程序,Boot Loader则会自动回退到Normal模式,并在终端上显示配置报告,等待用户输入命令。
这里涉及一个关键配置项:Autoboot。在EEPROM的配置中,可以设置Autoboot键值为User。当此项启用且DIP开关设置的值大于二进制0010(即十进制2)时,系统上电后将自动尝试执行User模式的流程。如果DIP开关被设置为0000,0001, 或0010, 则会阻止Autoboot,强制Boot Loader进入交互式命令行状态,无论Autoboot配置如何。你可以通过info命令随时查看当前的DIP开关设置状态。
2.3 Fallback模式:EEPROM出错时的安全网
Fallback模式是Boot Loader的“安全模式”或“恢复模式”。它的触发通常不是由DIP开关直接选择,而是作为一种保护机制,在检测到严重配置错误时自动启用。
无论DIP开关设置为何种模式,只要Boot Loader在启动过程中发现EEPROM或其存储的配置信息存在任何问题,系统都会无条件地强制进入Fallback模式。可能触发此模式的问题,按其检测顺序包括:
- I2C总线通信失败:无法访问EEPROM所在的I2C总线。
- EEPROM无响应:I2C总线正常,但EEPROM芯片本身不响应读请求。
- 配置信息校验和无效:读取到的EEPROM数据校验错误,表明数据可能已损坏。
- 缺少必要的系统参数:关键的配置项缺失。
- 系统参数语法错误:配置值的格式不符合预期。
- 系统参数值非法:配置值超出了合理范围(如设置了不存在的内存大小)。
进入Fallback模式后,Boot Loader会使用一套内置的、最保守的默认参数来初始化系统(例如,使用最低的波特率9600bps进行串口通信),并给出明确的错误提示。这确保了即使EEPROM被意外擦除或损坏,开发者仍然能够通过串口连接到Boot Loader,使用load命令重新从EEPROM读取(如果可能)、手动修正配置(使用set命令),或通过TFTP重新烧写整个系统镜像,从而恢复板卡。
2.4 操作模式的选择:DIP开关的二进制密码
在PlanetCore Boot Loader中,操作模式的选择主要通过板载的4位DIP开关(拨码开关)来实现。这4位开关被解释为一个二进制数,其中开关1(SW1)为最高有效位(MSB)。
需要特别注意其物理逻辑:开关拨到ON的位置对应二进制位值为0,拨到OFF的位置对应二进制位值为1。这一点与许多人的直觉相反,在实际操作中务必确认。
| DIP开关值(十六进制) | DIP开关值(二进制) | 操作模式 |
|---|---|---|
| 0x0 | 0000 | Normal模式 |
| 0x1 | 0001 | 保留(可能表现为Normal模式,但未来版本不保证) |
| 0x2 | 0010 | Fallback模式 |
| 0x3 到 0xE | 0011 到 1110 | User模式 |
| 0xF | 1111 | Normal模式 |
从表中可以看出:
- 强制Fallback:将开关设置为
0010(即SW3=OFF,其余ON)是主动进入Fallback模式的方法。 - 启用User模式:除了
0010和少数几个值,大部分开关设置(0011到1110)都会让Boot Loader尝试进入User模式并自动引导。 - 明确Normal模式:
0000和1111都对应Normal模式,这提供了两种明确的设置方式。
实操心得:在实际开发中,我通常将一套板卡的DIP开关统一设置为
1111(全OFF)作为“调试模式”,确保上电后一定进入Normal命令行。而在产品部署时,则设置为0011(SW3, SW4 OFF)等值,启用User模式并配合Autoboot,实现上电即运行应用程序。务必在板卡原理图和丝印上明确标注开关ON/OFF与二进制值的对应关系,避免团队协作中的 confusion。
3. 核心命令详解:Boot Loader的瑞士军刀
Boot Loader的命令行接口是其强大功能的直接体现。通过串口终端,开发者可以像操作一个简易操作系统一样,对硬件进行探查、测试和配置。以下对关键命令进行深入解析。
3.1 系统探查与信息获取命令
这类命令用于了解系统当前状态,是调试的起点。
info命令这是你连接上板卡后应该输入的第一个命令。它提供了一份详尽的系统“体检报告”:
- Boot Loader镜像校验和:用于确认当前运行的Boot Loader版本。
- Boot Loader在Flash中的位置:这直接揭示了板卡是高启动还是低启动。如果地址在
0xFFF00000附近,则是高启动(MSR::IP位在复位时为1);如果在0xFC000000附近,则是低启动(MSR::IP位为0)。这个信息在烧写程序时至关重要。 - 主振荡器晶体频率:CPU的主时钟源频率,PLL将基于此频率倍频产生CPU核心频率。
- DRAM可用大小:Boot Loader检测到的实际可用内存容量。
- DIP开关设置:以二进制形式显示当前4位开关的状态。
- 复位原因:显示复位状态寄存器(RSR)中的标志位,帮助判断是上电复位、看门狗复位还是软件复位。
map命令显示Boot Loader当前配置的内存映射视图。Boot Loader只会初始化它需要用到的内存区域(如DRAM、Flash、NVRAM),并不会配置所有可能的内存空间。该命令的输出类似于下表,清晰地展示了每个片选(Chip Enable)信号所映射的地址空间:
| 片选 | 起始地址 | 长度 | 描述 |
|---|---|---|---|
| --- | FA200000 | 10000 | CPU内部内存。Boot Loader将IMMR寄存器设置为此地址。 |
| 0 | FC000000 | 4000000 | Flash内存区域。映射为64MB空间以供未来扩展。Boot Loader自身运行于此区域的高端或低端。 |
| 1 | 00000000 | 可变 | DRAM区域(第一组)。大小由EEPROM参数或自动检测(DIMM)决定。 |
| 2 | 可变 | 可变 | DRAM区域(第二组,仅双Bank DIMM使用)。与第一组地址连续。 |
| 3 | FA400000 | 小 | CPU板BCSR(板控制和状态寄存器)区域。 |
| 3 | FAC00000 | 小 | 附加板BCSR区域。 |
| 4 | FA000000 | 可变 | NVRAM(非易失RAM)区域。大小由EEPROM配置指定。 |
注意事项:
map显示的是Boot Loader认知的映射。如果通过modify命令不当修改了内存控制器寄存器,再去用dump访问未正确配置的区域,可能导致总线挂起,进而触发看门狗复位。
3.2 内存操作与调试命令
dump与modify命令这是最基础的调试命令组合,用于查看和修改任意内存或寄存器地址的内容。
dump [mode] [address [length]]:以十六进制和ASCII形式显示内存。mode参数(B-字节, H-半字, W-字)控制显示格式。如果不指定地址和长度,则会从上一次dump结束的地址继续显示,方便连续查看大块内存。modify [z][x][mode] [address]:交互式地修改内存。z选项锁定地址(修改后不自动递增),x选项禁止读取显示原值(直接写入)。使用时需格外小心,错误的写入可能使系统崩溃。
dtest与nvtest命令硬件测试命令。
dtest [L]:测试动态RAM(DRAM)。不加L参数执行短测试(快速检查),加L执行长测试(更全面的测试,可被ESC中止)。测试完成后,整个DRAM会被初始化为0x00。注意:显示的可用DRAM大小可能小于EEPROM中的配置值,如果板载DRAM实际容量小于配置值。nvtest [L]:测试非易失RAM(NVRAM)。同样,L参数用于长测试。该命令还会显示电池状态和NVRAM的校验和。
踩坑记录:曾经遇到一个故障,
info显示DRAM为64MB,但dtest长测试在32MB处报错。最终排查是内存条的一个Bank虚焊。因此,在新板卡首次上电或怀疑内存有问题时,运行dtest L进行完整测试是非常必要的。
3.3 程序加载与执行命令
这是Boot Loader的核心功能,关乎如何将你的应用程序弄到板子上并跑起来。
tftp命令tftp命令通过以太网从TFTP服务器下载文件。这是最常用、最快速的代码加载方式。执行命令后,会交互式地提示输入:
- 服务器IP地址:提供文件的主机地址。
- 文件名:要下载的文件名,如
uImage或app.bin。 - 传输类型:
s代表S-Record格式(可重定位),b代表纯二进制格式。 - 偏移量/起始地址:对于S-Record文件,通常为0;对于二进制文件,则是要加载到内存中的起始地址。
Boot Loader需要一块内存区域作为TFTP传输的缓冲区,其位置由TftpRam配置键控制,可以是DRAM的最高端(顶部)或低端(0x2000起始)。传输过程中可按ESC中止。
serial命令当网络不可用时,serial命令通过串口接收S-Record格式的文件。你需要通过终端软件的“发送文本文件”功能将.mot文件发送出去。Boot Loader会解析接收到的S-Record,并将其加载到内存中指定的偏移地址。每接收10条记录会回显一个点号作为进度提示。
go命令go [address]命令是执行的“发令枪”。它将CPU的执行权跳转到指定的地址。如果之前通过tftp或serial成功加载了程序,且加载的是S-Record格式,go命令可以不跟地址,它会自动使用S-Record中记录的起始地址。
在执行跳转前,Boot Loader会做一系列准备工作:
- 设置MSR寄存器(除非之前用
spr命令修改过)。 - 在双端口内存中准备一个包含所有配置信息的结构体,并将其指针通过R3寄存器传递给目标程序。这是Boot Loader向应用程序传递硬件配置信息的标准方式。
- 根据
SYPCR配置键(看门狗定时器)进行设置。 - 复位看门狗定时器。
- 如果
RestoreCE配置键设为Y,会重置片选0,这会导致其他内存区域不可访问。因此,除非你的程序完全在Flash中运行,否则不要启用此选项。
run命令run [file]命令是tftp+go的快捷方式。它使用TFTP协议加载文件(文件名可指定,或使用上次TFTP的文件名/配置中的File键),加载完成后自动执行go。这相当于一次手动触发的网络自动引导(Autoboot)。
3.4 配置管理命令
Boot Loader的所有行为都受一套配置参数(键值对)控制,这些参数存储在EEPROM中。
set与store命令
set:查看或修改当前内存中的配置参数。例如,set baud显示当前波特率,set baud=115200将其修改为115200bps。修改后,有些参数(如波特率)会立即生效,有些则需要重启。store:将当前内存中的配置参数永久保存到EEPROM中。如果不执行store,修改只对本次运行有效,断电即丢失。store erase选项会先擦除EEPROM中所有旧键,通常只在EEPROM已满报错时使用。
load命令load命令从EEPROM中重新读取配置到内存。这在Fallback模式下非常有用:即使因为配置错误进入了Fallback模式,你仍然可以尝试load读取EEPROM(只要能读),然后检查并修正内存中的配置值,最后用store写回EEPROM以修复问题。
keys命令keys命令以原始格式显示将通过R3寄存器传递给应用程序的配置信息字符串。这是一个由key=value对组成、以换行符分隔的长字符串。应用程序可以解析此字符串来获取波特率、内存大小、IP地址等所有板级配置。
3.5 其他实用命令
help:列出所有可用命令及其缩写。reset:强制CPU复位。通过访问不存在的内存地址制造一个检查停止(checkstop)条件来实现。pings:使Boot Loader响应网络上的ARP和ICMP Echo请求。在此模式下,其他计算机可以ping通该板卡的IP地址,用于基本的网络连通性测试。nettest:更复杂的网络环回测试命令,支持内部环回、外部环回(需要环回头)等多种模式,用于诊断物理层和数据链路层问题。spr:显示或修改特殊功能寄存器(SPR)和机器状态寄存器(MSR)。这是高危命令,不当修改可能立即导致系统崩溃,仅在对CPU内核有深入理解时使用。ports:显示芯片内部端口A到D的当前状态。now:显示自上次复位或now c(清除)命令以来的实时时钟(RTC)时间。
4. 实战流程:从烧写到引导的完整链路
理解了模式和命令,我们将其串联起来,看几个典型的实战场景。
4.1 场景一:为新板卡首次烧写Boot Loader
假设你拿到一块全新的、Flash为空白的RPX板卡,需要通过Background Mode Debugger(BMD,即JTAG)来烧写最初的Boot Loader。
- 硬件连接:连接BMD调试器到板卡的JTAG接口,连接串口线到SMC1(监控端口)。
- 启动BMD工具:在PC上启动调试软件(如Lauterbach TRACE32, Abatron BDI等),连接并暂停CPU。
- 初始化内存:通过BMD脚本或命令,正确初始化SDRAM控制器和UPM,确保地址
0x00000000开始的内存可读写。 - 加载镜像文件:通过BMD将
pcl102.mot(包含高/低启动两种镜像)文件加载到SDRAM中,例如加载到0x100000地址。 - 设置MSR::IP位:关键步骤!必须根据你的板卡是高启动还是低启动,通过BMD正确设置MSR寄存器的IP位。如果不确定,最安全的方法是让后续的烧写程序同时烧写高和低两个镜像。
- 执行烧写程序:让CPU从
0x100000开始执行。烧写程序会通过串口输出信息(默认9600bps,可通过设置DIP开关为0010进入Fallback模式确保此波特率)。 - 等待与确认:等待约7秒(期间可按ESC中止),烧写程序会自动开始编程Flash。板卡上的LED会以均匀慢闪指示编程中,完成后变为恒亮或特定闪烁。串口会输出“FLASH programmed successfully!”。
- 复位:按
R或手动复位板卡。此时,全新的Boot Loader应该已经运行。
4.2 场景二:通过已有Boot Loader更新应用程序
这是开发中最频繁的操作。假设板卡已有PlanetCore Boot Loader,我们要通过网络更新一个裸机应用程序app.bin。
- 设置模式:将DIP开关设为
1111或0000,进入Normal模式,确保上电后停留在Boot Loader命令行。 - 配置网络(如果尚未配置):
> set ip=192.168.1.100 > set netmask=255.255.255.0 > set gateway=192.168.1.1 > set target=192.168.1.50 // TFTP服务器IP > set format=netbin // 因为app.bin是二进制文件 > store // 保存配置到EEPROM > reset // 重启使网络配置生效 - 启动TFTP服务器:在IP为
192.168.1.50的PC上,运行TFTP服务器软件,并将app.bin放入其服务目录。 - 下载并执行:
等待传输完成,显示传输大小。> tftp Enter host IP: 192.168.1.50 Enter file name: app.bin Enter format (s-record or binary) [s]: b Enter offset/start address [0x0]: 0x100000 // 指定加载到内存1MB处
或者,更简单的方式,如果配置好了> go 0x100000 // 跳转到应用程序入口File和Start键,可以直接:> run app.bin
4.3 场景三:修复损坏的EEPROM配置导致进入Fallback模式
板卡上电后串口无输出,或提示进入Fallback模式。
- 连接终端:使用串口工具(如PuTTY, SecureCRT)以9600bps(Fallback模式默认波特率)连接板卡。
- 检查状态:输入
info命令,查看是否确实处于Fallback模式及错误原因(如“EEPROM checksum invalid”)。 - 尝试加载配置:输入
load命令,尝试从EEPROM读取配置。有时只是校验错误,数据本身可读。 - 查看与修正:输入
set查看当前配置。与正确的配置表对比,逐一修正错误的键值。例如,如果DRAM大小错了:> dram 16 // 显示当前值,假设是16MB > dram=64 // 修正为正确的64MB > set baud=115200 // 修正波特率 ... // 修正其他参数 - 保存与测试:输入
store将修正后的配置写入EEPROM。输入reset重启,观察是否正常进入Normal或User模式。 - 终极恢复:如果EEPROM物理损坏或
load完全失败,则需要通过tftp或serial重新加载一个包含完整、正确配置参数的Boot Loader或应用程序镜像,让其重新初始化EEPROM。
5. 高级主题与故障排查实录
5.1 看门狗定时器(Watchdog Timer)的配置与影响
MPC8xx处理器内部集成了软件看门狗定时器。Boot Loader根据SYPCR配置键的值来决定是否启用及如何配置它。
SYPCR=FFFF0689:禁用看门狗定时器。在调试阶段建议禁用,避免程序在断点处暂停时被意外复位。SYPCR=FFFF068D:启用看门狗定时器。在产品部署时应启用,以提高系统抗干扰能力。
一旦启用,Boot Loader(或你的应用程序)必须定期“喂狗”(重置看门狗计数器),否则定时器超时将引发硬件复位。在Boot Loader命令行状态下,它是会负责喂狗的。但当你使用go命令跳转到自己的程序后,喂狗的责任就完全移交给了你的应用程序。如果你的程序死循环或卡住,看门狗会复位整个系统,这是一种重要的故障恢复机制。
严重警告:在调试初期,如果你的应用程序没有正确初始化或喂狗,系统会频繁地、周期性地复位,现象就是板卡运行几秒后所有LED闪烁一下又重启。这时应首先在Boot Loader中用
set SYPCR=FFFF0689禁用看门狗,待程序稳定后再启用。
5.2 LED指示灯代码解读
板卡上的LED是诊断Boot Loader状态,特别是Flash烧写过程的直观工具。
| LED状态 | 描述 |
|---|---|
| 均匀慢闪 | 编程完成且镜像OK。烧写成功,可以安心复位了。 |
| 半亮 | 等待用户输入。在烧写程序等待的7秒内,它等待你按P(立即编程)或ESC(中止)。 |
| 常亮 | 正在编程。Flash擦除/写入进行中,切勿断电或复位! |
| 两慢闪后紧跟快闪 | 错误。快闪次数代表错误代码(见表4-5),每5次快闪后有一个停顿。这是最关键的错误指示。 |
常见错误代码解析:
- Error 1:CPU故障,无法初始化内部RAM指针。可能是严重的CPU或电源问题。
- Error 3:未知的Flash制造商代码。Boot Loader安装程序不认识板载的Flash芯片型号,可能需更新Boot Loader版本。
- Error 10-13:S-Record文件损坏。检查你下载的
.mot文件是否完整,传输过程是否有错误。 - Error 14:编程失败。Flash芯片可能已物理损坏,或焊接不良。
5.3 网络相关命令的故障排查
网络功能(tftp,pings,nettest)依赖正确的底层驱动和配置。
pings无响应:- 首先用
set命令检查ip,netmask,gateway配置是否正确,且与TFTP服务器在同一子网。 - 检查网线是否连接,链路指示灯是否亮起。
- 在服务器端用
arp -a查看是否学习到了板卡的MAC地址。如果没有,可能是Boot Loader的网络驱动未初始化或物理层故障。 - 尝试使用
nettest external(需要环回头)测试板卡自身PHY芯片的回环是否正常。
- 首先用
tftp传输失败或超时:- 确认服务器防火墙关闭了UDP 69端口的阻挡。
- 确认TFTP服务器软件已正确运行,并且目录权限允许读取文件。
- Boot Loader的
tftp实现通常只支持TFTP的octet模式,且对文件名大小写敏感。 - 传输大文件时,确保
TftpRam配置的内存缓冲区足够。如果失败,可以尝试在set TftpRam=0x2000和set TftpRam=high之间切换。 - 一个重要提示:首次运行快速以太网外部环回测试(
nettest external)时,由于自动协商过程,可能会显示发送和接收的数据包数量有差异。如果遇到,重新运行一次测试即可。
5.4 内存测试的深入解读
dtest和nvtest命令的“短测试”和“长测试”区别很大:
- 短测试:通常只是进行最简单的地址线和数据线测试,比如写入并读取
0xAAAAAAAA和0x55555555这样的走0走1模式。它能快速发现数据线短路、断路或严重故障。 - 长测试:会进行更全面的测试,可能包括:
- 全0/全1测试:检查每个位单元能否可靠地存储0和1。
- ** marching bits/ walking bits测试**:检查地址间的干扰。
- ** checkerboard测试**:检查相邻存储单元间的干扰。
- 随机模式测试。 长测试非常耗时,特别是对于大容量内存,但能发现更隐蔽的、与温度或时序相关的间歇性故障。
在实际生产中,可能只运行短测试以保证效率。但在研发、可靠性验证或故障分析时,长测试是必不可少的。如果短测试通过而长测试失败,往往指向内存时序配置过于激进(在临界值附近)或存在信号完整性问题(如过冲、振铃)。
5.5 配置管理的最佳实践与陷阱
EEPROM的配置管理是Boot Loader稳定运行的基石。
- 备份配置:在修改任何关键配置(如
dram,clocks)前,先用set命令查看并记录原始值。或者,定期通过keys命令将输出的配置字符串保存到文本文件中。 - 理解
store的风险:store命令是对EEPROM的物理写入,有寿命限制(通常10万到100万次)。避免在脚本中循环执行store。 RestoreCE键的陷阱:这个键默认为N。如果被误设为Y,那么任何通过go命令跳转到Flash之外(如SDRAM中)的程序都会因为片选0被重置而无法访问其代码所在的内存,导致立即崩溃。如果你发现go命令总是失败,检查一下这个键。- 波特率设置的“鸡生蛋”问题:在Fallback模式下,波特率固定为9600。如果你在Normal模式下将波特率改成了115200并
store,但新波特率实际无法工作(例如终端软件未及时更改),你将无法再与Boot Loader通信。此时唯一的恢复方法是重新进入Fallback模式(设置DIP开关为0010),因为Fallback模式会忽略EEPROM中的波特率设置,强制使用9600,让你有机会重新修正配置。
我个人在十多年的嵌入式开发中,Boot Loader不仅是启动工具,更是最可靠的硬件调试助手。当操作系统或应用程序复杂到难以定位底层问题时,回归到Boot Loader命令行,用dtest、nettest、info这些原始命令做最基础的硬件验证,往往是照亮迷雾的那盏灯。把Boot Loader的原理和命令摸透,你在嵌入式系统开发的道路上,就真正拥有了从硬件到软件的全栈掌控力。