怎么使用Arduino给AVR(ATmege328p)单片机烧写bootloader

还是来说ATmege328p芯片相关的,都是arduino把它带火的。先看一个例子,在硬件上,假如想自己做一块arduino板或者想将ATmege328p嵌入到其它PCB项目里,在软件上,直接使用arduino ide 肯定是做好的选择了,开源的库很多嘛。那么问题来了,才买回来的ATmege328p最小系统,你是不能直接使用arduino ide 来烧写arduino程序的,那怎么才能烧写进去呢?这就是这个教程要解决的问题了。

Arduino Bootloader的作用

bootloader一般情况下微处理器写入程序时都通过专门的编程器进行烧写,但是也可以通过在MCU中预先写入一些程序来实现某些基本功能,这些预先写入的程序代码就是bootloader。这样每次复位时MCU就不是从程序存储器起始位置开始读取命令,而是先加载bootloader,实现一些设置和功能,再开始执行代码。 arduino通过预先写入的bootloader,每次通过串口给arduino板下载程序时,首先会令arduino板复位一次,这样就先进入了bootloader,接着向arduino板发送特定的下载指令,bootloader识别到这些指令后就会紧接着开始接收剩下的新的程序代码写入到内部flash中,如果没有进行下载,bootloader没有识别到下载指令,那么它就会跳转到程序区正常工作。简而言之,Arduino上的bootloader就是能让你用一根usb线就可以愉快下载程序的原因所在。

准备工作

  • arduino uno 板子一个
  • ATmege328p 最小系统一个
  • arduino usb 下载线一根
  • 杜邦线6根
  • arduino ide

Arduino 的ICSP

烧写bootloader本质上只是使用编程器烧写一段特殊的程序到单片机中,因此其方法与使用编程器烧写程序是一样的,avr芯片来说,烧写程序是通过ICSP(in-circuit serial programmming)硬件接口来实现的 。

ICSP接口有6个引脚,分别是:

  • SPI接口 MISO、 MOSI、 SCK
  • 电源 VCC、 GND
  • 复位 Reset

对于arduino来说,管脚的对应关系是这样的:

  • MISO<------->12
  • MOSI<------->11
  • SCK <------->13

硬件连线

为了叙述的方便,我们把arduino板子称为ISP板,把ATmege328p最小系统板为目标板。

软件烧写步骤

在这里,我们直接使用arduino ide 来烧写。

按照前面的方式连接好ISP板和目标板后,将ISP板连接到电脑上。

1.打开arduino IDE的Tools -> Programmer下显示了所有支持的编程器列表,这里使用Arduino as ISP方式。

Arduino as ISP简单来说就是用另一块arduino板,给它用普通方式下载一段 专门的程序,将其变为一个ISP下载器,再将其相应引脚与待烧写bootloader的板子相连,再通过arduino IDE来控制进行bootloader烧写。

2.打开IDE,Files -> Examples -> ArduinoISP -> ArduinoISP,使用这个程序下载到ISP板子中。

3.打开IDE,然后点击Tools -> Boards选择目标板的类型。然后在Tools -> Programmer中选择Arduino as ISP,最后点击Tools -> 烧录引导程序,此时会开始进行烧写,需要耐心等待一会就成功了。

测试是否对目标板烧写成功bootloader

使用arduino ide 直接对目标板烧写随便一个arduino程序,成功烧写,对目标板烧写bootloader成功。


这种方式应该是最简单的了,不过对于AVR单片机还有很多的方法,后续我会陆续的介绍怎么使用USPASP或者USBISP来直接配置熔丝位,来自己烧写一个特定的bootloader,这个就更通用了。


喜欢我文章的朋友,欢迎关注、点赞、评论、交流。版权个人所有,转载请注明出处。

举报
评论 0