查看: 102|回复: 0

ARDUINO UNO bootloader 烧写

[复制链接]

3

主题

7

帖子

13

积分

新手上路

Rank: 1

积分
13
发表于 2023-5-1 15:38:37 | 显示全部楼层 |阅读模式
新买的ATmega328p芯片可能是没有烧写bootloader的,所以需要对芯片进行bootloader烧写。我这里用Arduino UNO R3为例,演示,如何烧写bootloader。
一、物料准备

购买USB ASP烧写器。淘宝上很多,十几块钱一个。



我购买的一款

准备杜邦线 母对母 6根
Arduino UNO R3 板(下文用UNO板简称)一块。我用的国内的版本,正版接线也一样



以Arduino UNO R3为例

二、接线说明

注意USB ASP下载器的电源跳线跳至5V。



电压选择5V

将USBasp 板 和 UNO板按下图接上。



接线图示

USB ASP下载器UNO板
5V5V
GNDGND
MOSIMOSI
MISOMISO
SCKSCK
RESETRESET
三、USB ASP烧写器驱动下载

将USB ASP烧写器插入电脑,打开设备管理器,我们可以看到一个带感叹号的USB设备,说明USB ASP烧写器的驱动不识别。我们可以下载zadig这个软件来安装驱动。


zadig下载地址:https://zadig.akeo.ie/
下载后,插入USB ASP烧写器,打开zadig.exe,显示界面如下:


按如上图选择: USBasp 和 libUSB-win32。
注:这里的libUSB-win32不要选错,我曾经选错成为WinUSB,也可以安装驱动并识别出USB ASP,但后面的烧写软件无法识别出烧写器。如果你碰到USB ASP烧写器可以在设备管理器中识别出,但无法在烧写软件中识别,请确认下是不是这个问题。
驱动安装成功后,界面如下:



成功安装后,zadig软件中的显示

设备管理器中可以识别出USBasp。(注,USBasp 应该在libusb-win32 devices下)



设备管理器中识别出USBasp

四、熔丝设置(重要!!)

熔丝位的设置极其重要,需要非常小心,否则会锁死芯片,导致芯片变成板砖。
在Arduino\hardware\arduino\avr路径打开文件夹,打开boards.txt文件,此文件中可查看相应板卡芯片的熔丝位:



文件位置

在boards.txt文件中 搜索“Arduino Uno”在下面找到如下图的三行:



文件内容

uno.bootloader.low_fuses=0xFF
uno.bootloader.high_fuses=0xDE
uno.bootloader.extended_fuses=0xFD
记住这几条,后面烧写的时候要用到。
五、烧写

这里有两个烧写程序可以使用。我分别做介绍。
4.1 progisp烧写

下载progisp 1.72版本的,据说其他版本可能会认不出烧写器。
下载地址:https://www.pc6.com/softview/SoftView_118051.html
下载后解压缩可以直接用。双击progisp.exe。


在打开的软件中,首先在左上角Select Chip,点击下拉菜单中选择ATmega328P。然后点击选择USB ASP下载器。


点击软件右下角"..." 弹出窗口“Fuse&Lock”


点击“读出”,如果连接正常,可以正常读取当前的熔丝位。将上文的记下三个熔丝位填入点击“写入”:
地位值:FF
高位值:DE
扩展位值:FD
加密值为FF(暂时不知道这个是啥,但按照FF填入。)再点击“写入”。
写入后,可以再点击“读取”确认下是否写入正确。



重新读出一次,确认写入正确

接下来,开始bootloader烧写。将软件如下图配置打钩。


点击右上角“调入Flash”,在弹出的文件选择框内选择要烧写的HEX文件。烧写文件的地址如下:
\Arduino\hardware\arduino\avr\bootloaders\optiboot
选择optiboot_atmega328.hex



选择optiboot_atmega328.hex

然后调入文件,需要等待一会。调入成功后,点击“自动”按钮,就开始程序烧写,这个过程大约需要几分钟。



程序烧写中

4.2 AVRDUDESS 烧写
AVRDUDESS的下载地址如下(可能需要梯子):
下载后,双击安装。安装成功后,双击avrdudess.exe 打开程序。


在程序界面,选择programmer为USBasp,MCU为ATmega328P。


在Fuses & Lock bits,填入上文提到的熔丝配置。这里的配置如下:
L: 0xFF
H: 0xDE
E: 0xFD
LB:0xFF
填入后,点击Write,并再次点击Read一次以确认写入成功。
接下来,在Flash中选择烧写文件。烧写文件的地址如下:
\Arduino\hardware\arduino\avr\bootloaders\optiboot
选择optiboot_atmega328.hex


最后,点击Program!按钮进行烧写,大概需要几分钟。


四、验证

通过Arduino IDE,烧入例程代码确认烧入的bootloader文件正确。在Arduino IDE中,点击文件->示例->01 Basics->Blink


void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second
}
编译并下载到板上,可以看到LED灯闪烁。
补充:
ATmega32u4很多被用于客制化键盘diy中,所以,补充一下对这颗mcu的烧写方法。基本方法和接线都和上面的ATmega328类似。不同的地方在于熔丝位和烧写固件。
ATmega32u4熔丝位需要改为:
leonardo.bootloader.low_fuses=0xff
leonardo.bootloader.high_fuses=0xd8
leonardo.bootloader.extended_fuses=0xcb
leonardo.bootloader.unlock_bits=0x3F
烧写的hex文件位置在
\Arduino\hardware\arduino\avr\bootloaders\caterina下的Caterina-Leonardo.hex


烧写步骤,参考上面的描述即可。
烧写成功后,插上usb,可以在电脑的设备管理器里找到arduino leonardo设备。该设备被模拟成了一个usb串口。然后就可以通过Arduino IDE进行编程。
也可以通过QMK tools烧写客制化键盘的QMK固件。注意,烧写QMK固件,需要短接reset引脚到地两次,进入dfu模式,才能烧入固件。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表