手把手教你用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引脚 | 功能说明 |
|---|---|---|
| D10 | RESET | 复位控制 |
| D11 | MOSI (PB3) | 主出从入 |
| D12 | MISO (PB4) | 主入从出 |
| D13 | SCK (PB5) | 时钟信号 |
| 5V | VCC | 电源正极 |
| GND | GND | 电源地线 |
建议:在RESET引脚与GND之间接入10μF电容,可避免自动复位问题。
2.2 软件配置步骤
上传ArduinoISP示例程序:
- 打开Arduino IDE
- 选择"文件"→"示例"→"11.ArduinoISP"→"ArduinoISP"
- 选择正确的开发板和端口
- 点击上传按钮
关键配置修改:
// 在ArduinoISP示例代码中找到以下行并取消注释 #define USE_OLD_STYLE_WIRING这个修改确保了与老款芯片的兼容性。
选择编程器:
- 在IDE菜单中选择"工具"→"编程器"→"Arduino as ISP"
3. 解决ATmega168P识别问题
3.1 修改板定义文件
由于ATmega168P的芯片签名(1E9406)与IDE默认的ATmega168(1E940B)不同,需要手动修改配置文件:
定位文件:
- 在Arduino安装目录下找到:
hardware\arduino\avr\boards.txt
- 在Arduino安装目录下找到:
添加芯片定义:
############################################################## 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修改签名检测:
- 找到并编辑:
hardware\arduino\avr\bootloaders\atmega\ATmegaBOOT_168_ng.hex - 将所有的1E940B替换为1E9406
- 找到并编辑:
3.2 实际烧录操作
完成上述修改后,按照标准流程烧录:
- 在IDE中选择新添加的"ATmega168P"开发板
- 选择正确的端口
- 点击"工具"→"烧录引导程序"
- 等待进度条完成(约30-60秒)
提示:烧录过程中,Arduino UNO上的LED会快速闪烁,这是正常现象。如果长时间卡住,建议检查接线并重试。
4. USBasp备用方案全流程
当软件方案遇到硬件兼容性问题时,USBasp编程器是最可靠的备用方案。
4.1 硬件准备与连接
USBasp与ATmega168P的连接方式:
| USBasp引脚 | ATmega168P引脚 |
|---|---|
| MOSI | PB3 (MOSI) |
| MISO | PB4 (MISO) |
| SCK | PB5 (SCK) |
| RESET | RESET |
| VCC | VCC |
| GND | GND |
4.2 使用progisp烧录步骤
- 安装USBasp驱动
- 打开progisp软件
- 选择芯片型号为"ATmega168"
- 调入Bootloader文件:
- 路径通常为:
Arduino\hardware\arduino\avr\bootloaders\atmega\ATmegaBOOT_168_ng.hex
- 路径通常为:
- 设置熔丝位:
- 低熔丝:0xFF
- 高熔丝:0xDD
- 扩展熔丝:0x00
- 点击"自动"按钮完成烧录
4.3 生成HEX文件的方法
为了后续使用USBasp上传程序,需要从Arduino IDE生成HEX文件:
- 修改preferences.txt:
- 添加行:
build.path=D:\arduino_build
- 添加行:
- 编译后可在指定目录找到:
D:\arduino_build\sketch_name.ino.hex - 通过progisp的"调入Flash"功能上传该文件
5. 常见问题排查与解决
在实际操作中可能会遇到以下典型问题:
问题1:烧录失败,提示"进入编程模式错误"
- 检查所有接线是否牢固
- 确认RESET引脚连接正确
- 尝试降低SCK时钟频率(在progisp中设置)
问题2:程序上传后无法运行
- 确认熔丝位设置正确
- 检查晶体振荡器是否正常工作
- 验证电源电压是否稳定(4.5-5.5V)
问题3:IDE无法识别USBasp
- 安装正确的驱动程序
- 尝试更换USB接口
- 检查USBasp上的跳线设置
对于ATmega168P这类相对少见的芯片,最稳妥的方法是先用USBasp烧录Bootloader,之后就可以像普通Arduino一样通过串口上传程序了。我在多个项目中采用这种组合方案,成功率接近100%。
