ATmega328P · ArduinoISP · Bootloader

ATmega328P / ATmega328 烧录 Bootloader 报错排查

用于空白 ATmega328P、Arduino UNO/Nano 芯片、最小系统板的 ArduinoISP 烧录说明。重点排查接线、板型选择、外部晶振、自动复位和常见 avrdude 报错。

适用芯片 ATmega328P / 328
烧录方式 Arduino as ISP
D10目标 RESET
D11-D13SPI
16MHz常见晶振

结论基于 Arduino 官方 ArduinoISP / Bootloader 文档和 Microchip ATmega328P 公开数据手册。不同板卡丝印以实物为准。

Conclusion

先看结论

确认:烧 Bootloader 不是普通 USB 串口上传,必须通过 ISP 接口连接 MOSI、MISO、SCK、RESET、VCC、GND。Arduino IDE 里要先把 UNO 上传成 ArduinoISP,再选择目标板和 Programmer: Arduino as ISP,最后执行 Burn Bootloader。

板型选目标板

确认:Tools > Board 选要被烧录的目标板,例如 Arduino Uno 或 Nano,而不是选作为烧录器的 UNO。

Processor 要匹配

确认:Classic Nano 可能有 Old Bootloader 选项;ATmega328P 与 ATmega328 非 P 签名不同,遇到签名错误要先确认芯片型号。

晶振和 Fuse

确认:UNO bootloader 通常按外部 16MHz 时钟配置。目标芯片如果 fuse 已设外部晶振但实物没接晶振,会表现为无法通信。

Wiring

Arduino UNO as ISP 接线图

自绘无水印接线图。若目标是裸片/最小系统,按 ATmega328P 引脚连接;若目标是 UNO/Nano 板,可直接接 ICSP 排针。

Arduino UNO as ISP 烧录 ATmega328P Bootloader 接线图
Arduino UNO 烧录器目标 ATmega328P / 板子说明
5VVCC / AVCC确认:5V 目标板使用;3.3V 目标板不要直接接 5V。
GNDGND确认:必须共地。
D10RESET确认:UNO 作为 ISP 时 D10 控制目标芯片复位。
D11MOSI确认:SPI 数据输出。
D12MISO确认:SPI 数据输入。
D13SCK确认:SPI 时钟。
RESET-GND 加 10uF烧录器 UNO 自身确认:用于防止烧录器 UNO 自动复位,很多 UNO 需要加。

Steps

Arduino IDE 烧录步骤

1把作为烧录器的 UNO 接电脑,打开 Arduino IDE。
2打开 File > Examples > 11.ArduinoISP > ArduinoISP。
3Tools > Board 先选烧录器 UNO,Tools > Port 选 UNO 端口,点击 Upload,把 ArduinoISP 例程上传到 UNO。
4按接线图连接目标 ATmega328P / 目标板,必要时在烧录器 UNO RESET-GND 加 10uF 电容。
5Tools > Board 改选目标板,例如 Arduino Uno 或 Arduino Nano;Nano 还要确认 Processor。
6Tools > Programmer 选择 Arduino as ISP。注意不是 ArduinoISP,也不是 AVRISP mkII。
7执行 Tools > Burn Bootloader。成功后再用串口/USB 上传普通程序。

Troubleshooting

常见报错排查

avrdude: stk500_getsync() / not in sync

确认:常见于串口上传失败,不一定是 bootloader 烧录失败。若正在 Burn Bootloader,请优先检查 Programmer 是否选 Arduino as ISP、接线是否是 D10/D11/D12/D13 到目标 RESET/MOSI/MISO/SCK。

avrdude: initialization failed, rc=-1

确认:ISP 没有和目标芯片建立通信。检查 VCC/GND、RESET、MOSI/MISO/SCK 是否接反;裸片检查外部晶振/谐振器是否存在。

device signature mismatch / wrong signature

确认:芯片签名与板型不匹配。常见原因是 ATmega328P 和 ATmega328 非 P 型号不同、Tools > Board/Processor 选错、目标芯片没有正常供电或 SPI 接线异常。

programmer is not responding

确认:作为烧录器的 UNO 没有正常运行 ArduinoISP,或 UNO 自动复位。先重新上传 ArduinoISP,再给 UNO 的 RESET-GND 加 10uF 电容后重试。

烧录成功后普通上传还是失败

待确认:先确认你烧的是对应板型 bootloader;Nano 需要确认 Processor/Old Bootloader;裸片需要检查 RX/TX、自动复位电容、USB 转串口芯片和波特率。

Customer Reply

淘宝客户简短话术

您好,ATmega328P 烧 bootloader 需要走 ISP 口,不是普通 USB 上传。请先给作为烧录器的 UNO 上传 ArduinoISP 例程,再按 5V/GND/D10-D13 接目标芯片的 VCC/GND/RESET/MOSI/MISO/SCK。Arduino IDE 里 Board 要选目标板,Programmer 选 Arduino as ISP,再点 Burn Bootloader。若报 initialization failed,请重点检查供电、RESET、MOSI/MISO 是否接反、目标芯片是否有 16MHz 晶振。

不要一上来判断芯片坏

Bootloader 烧录失败多数是接线、板型、Processor、晶振、自动复位导致。先按流程排查,再判断是否芯片或板子硬件问题。

References

官方资料链接

只使用公开资料和自绘接线图,不使用客户截图、订单、地址或带水印图片。

Arduino

Arduino as ISP and Arduino Bootloaders

官方教程说明 Arduino as ISP 是给其他 AVR 芯片烧 bootloader 的实用方法。

打开资料

Arduino Support

Burn the bootloader using another Arduino

Arduino 官方支持文章,说明用另一块 Arduino AVR 板给 UNO、Mega、classic Nano 等烧 bootloader。

打开资料

Microchip

ATmega328P Datasheet

官方数据手册,确认 ATmega328P 支持通过 SPI 串行接口进行 ISP 编程。

打开 PDF