本文主要是介绍ATMega328PB-AU烧录bootloader探索研究,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
ATMega328PB-AU烧录bootloader探索研究
- 📍本论坛的相关烧录教程(通过一块Arduino UNO板作为ISP来烧录的)《为ATMega328pb芯片烧录Arduino bootloader》
- 📌USBasp个人相关内容《2018版USBASP烧录器改通用版教》
- 📘ATMega328PB和ATMega328P差异中文说明文档资料:
链接:https://pan.baidu.com/s/1aPofMTCNnOTwvggppaNHlQ?pwd=xtax
提取码:xtax
- 📍原文文档:https://ww1.microchip.com/downloads/en/AppNotes/Atmel-42559-Differences-between-ATmega328P-and-ATmega328PB_ApplicationNote_AT15007.pdf
- ✨本文是通过USBasp工具进行Bootloader烧录的。
- ✨本文使用ATMega328PB-AU烧录bootloader作为研究测试对象。
- 👉烧录bootloader前提,必须要有一个AVR烧录器或者Arduino UNO/nano开发板。
- 🌿当前Arduino IDE环境下,支持
ATMega328PB
芯片型号的支持包固件:ATMega328PB
支持包网址:
https://files.pololu.com/arduino/package_pololu_index.json
https://mcudude.github.io/MiniCore/package_MCUdude_MiniCore_index.json
-
📌熔丝位在线计算网站,适用于AVR系列单片机:
https://www.engbedded.com/fusecalc/
-
📌熔丝位在线配置网站,适用于AVR系列单片机:
https://www.engbedded.com/conffuse/
-
🈯烧录bootloader的目的:为了方便在Arduino IDE开发环境下,使用串口烧录程序。需要依赖
bootloader
固件+串口,才能完成代码上传的工作。如果手上有AVR烧录器,那么可以通过AVR烧录器+烧录软件,完成程序烧录即可。 -
如果使用USBasp 直接上传代码,在Arduino IDE直接选择
USBasp
进行代码上传。
📑前言
趁目前
ATMega328PB-AU
主控芯片的价格比较便宜,购买了一片此型号芯片,刚刚完成ATMega328PB-AU
主控的开发板的设计,准备打板,先测试下一是否兼容Arduino nano开发板,于是将手上现有的Arduino nano板子上的32引脚TQFP封装的ATMega328P
更换了下来,换上ATMega328PB-AU
进行bootloader
烧录。
- 📌PCB开源链接:
https://oshwhub.com/perseverance51/atmega328pb-au-nano
📘bootloader和串口外围参考电路
- 🔰芯片的 RST复位引脚需要接入到USB转串口芯片的Mode联络信号引脚上,这里以CH340N为例,芯片的复位引脚通过一个耦合电容接到CH340N的RST引脚上。
🌟bootloader固件选择
- 🔰
ATMega328PB
如果选择使用MiniCore
固件所提供的Bootloader
烧录文件,之后使用Arduino IDE程序上传都需要选择此类型的开发板的对应型号,并不能选择其他支持包下面的同型号芯片进行上传。采用不同支持包下的bootloader固件,下载算法有些差异。。(MiniCore
支持包,在烧录时,调用的是自带支持包下面的对应的avrdude
,而pololu
调用的是Arduino IDE本地的avrdude
)。 -
- 👉如果选择使用编程器上传程序,就不存在上面的情况。只需要型号正确,就可以上传代码。需要注意一点的是,一旦选择了编程器上传代码,会导致原来下载过的bootloader程序失效,下次下载程序将不能再次使用串口直接上传程序。
-
- 📄MiniCore:
"C:\Users\Administrator\AppData\Local\Arduino15\packages\MiniCore\tools\avrdude\7.2-arduino.1/bin/avrdude" "-CC:\Users\Administrator\AppData\Local\Arduino15\packages\MiniCore\hardware\avr\3.0.1/avrdude.conf" -v -patmega328pb -curclock -PCOM9 -b9600 -D -xnometadata "-Ueeprom:w:C:\Users\Administrator\AppData\Local\Temp\arduino\sketches\D21CF4E415C37110D46815DADA9CBA76/Blink.ino.eep:i" "-Uflash:w:C:\Users\Administrator\AppData\Local\Temp\arduino\sketches\\D21CF4E415C37110D46815DADA9CBA76/Blink.ino.hex:i""
-
- 📄Polulo:
"C:\Users\Administrator\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17/bin/avrdude" "-CC:\Users\Administrator\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17/etc/avrdude.conf" -v -patmega328pb -carduino "-PCOM9" -b115200 -D "-Uflash:w:C:\Users\Administrator\AppData\Local\Temp\arduino\sketches\D21CF4E415C37110D46815DADA9CBA76/Blink.ino.hex:i"
-👉 如果使用独立的烧录软件,通过加载编译好的Hex文件进行烧录不存在此问题。
⚡注意事项
- 🌿新的未使用过的ATMega328PB-AU的芯片,在使用USBasp工具进行Arduino IDE在线 Bootloader烧录时,需要选择
USBasp slow
才行,这一点很关键!!!个人在选择USBasp
模式下,对从未使用过的新芯片,烧录了N多遍的失败经历,曾一度怀疑是不是芯片没有焊接好。
- 🔖在第一次选择
USBasp slow
模式下,烧录成功后,后面如果有需要再次烧录bootloader程序,可以直接选择USBasp
模式进行烧录。
- ⚡
USBasp slow
模式只有选择安装了MiniCore
固件下才有,pololu
固件不带,这一点需要注意!
- 🌿另外需要注意一点的是,刷的是哪个固件支持包的bootloader程序,在Arduino IDE 上传代码时,就只能选择对应系列的单片机型号,进行上传代码。(例如刷的是
MiniCore
固件支持包所提供的bootloader程序,那么在使用Arduino IDE 开发时,烧录目标只能选择MiniCore
下的对于型号才行,而不能选择pololu
固件支持下的同芯片型号,不能通用)。如果使用独立的AVR第三方烧录工具,可以直接加载编译好的Hex文件除外。
🔱在没有bootloader程序的情况下程序烧录补充说明
- 🌿使用其他AVR烧录软件:AVR_fighter、progisp、AVRDUDESS。(前提是手上需要有一个USBASP或者USBISP)。
- 🔖经测试AVR_fighter连不上,progisp需要使用HID 免驱版本的USBasp烧录器使用,
不支持
Arduino IDE在线烧录bootloader方式。USBASP带驱动版本的使用AVRDUDESS或者Arduino IDE在线烧录bootloader方式。
-
- 🔖带驱动版本的:
资料下载地址:http://pan.baidu.com/s/1i49UCOP
https://pan.baidu.com/s/1eTYTxp4AVRDUDESS:下载地址:https://github.com/ZakKemble/AVRDUDESS/releases
Khazama AVR Programmer For USBasp and avrdude:http://khazama.com/project/programmer/
- avrdude:https://download.savannah.gnu.org/releases/avrdude/
- 🌿
AVRDUDESS
:下载地址:https://github.com/ZakKemble/AVRDUDESS/releases
🌿Khazama AVR Programmer软件:经测试,该软件不支持ATMega328PB
型号的程序烧录。
- 🌿使用progisp软件,烧录Arduino IDE编译好的Hex文件。(只能使用,市面上售卖的免驱版的USBasp使用,只能选择
ATMega328P
来替代ATMega328PB
)
- 🔖上面.eep为EEPROM文件,.hex为程序文件。分别通过
调入Flash
和调入Eeprom
加载进来。
- 🌿如果想通过上面的软件顺便将带bootloader的文件烧录进去,可以选择类似
Blink.ino.with_bootloader.hex
名称的合并文件。(bootloader和程序合并文件)
- 📌AVR单片机熔丝位设置详细知识文档介绍可以参考:https://www.cnblogs.com/Arrow-Lu/articles/2584823.html
- 👉如果烧录了带
bootloader
程序文件后,配置好对于的串口端口号后,可以直接通过Arduino IDE面板上的上传按钮进行上传,即可,无需关注编程器选项。- 🔖如果目标板不带Bootloader程序的,那么只能选择对于的编程器,然后进行上传。
- 🌿如果直接加载文件烧录,可以从Arduino IDE 在已安装的支持包路径下找到
bootloader
文件 -
- 🔖🏷 pololu-a-star支持包下的
bootloader
文件位置:
- 🔖🏷 pololu-a-star支持包下的
C:\Users\Administrator\AppData\Local\Arduino15\packages\pololu-a-star\hardware\avr\5.1.0\bootloaders\optiboot
-
- 🔖🏷 MiniCore支持包下的
bootloader
文件位置:
- 🔖🏷 MiniCore支持包下的
C:\Users\Administrator\AppData\Local\Arduino15\packages\MiniCore\hardware\avr\3.0.1\bootloaders\urboot
🛠烧录前准备
- 🌿给Arduino IDE安装支持芯片型
ATMega328PB
开发板。 - 🌿添加网址:
https://mcudude.github.io/MiniCore/package_MCUdude_MiniCore_index.json
- 🔖或者添加:
https://files.pololu.com/arduino/package_pololu_index.json
👉如果对新的芯片首次进行烧录,那么推荐先选择用
MiniCore
固件,选择对应的单片机型号,进行烧录,因为可以选择USBasp slow
慢速模式。
- 🌿搜索关键字
328
,找到MiniCore
固件进行安装。
- 🌿通过USBasp工具烧录配置信息如下:
🈯USBasp工具烧录过程
- 📄经测试,通过Arduino IDE
1.8.1.x
版本或者使用2.2.x
版本,都是可以的。 - 📑通过USBasp工具进行烧录时的信息:
C:\Users\Administrator\AppData\Local\Arduino15\packages\MiniCore\tools\avrdude\7.2-arduino.1/bin/avrdude -CC:\Users\Administrator\AppData\Local\Arduino15\packages\MiniCore\hardware\avr\3.0.1/avrdude.conf -v -patmega328pb -cusbasp -B32 -e -Ulock:w:0xff:m -Uefuse:w:0b11110101:m -Uhfuse:w:0xd7:m -Ulfuse:w:0b11111111:m avrdude: Version 7.2-arduino.1Copyright the AVRDUDE authors;see https://github.com/avrdudes/avrdude/blob/main/AUTHORSSystem wide configuration file is C:\Users\Administrator\AppData\Local\Arduino15\packages\MiniCore\hardware\avr\3.0.1\avrdude.confUsing Port : usbUsing Programmer : usbaspSetting bit clk period : 32.0AVR Part : ATmega328PBChip Erase delay : 10500 usPAGEL : PD7BS2 : PC2RESET disposition : possible i/oRETRY pulse : SCKSerial program mode : yesParallel program mode : yesTimeout : 200StabDelay : 100CmdexeDelay : 25SyncLoops : 32PollIndex : 3PollValue : 0x53Memory Detail :Block Poll Page PolledMemory Type Alias Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack----------- -------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------eeprom 65 20 4 0 no 1024 4 0 3600 3600 0x00 0x00flash 65 10 128 0 yes 32768 128 256 4500 4500 0x00 0x00lfuse 0 0 0 0 no 1 1 0 4500 4500 0x00 0x00hfuse 0 0 0 0 no 1 1 0 4500 4500 0x00 0x00efuse 0 0 0 0 no 1 1 0 4500 4500 0x00 0x00lock 0 0 0 0 no 1 1 0 4500 4500 0x00 0x00signature 0 0 0 0 no 3 1 0 0 0 0x00 0x00calibration 0 0 0 0 no 1 1 0 0 0 0x00 0x00Programmer Type : usbaspDescription : USBasp ISP and TPI programmer
avrdude: set SCK frequency to 16000 Hz
avrdude: AVR device initialized and ready to accept instructions
avrdude: device signature = 0x1e9516 (probably m328pb)
avrdude: erasing chip
avrdude: set SCK frequency to 16000 Hzavrdude: processing -U lock:w:0xff:m
avrdude: reading input file 0xff for lockwith 1 byte in 1 section within [0, 0]
avrdude: writing 1 byte lock ...
avrdude: 1 byte of lock written
avrdude: verifying lock memory against 0xff
avrdude: 1 byte of lock verifiedavrdude: processing -U efuse:w:0b11110101:m
avrdude: reading input file 0b11110101 for efusewith 1 byte in 1 section within [0, 0]
avrdude: writing 1 byte efuse ...
avrdude: 1 byte of efuse written
avrdude: verifying efuse memory against 0b11110101
avrdude: 1 byte of efuse verifiedavrdude: processing -U hfuse:w:0xd7:m
avrdude: reading input file 0xd7 for hfusewith 1 byte in 1 section within [0, 0]
avrdude: writing 1 byte hfuse ...
avrdude: 1 byte of hfuse written
avrdude: verifying hfuse memory against 0xd7
avrdude: 1 byte of hfuse verifiedavrdude: processing -U lfuse:w:0b11111111:m
avrdude: reading input file 0b11111111 for lfusewith 1 byte in 1 section within [0, 0]
avrdude: writing 1 byte lfuse ...
avrdude: 1 byte of lfuse written
avrdude: verifying lfuse memory against 0b11111111
avrdude: 1 byte of lfuse verifiedavrdude done. Thank you.C:\Users\Administrator\AppData\Local\Arduino15\packages\MiniCore\tools\avrdude\7.2-arduino.1/bin/avrdude -CC:\Users\Administrator\AppData\Local\Arduino15\packages\MiniCore\hardware\avr\3.0.1/avrdude.conf -v -patmega328pb -cusbasp -B32 -Uflash:w:C:\Users\Administrator\AppData\Local\Arduino15\packages\MiniCore\hardware\avr\3.0.1/bootloaders/urboot/atmega328pb/watchdog_1_s/autobaud/uart0_rxd0_txd1/led+b5/urboot_atmega328pb_pr_ee_ce.hex:i -Ulock:w:0xff:m avrdude: Version 7.2-arduino.1Copyright the AVRDUDE authors;see https://github.com/avrdudes/avrdude/blob/main/AUTHORSSystem wide configuration file is C:\Users\Administrator\AppData\Local\Arduino15\packages\MiniCore\hardware\avr\3.0.1\avrdude.confUsing Port : usbUsing Programmer : usbaspSetting bit clk period : 32.0AVR Part : ATmega328PBChip Erase delay : 10500 usPAGEL : PD7BS2 : PC2RESET disposition : possible i/oRETRY pulse : SCKSerial program mode : yesParallel program mode : yesTimeout : 200StabDelay : 100CmdexeDelay : 25SyncLoops : 32PollIndex : 3PollValue : 0x53Memory Detail :Block Poll Page PolledMemory Type Alias Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack----------- -------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------eeprom 65 20 4 0 no 1024 4 0 3600 3600 0x00 0x00flash 65 10 128 0 yes 32768 128 256 4500 4500 0x00 0x00lfuse 0 0 0 0 no 1 1 0 4500 4500 0x00 0x00hfuse 0 0 0 0 no 1 1 0 4500 4500 0x00 0x00efuse 0 0 0 0 no 1 1 0 4500 4500 0x00 0x00lock 0 0 0 0 no 1 1 0 4500 4500 0x00 0x00signature 0 0 0 0 no 3 1 0 0 0 0x00 0x00calibration 0 0 0 0 no 1 1 0 0 0 0x00 0x00Programmer Type : usbaspDescription : USBasp ISP and TPI programmer
avrdude: set SCK frequency to 16000 Hz
avrdude: AVR device initialized and ready to accept instructions
avrdude: device signature = 0x1e9516 (probably m328pb)
avrdude: Note: flash memory has been specified, an erase cycle will be performed.To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: set SCK frequency to 16000 Hzavrdude: processing -U flash:w:C:\Users\Administrator\AppData\Local\Arduino15\packages\MiniCore\hardware\avr\3.0.1/bootloaders/urboot/atmega328pb/watchdog_1_s/autobaud/uart0_rxd0_txd1/led+b5/urboot_atmega328pb_pr_ee_ce.hex:i
avrdude: reading input file C:\Users\Administrator\AppData\Local\Arduino15\packages\MiniCore\hardware\avr\3.0.1/bootloaders/urboot/atmega328pb/watchdog_1_s/autobaud/uart0_rxd0_txd1/led+b5/urboot_atmega328pb_pr_ee_ce.hex for flashwith 368 bytes in 2 sections within [0x7e80, 0x7fff]using 3 pages and 16 pad bytes
avrdude: writing 368 bytes flash ...
Writing | ################################################## | 100% 0.30s
avrdude: 368 bytes of flash written
avrdude: verifying flash memory against C:\Users\Administrator\AppData\Local\Arduino15\packages\MiniCore\hardware\avr\3.0.1/bootloaders/urboot/atmega328pb/watchdog_1_s/autobaud/uart0_rxd0_txd1/led+b5/urboot_atmega328pb_pr_ee_ce.hex
Reading | ################################################## | 100% 0.00s
avrdude: 368 bytes of flash verifiedavrdude: processing -U lock:w:0xff:m
avrdude: reading input file 0xff for lockwith 1 byte in 1 section within [0, 0]
avrdude: writing 1 byte lock ...
avrdude: 1 byte of lock written
avrdude: verifying lock memory against 0xff
avrdude: 1 byte of lock verifiedavrdude done. Thank you.
"C:\Users\Administrator\AppData\Local\Arduino15\packages\MiniCore\tools\avrdude\7.2-arduino.1/bin/avrdude" "-CC:\Users\Administrator\AppData\Local\Arduino15\packages\MiniCore\hardware\avr\3.0.1/avrdude.conf" -v -patmega328pb -cusbasp -e -Ulock:w:0xff:m -Uefuse:w:0b11110101:m -Uhfuse:w:0xd7:m -Ulfuse:w:0b11111111:m
- 🌿第二阶段是,对目标型号芯片进行bootloader下载。
"C:\Users\Administrator\AppData\Local\Arduino15\packages\MiniCore\tools\avrdude\7.2-arduino.1/bin/avrdude" "-CC:\Users\Administrator\AppData\Local\Arduino15\packages\MiniCore\hardware\avr\3.0.1/avrdude.conf" -v -patmega328pb -cusbasp "-Uflash:w:C:\Users\Administrator\AppData\Local\Arduino15\packages\MiniCore\hardware\avr\3.0.1/bootloaders/urboot/atmega328pb/watchdog_1_s/autobaud/uart0_rxd0_txd1/led+b5/urboot_atmega328pb_pr_ee_ce.hex:i" -Ulock:w:0xff:m
📝通过命令行指令烧录
- 🌿通过 命令行进行熔丝位配置,使用的是usbasp烧录器,前提是安装了Arduino IDE,其他型号也可以通过此命令实现对目标型号芯片进行熔丝位配置:(直接在cmd命令提示符窗口内使用)
C:\Users\Administrator\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17/bin/avrdude -CC:\Users\Administrator\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17/etc/avrdude.conf -v -patmega328pb -cusbasp -Pusb -e -Ulock:w:0xFF:m -Uefuse:w:0xFF:m -Uhfuse:w:0xDE:m -Ulfuse:w:0xFF:m
- 🌿使用Polulo支持包固件下的bootloader.hex固件,使用命令行烧录bootloader命令:(直接在cmd命令提示符窗口内使用)
C:\Users\Administrator\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17/bin/avrdude -CC:\Users\Administrator\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17/etc/avrdude.conf -v -patmega328pb -cusbasp -Pusb -Uflash:w:C:\Users\Administrator\AppData\Local\Arduino15\packages\pololu-a-star\hardware\avr\5.1.0/bootloaders/optiboot/optiboot_atmega328pb_16mhz.hex:i -Ulock:w:0xCF:m
- 🌿使用MiniCore支持包固件下的bootloader.hex固件,使用命令行烧录bootloader命令:
C:\Users\Administrator\AppData\Local\Arduino15\packages\MiniCore\tools\avrdude\7.2-arduino.1/bin/avrdude -CC:\Users\Administrator\AppData\Local\Arduino15\packages\MiniCore\hardware\avr\3.0.1/avrdude.conf -v -patmega328pb -cusbasp -e -Ulock:w:0xff:m -Uefuse:w:0b11110101:m -Uhfuse:w:0xd7:m -Ulfuse:w:0b11111111:m
-
- 🔖带eep烧录程序命令演示:(需要定位到avrdude路径下)
avrdude -C"C:\Users\Administrator\AppData\Local\Arduino15\packages\MiniCore\hardware\avr\3.0.1/avrdude.conf" -v -patmega328pb -curclock -PCOM6 -b9600 -D -xnometadata "-Ueeprom:w:C:\Users\Administrator\AppData\Local\Temp\arduino\sketches\D21CF4E415C37110D46815DADA9CBA76/Blink.ino.eep:i" -Uflash:w:"C:\Users\Administrator\AppData\Local\Temp\arduino\sketches\D21CF4E415C37110D46815DADA9CBA76/Blink.ino.hex:i"
烧录过程和结果:
-
- 🔖不带eep烧录命令:(需要定位到avrdude路径下)
avrdude -C"C:\Users\Administrator\AppData\Local\Arduino15\packages\MiniCore\hardware\avr\3.0.1/avrdude.conf" -v -patmega328pb -curclock -PCOM6 -b9600 -D -xnometadata -Uflash:w:"C:\Users\Administrator\AppData\Local\Temp\arduino\sketches\D21CF4E415C37110D46815DADA9CBA76/Blink.ino.hex:i"
烧录结果:
- 🔖此文章仅作为个人学习探索知识的总结,不作为他人或引用者的理论依据,由于学识所限,难免会出现错误或纰漏,欢迎大家指正。
这篇关于ATMega328PB-AU烧录bootloader探索研究的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!