0. 前言
因某种原因需要更新我的Arduino DUE上面的USB转串口的芯片ATMEGA16U2里的固件,
找了很多资料,下面是操作步骤,记录一下,方便后续查找:
1. 用Arduino UNO制作一个烧录器
准备一块Arduino UNO的正常主板,用ArduinoIDE烧录一个示例程序:ArduinoISP
这块Arduino UNO主板就变成了一个AVR烧录器(ArduinoISP)了。
2. 准备命令行烧录工具
在ArduinoIDE的安装目录下找到avrdude程序,如:
C:\Program Files (x86)\Arduino\hardware\tools\avr\bin\avrdude.exe
命令行使用这个程序就能用(第1步制作好的)ArduinoISP烧录器来烧录avr芯片了。
3. 将烧录器和目标CPU的ISP线连好
ArduinoISP(UNO主板) | 目标板(ATMEGA16U2) |
10 | RESET |
11 | MOSI |
12 | MISO |
13 | SCK |
5V | 5V |
GND | GND |
4. 执行命令行烧录
avrdude.exe -C ..\etc\avrdude.conf -v -patmega16u2 -cstk500v1 -PCOM15 -b19200 -e -Ulock:w:0x3F:m -Uefuse:w:0xF4:m -Uhfuse:w:0xD9:m -Ulfuse:w:0xFF:m
avrdude.exe -C ..\etc\avrdude.conf -v -patmega16u2 -cstk500v1 -PCOM15 -b19200 -Uflash:w:C:\Users\xxx\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.12\firmwares\atmega16u2\Arduino-DUE-usbserial-prod-firmware-2013-02-05.hex:i -Ulock:w:0x3F:m
稍微解释一下命令行参数:
-C后面是配置文件,arduino环境安装后自带一个,直接用就行。
-v 打开详细日志显示
-p 目标芯片型号
-c 烧录器型号,使用ArduinoUNO制作的ArduinoISP的型号就是stk500v1
-P 烧录器的串口号
-b 烧录器串口波特率
-e 整片全部擦除
-U 存储器操作指令
efuse:Extended Fuse Byte
hfuse:Fuse High Byte
lfuse:Fuse Low Byte
lock:Lock Bit Byte
flash:内部flash
5. 参考
https://blog.youkuaiyun.com/menglongfc/article/details/78853961
https://blog.youkuaiyun.com/weixin_36815313/article/details/90686150