手把手教你用Arduino UNO给ATmega168P烧录Bootloader(附USBasp备用方案)

📅 2026/8/3 22:57:27 👁️ 阅读次数 📝 编程学习
手把手教你用Arduino UNO给ATmega168P烧录Bootloader(附USBasp备用方案)

手把手教你用Arduino UNO给ATmega168P烧录Bootloader(附USBasp备用方案)

当你想用一块廉价的Arduino UNO开发板为ATmega168P单片机烧录Bootloader时,可能会遇到一个典型问题:Arduino IDE的编程器列表中根本找不到"ATmega168P"这个选项。这种情况让许多初学者束手无策,但其实只需要理解几个关键点就能轻松解决。

1. 准备工作与环境搭建

在开始之前,你需要准备以下硬件:

  • Arduino UNO开发板(作为ISP编程器使用)
  • 目标芯片ATmega168P
  • 面包板及杜邦线若干
  • 10μF电容(用于自动复位电路)

软件准备清单

  • 最新版Arduino IDE(建议1.8.x以上版本)
  • USBasp驱动(备用方案需要)
  • progisp软件(备用方案需要)

注意:ATmega168P与常见的ATmega328P引脚完全兼容,但芯片ID不同,这是导致IDE无法直接识别的主要原因。

2. Arduino UNO作为ISP编程器的完整配置

2.1 硬件连接详解

正确的接线方式是成功的关键。按照以下对应关系连接两块芯片:

Arduino UNO引脚ATmega168P引脚功能说明
D10RESET复位控制
D11MOSI (PB3)主出从入
D12MISO (PB4)主入从出
D13SCK (PB5)时钟信号
5VVCC电源正极
GNDGND电源地线

建议:在RESET引脚与GND之间接入10μF电容,可避免自动复位问题。

2.2 软件配置步骤

  1. 上传ArduinoISP示例程序:

    • 打开Arduino IDE
    • 选择"文件"→"示例"→"11.ArduinoISP"→"ArduinoISP"
    • 选择正确的开发板和端口
    • 点击上传按钮
  2. 关键配置修改:

    // 在ArduinoISP示例代码中找到以下行并取消注释 #define USE_OLD_STYLE_WIRING

    这个修改确保了与老款芯片的兼容性。

  3. 选择编程器:

    • 在IDE菜单中选择"工具"→"编程器"→"Arduino as ISP"

3. 解决ATmega168P识别问题

3.1 修改板定义文件

由于ATmega168P的芯片签名(1E9406)与IDE默认的ATmega168(1E940B)不同,需要手动修改配置文件:

  1. 定位文件:

    • 在Arduino安装目录下找到:
      hardware\arduino\avr\boards.txt
  2. 添加芯片定义:

    ############################################################## atmega168p.name=ATmega168P (Arduino Pro or Pro Mini, 16MHz) atmega168p.upload.protocol=arduino atmega168p.upload.maximum_size=14336 atmega168p.upload.speed=57600 atmega168p.bootloader.low_fuses=0xFF atmega168p.bootloader.high_fuses=0xDD atmega168p.bootloader.extended_fuses=0x00 atmega168p.bootloader.path=atmega atmega168p.bootloader.file=ATmegaBOOT_168_ng.hex atmega168p.bootloader.unlock_bits=0x3F atmega168p.bootloader.lock_bits=0x0F atmega168p.build.mcu=atmega168p atmega168p.build.f_cpu=16000000L atmega168p.build.core=arduino atmega168p.build.variant=standard
  3. 修改签名检测:

    • 找到并编辑:
      hardware\arduino\avr\bootloaders\atmega\ATmegaBOOT_168_ng.hex
    • 将所有的1E940B替换为1E9406

3.2 实际烧录操作

完成上述修改后,按照标准流程烧录:

  1. 在IDE中选择新添加的"ATmega168P"开发板
  2. 选择正确的端口
  3. 点击"工具"→"烧录引导程序"
  4. 等待进度条完成(约30-60秒)

提示:烧录过程中,Arduino UNO上的LED会快速闪烁,这是正常现象。如果长时间卡住,建议检查接线并重试。

4. USBasp备用方案全流程

当软件方案遇到硬件兼容性问题时,USBasp编程器是最可靠的备用方案。

4.1 硬件准备与连接

USBasp与ATmega168P的连接方式:

USBasp引脚ATmega168P引脚
MOSIPB3 (MOSI)
MISOPB4 (MISO)
SCKPB5 (SCK)
RESETRESET
VCCVCC
GNDGND

4.2 使用progisp烧录步骤

  1. 安装USBasp驱动
  2. 打开progisp软件
  3. 选择芯片型号为"ATmega168"
  4. 调入Bootloader文件:
    • 路径通常为:
      Arduino\hardware\arduino\avr\bootloaders\atmega\ATmegaBOOT_168_ng.hex
  5. 设置熔丝位:
    • 低熔丝:0xFF
    • 高熔丝:0xDD
    • 扩展熔丝:0x00
  6. 点击"自动"按钮完成烧录

4.3 生成HEX文件的方法

为了后续使用USBasp上传程序,需要从Arduino IDE生成HEX文件:

  1. 修改preferences.txt:
    • 添加行:
      build.path=D:\arduino_build
  2. 编译后可在指定目录找到:
    D:\arduino_build\sketch_name.ino.hex
  3. 通过progisp的"调入Flash"功能上传该文件

5. 常见问题排查与解决

在实际操作中可能会遇到以下典型问题:

问题1:烧录失败,提示"进入编程模式错误"

  • 检查所有接线是否牢固
  • 确认RESET引脚连接正确
  • 尝试降低SCK时钟频率(在progisp中设置)

问题2:程序上传后无法运行

  • 确认熔丝位设置正确
  • 检查晶体振荡器是否正常工作
  • 验证电源电压是否稳定(4.5-5.5V)

问题3:IDE无法识别USBasp

  • 安装正确的驱动程序
  • 尝试更换USB接口
  • 检查USBasp上的跳线设置

对于ATmega168P这类相对少见的芯片,最稳妥的方法是先用USBasp烧录Bootloader,之后就可以像普通Arduino一样通过串口上传程序了。我在多个项目中采用这种组合方案,成功率接近100%。