【SimpleFOC】AVRDudess 烧录 Arduino Bootloader(以nano为例)
前提
硬件:USB-ASP下载器

链接:https://item.taobao.com/item.htm?id=584918042898
软件:
1、USBASP驱动安装软件:https://zadig.akeo.ie/#google_vignette

2. AVRDudess:https://blog.zakkemble.net/avrdudess-a-gui-for-avrdude/

3. Ardunio编译软件:Arduino IDE:https://www.arduino.cc/

正文
打开Arduino IDE,
Atmega328P 可选:Uno/Nano/Pro or Pro mini,本文以nano Bootloader为例进行讲解

对于 Pro mini,处理器选择 5V 16MHz
对于 nano,处理器选择new Bootloader 即可

新建一个空项目,另存为到合适的地址
然后,在项目》导出已编译的二进制文件

在项目文件夹中,选择带 with_bootloader 字样的 hex 文件

打开 AVRDudess,设置好相关的参数,进行编程


之后,再设置熔丝位:
根据 Arduino 中的相关内部配置文件(以下是nano),设置好

填进去,然后点击Write,即可设置熔丝位。

扩展:ATmega328P 常用熔丝位配置
熔丝位分为三或四个字节:低字节 (LOW)、高字节 (HIGH) 和扩展字节 (EXTENDED)。我们通常用十六进制值来表示它们的设置。
1. Arduino Uno / Nano (5V, 16MHz) 的标准配置
这是最常见的配置,使用外部晶振,频率为 16 MHz。
-
熔丝低位字节 (LOW):
0xFF-
CKSEL[3:0]=1111:选择外部全摆幅晶体振荡器 -
SUT[1:0]=10:启动时间,为晶振选择较长的启动时间(14CK + 65ms) -
CKOUT=1:禁用时钟输出 -
CKDIV8=1:禁用时钟8分频(芯片运行在 16MHz)
-
-
熔丝高位字节 (HIGH):
0xDE-
BOOTRST=0:复位后从引导程序区开始执行(这是 Arduino 能通过串口下载程序的关键) -
BOOTSZ[1:0]=10:引导程序大小设置为 2048 words(即 2KB) -
EESAVE=1:芯片擦除时不保留 EEPROM 内容 -
WDTON=1:看门狗由软件控制 -
SPIEN=0:使能串行编程(ISP)(这个必须为0,否则无法用ISP下载) -
DWEN=1:禁用 DebugWire -
RSTDISBL=1:禁用复位功能(即 PC6 作为复位引脚,而不是通用 IO)
-
-
熔丝扩展字节 (EXTENDED):
0x05-
BODLEVEL[2:0]=101:Brown-out Detection(掉电检测)电平设置为 2.7V -
(其他位保留,通常设置为1)
-
总结值(常用格式):
-
lfuse = 0xFF -
hfuse = 0xDA -
efuse = 0x05(有时也记作efuse = 0xFD,具体取决于工具如何解释字节顺序,但0x05是标准值)
2. Arduino Pro Mini (3.3V, 8MHz) 的标准配置
主要区别在于使用了内部 RC 振荡器,并且为了在 3.3V 下稳定运行,开启了 8 分频。
-
熔丝低位字节 (LOW):
0xE2-
CKSEL[3:0]=0010:选择内部 8MHz RC 振荡器 -
SUT[1:0]=10:启动时间 -
CKOUT=1:禁用时钟输出 -
CKDIV8=0:使能时钟8分频(8MHz / 8 = 1MHz)。注意: 早期的 Pro Mini 引导程序可能设置CKDIV8=1(不分频),然后通过软件设置时钟分频寄存器来降频到 8MHz。但LOW=0xE2(8分频到1MHz) 是更常见的配置。
-
-
熔丝高位字节 (HIGH):
0xDA或0xD6-
与上述类似,但
BODLEVEL可能不同(例如设置为 1.8V 以适应 3.3V 电压)。HIGH字节通常仍然是0xDE或类似值。
-
-
熔丝扩展字节 (EXTENDED):
0xFD或0x05-
BODLEVEL[2:0]可能设置为110(BOD 电平 1.8V)。
-
重要提示: 8MHz Pro Mini 的配置可能有多种变体。最可靠的方法是直接从一块正常工作且从未修改过熔丝的 Pro Mini 上读取其熔丝位。
如何读取和设置熔丝位
如果你确实需要操作(例如恢复一个被锁死的芯片),你需要一个 ISP 编程器(如 USBasp,Arduino ISP 等)和相应的软件。
-
硬件连接:将 ISP 编程器的 MOSI, MISO, SCK, RESET, VCC, GND 分别连接到 Arduino 上 ICSP 接口的对应引脚。
-
软件:
-
AVRDUDESS (Windows GUI 前端,推荐)
-
XLoader
-
命令行
avrdude
-
-
在 AVRDUDESS 中操作:
-
选择正确的 Programmer (e.g., USBasp)。
-
选择正确的 Chip (e.g., ATmega328P)。
-
点击 “Read All” 按钮来读取当前芯片的熔丝位配置。
-
在相应的输入框中输入新的十六进制值(例如
lfuse,hfuse,efuse)。 -
点击 “Write All” 按钮来写入新的配置。
-
警告与风险
-
RSTDISBL(Reset Disable):如果将此位编程为0,则 PC6 将变成一个普通 IO 引脚,而不是复位引脚。你将无法再通过串口或 ISP 给芯片编程,芯片会永久锁死,除非使用高压并行编程器恢复。 -
SPIEN(SPI Enable):如果将此位编程为1,将禁用 ISP 编程功能,同样会导致芯片锁死。 -
时钟源设置错误:如果设置了芯片不支持的时钟源(如选择了外部晶振但板上没有),芯片将无法工作。
最佳实践:在写入之前,永远先读取一次当前配置并做好记录。只修改你完全理解其含义的位。
希望这份详细的解释对你有帮助!再次强调,除非你非常清楚自己在做什么,否则不要改动熔丝位。
X. 参考资料:
B站UP主:光树秫秫
《Arduino Bootloader烧录过程指引》https://www.bilibili.com/video/BV1Sf4y167eS/?

浙公网安备 33010602011771号