ARDUINO AS ISP · OPTIBOOT · ATMEGA328P/328
ATmega328P Bootloader 烧录完整指南
烧 Bootloader 和平时用 USB 口传程序不是一回事。Bootloader 烧录走的是 ISP 在线烧录接口,六根线加一颗电容,配合正确 Fuse 位,才能把芯片重新变成一块“能被 USB 串口上传程序”的 Arduino。
01为什么烧 Bootloader 不能走 USB
空白芯片或 Bootloader 坏掉的 ATmega328P,电脑串口上传程序没有入口,必须先用 ISP 接口把 Bootloader 写进去。
核心区别:USB 上传用的是芯片里已经烧好的 Bootloader 在跟电脑对话;烧 Bootloader 时芯片里还没有这段程序,只能用另一块 Arduino 或专用编程器,通过 MOSI / MISO / SCK / RESET 四根信号线直接写 Flash 和 Fuse 位。
02三种可行的烧录方式
同一件事,三条路径。底层都是 ISP 烧录,只是工具和出错空间不同。
方式一
Arduino IDE + Arduino as ISP
- 不需要额外买硬件,一块闲置 UNO 就能当编程器。
- 先给 UNO 上传 ArduinoISP 例程,再按 ISP 接线烧目标芯片。
- 菜单容易选错:Programmer 必须选 “Arduino as ISP”。
最省钱,适合客户自己修一两块板;步骤多,第一次最容易卡在菜单选项。
方式二
AVRDUDESS 图形界面
- USBasp 或 Arduino as ISP 都可做编程器。
- 能读写 Flash、Fuse、Lock Bits,日志更直观。
- 需要自己填正确 Fuse 位,填错可能导致芯片暂时无法通信。
适合经常烧 AVR 的人,用来核对签名和 Fuse 位很方便。
方式三 · 已实测
UNO_Burner 一键工具
- 本地定制工具,Fuse 位和 Optiboot hex 已预置。
- 2026-07-23 实测:PASS,耗时约 2.3 秒。
- 自动记录烧录日志,适合批量核对良率。
最快、最不容易点错,适合同一型号芯片批量烧录。
03ISP 接线图
三种方式接线本质一致:编程器到目标 ATmega328P 的 ISP 六线。
| 编程器 UNO | 目标芯片/板子 | 说明 |
|---|---|---|
| D10 | RESET | UNO 作为 ISP 时 D10 控制目标复位。 |
| D11 | MOSI | SPI 数据输出,容易和 MISO 接反。 |
| D12 | MISO | SPI 数据输入。 |
| D13 | SCK | SPI 时钟。 |
| 5V / GND | VCC / GND | 目标芯片必须稳定供电并共地。 |
| RESET-GND 10uF | 加在烧录器 UNO 自身 | 不是加在目标芯片上,用于防止烧录器自动复位。 |
最常见错误:MOSI/MISO 接反、Programmer 选错、目标芯片没外部晶振、烧录器 UNO 没先上传 ArduinoISP。先查这些,再判断芯片是否损坏。
04Arduino IDE 烧录步骤
给客户看时,重点是“先烧编程器,再接目标,再切目标板型”。
- 把作为烧录器的 UNO 接电脑。Tools > Board 先选 Arduino Uno,Port 选当前 UNO 端口。
- 上传 ArduinoISP 例程。File > Examples > 11.ArduinoISP > ArduinoISP,点击 Upload。
- 按 ISP 六线连接目标 ATmega328P。D10/D11/D12/D13 分别到 RESET/MOSI/MISO/SCK,5V/GND 必须接稳。
- 切换到目标板型。Tools > Board 改选要被烧的板,例如 Uno 或 Nano;Nano 还要确认 Processor。
- 选择 Programmer。Tools > Programmer 选择 Arduino as ISP,不是 ArduinoISP。
- 执行 Burn Bootloader。成功后,再用 USB 串口方式上传普通程序。
05Fuse 位速查表(16MHz 外部晶振 + Optiboot)
标准 Arduino Uno / 16MHz 外部晶振配置。不同 bootloader 或不同晶振方案不要照抄。
| Fuse | 数值 | 含义 |
|---|---|---|
| Low Fuse | 0xFF | 外部 16MHz 晶振,启动延时 16K 周期 + 65ms。 |
| High Fuse | 0xDE | Bootloader 区、复位向量、SPI 编程使能等配置。 |
| Extended Fuse | 0xFD | BOD 阈值配置;部分工具写入/读回显示可能不同,以工具说明为准。 |
| Lock Bits | 0x3F → 0x0F | 烧录前未锁定,烧完后锁定 Bootloader 区,避免普通上传覆盖。 |
| 芯片签名 | 1E 95 0F | ATmega328P 的设备签名,用于核对芯片型号。 |
328 和 328P 不是一回事:两者设备签名不同。遇到 device signature mismatch,先确认芯片丝印和工具里的芯片型号,而不是直接判断板子坏。
06工具下载
本页放客户能直接下载的工具包和演示视频。工具只适用于对应 ATmega328P / 16MHz / Optiboot 场景。
07实测演示:UNO_Burner 一键烧录
2026-07-23 实拍,用 UNO_Burner 工具预置 Fuse 位和 Optiboot hex,插上芯片点一下就烧完。
实拍演示 · UNO_Burner 烧录 ATmega328P
#0001 | PASS | 约 2.3s | 以实测日志为准
08常见报错排查
stk500_getsync(): not in sync: resp=0x00
串口上传握手失败。若是普通上传,检查 Board/Port、Bootloader 类型、RX/TX 是否被占用;若是 Burn Bootloader,优先检查 Programmer 是否选 Arduino as ISP。
initialization failed, rc=-1
ISP 初始化失败,多半是接线或时钟问题。逐根核对 RESET、MOSI、MISO、SCK、VCC、GND;确认目标芯片有稳定 16MHz 外部晶振。
device signature mismatch
工具选择的芯片型号和实物不一致。检查是 ATmega328、ATmega328P,还是板型/Processor 选错。
programmer is not responding
烧录器本身没有正常运行 ArduinoISP,或者打开串口时 UNO 被自动复位。重新上传 ArduinoISP,并在烧录器 UNO 的 RESET-GND 加 10uF 电容后再试。
排查顺序:先查接线、供电、晶振、菜单选项和芯片签名。大多数问题不是芯片坏,而是 ISP 没连上或工具选项不匹配。
09参考资料
- Arduino 官方 ArduinoISP 示例文档
- Arduino 官方:用另一块 Arduino 烧 Bootloader
- Microchip ATmega328/328P 官方数据手册
- Optiboot bootloader 源码与 Makefile:Fuse 位官方参考值出处。
- AVRDUDESS 图形界面工具:适合配合 USBasp 或 Arduino as ISP 查看日志。