摘要

通过将一块Arduino Uno设置成ISP模式作为烧录器,从而实现为Arduino Pro Mini空白的ATMega328PB芯片直接烧录程序。

烧录方式

查阅相关资料,常见的烧写方式有4种:

  1. 使用USBtinyISP编程器烧录
  2. AVR USB编程器烧录
  3. AVRASP编程器烧录
  4. 使用Arduino作为ISP烧录

我对第4种烧录方式进行了实验,使用了Arduino IDE和Ardudess这2种软件,均可实现程序正常运行。

操作过程

准备工作

需要用到的东西包括一块Arduino uno开发板、一根USB数据线、目标开发板、杜邦线若干,你的电脑要提前安装好Arduino IDE和Ardudess这2款软件。

将Arduino uno设置为烧录器

我使用的是第4种烧录方式,即将Arduino uno作为烧录器。首先设置好开发板参数,当然每台电脑端口都不一样,具体看你连接后电脑提示的是哪了个端口,我的电脑如图:

打开官方示例程序Arduino ISP,将程序上传至开发板,如图:

烧录器和目标板电路连接

主要采用SPI连接方式,接线原理如下:

Uno 数字接口序号 目标板
VCC VCC
GND GND
SS 10 RESET
MOSI 11 MOSI
MISO 12 MISO
SCK 13 SCK

因为烧录器是Arduino uno开发板,所以大家知道引脚序号,目标板型号太多,需要具体型号具体确定引脚序号,我使用的是Arduino Pro Mini开发板,其使用的MCU是Atmega328PB,与Arduino uno使用的Atmega328P没有太大的区别,引脚序号可以延用。
网上别人的连接图[1]是这样的:

我的连接图是这样的:

^_^
开玩笑,实际上是这样的[2]

添加第三方库

请参阅博主唐唐爸爸为ATMega328pb芯片烧录Arduino bootloader

设置参数

我买的Arduino Pro Mini板是3.3V8MHz的版本,采用Atmega328PB芯片,实物如图:

相应的设置参数如图:

解释一下,COM3端口是刚才Arduino Uno的端口,因为目标板是通过SPI方式与Arduino Uno板连接的,实际上与电脑连接的就只有Arduino Uno板。波特率随便选。BOD(Brown out detection)因为使用的是3.3V工作电压,所以设置成2.7V低电压保护。Bootloader可以选择不使用,这样每次都需要烧写板进行程序烧写,但我选的是使用UART0口,主要还是考虑后续可以直接用Arduino Pro Mini板连接电脑下载程序。晶振使用的是3.3V外源8MHz。Variant应设置成328PB,这很重要,必须要根板子上的芯片型号一致,否则后续可能程序烧写成功,但就是会出现各种各样意外的错误。

程序烧写

关于这一部分,我使用了2种方法。

使用Arduino IDE进行烧写

使用Ardudess进行烧写

首先导出程序的Hex文件:

而后使用Ardudess加载并点击Go按钮写入:

以上部分,虽然看似2种方法,归根结底还属于1种,无论是Arduino IDE,还是Ardudess,它们的底层都是调用的Avrdude程序。

但是还是建议使用Arduino IDE进行烧写,因为空白的芯片在正式烧程序前要先烧录熔丝位和加密位。

成果展示


  1. 为ATMega328pb芯片烧录Arduino bootloader ↩︎

  2. Fritzing连接图 ↩︎