给Arduino开发板刷写bootloader

交互设计

  在给Arduino开发板下载程序时,有时会遇到程序无法写入的问题,在确定芯片未损坏的情况下,引起这个问题的原因很有可能就是由于bootloader损坏了,那么我们可以通过重新给主控芯片刷写bootloader来修复这个问题。本期就介绍一下bootloader的刷写过程。 首先,我们必须准备一个AVR单片机刷写程序专用的USBasp(USBISP)下载器,下面是淘宝上的搜索结果: 这个下载器需要安装相应的驱动程序后才能使用,WIN7及xp系统的驱动很容易找到,但对于win10的驱动则安装较为复杂。另外还需要准备一个转接头,即将10pin的ISP接口转为6pin的ISP接口。这个转接头可以直接购买,也可以自己制作。 自己制作时参考下图,注意10pin的接口上有一个"缺口",必须参考这个缺口确定正确的线序: 不同的开发板,可以用万用表测量导通的方法确定"GND"与"VCC"的准确位置,其中VCC与板上的"5V"应该是导通的。 所需硬件准备好之后,下载一个AVR芯片的专用烧写软件,本文中使用了"PROGISP",软件图标为: 接下来将ISP下载器的ISP接口按照正确的位置连接到开发板,然后USB接口端连接至电脑。运行"PROGISP.EXE",可以看到如下界面: 在图中"1"号框的上面点击下拉菜单选择正确的芯片型号,UNO板和NANO板选择ATmega328p,MEGA2560板选择ATmega2560。接着点击 "1"号框位置的"RD"按钮,如果连线正确且芯片未损坏,可以看到"2"号框位置的提示:"读出ID成功……"。然后按照"4"号框勾选配置,接着点击"3"号框位置的"…."按钮,此时会弹出一个对话框: 这个对话框就是AVR芯片特有的"熔丝"位配置,Arduino开发板在出厂时已经配置好了熔丝位,我们无需更改,在此我们只点击对话框中的"读出"选项,所有选项读完之后我们可以将对话框的配置截图保存,这个就是标准的熔丝位配置,同时可以在左侧框的位置看到"熔丝位读出成功"、"加密位读出成功"的提示。注意:在"读出"之前不要点击"写入",如果熔丝位配置错误芯片会被锁死或不能正常使用,在此我们只做读出操作,目的是查看熔丝位的标准配置。关闭该对话框,接下来我们要去Arduino IDE的根目录里寻找对应的"bootloader"文件。 打开Arduino IDE的文件夹,按照下图的文件路径逐级打开文件夹: 在文件"boards.txt"文件中,包括了所有开发板芯片的熔丝位配置信息、开发板对应的"bootloader"文件所在的位置及文件名。 从文件中,我们找到"UNO"板相关的说明(图中蓝色选中部分),从说明中我们可以看到"uno.bootloader.file=optiboot/optiboot_atmega328.hex",所以UNO板的bootloader文件在文件夹"bootloaders"的目录里一个叫做"optiboot"的文件夹里,文件名为:"optiboot_atmega328.hex"。接着往下面看,我们可以看到NANO板的bootloader文件在 "atmega"文件夹中,文件名为"ATmegaBOOT_168_atmega328.hex";2560板的bootloader文件则在"stk500v2"文件夹中,文件名为"stk500boot_v2_mega2560.hex"。这里注意我们板上的单片机(mcu)型号,不同的单片机对应不同的bootloader文件,在txt文档有详细说明。下面是"bootloaders"文件夹里的文件目录: 接下来,我们按照上面的文件路径和文件名将几个常用的bootloader文件复制出来,存放在自己容易找到的位置,并且按照板型建立文件夹,分别存放。接下来回到"PROGISP"的界面,点击"调入Flash"选项,此时会弹出一个对话框,按照上一步保存的文件路径或直接到ArduinoIDE的根目录里找到对应版型的bootloader文件,选中并点击"打开"(文中从ArduinoIDE的根目录里直接打开文件,以UNO板为例),最后点击"自动"按钮,此时就开始了bootloader的刷写。刷写过程中在界面的最下方会有进度条提示,刷写过程要经历"Flash编程"和"Flash校验"两个过程,在此期间不要断开开发板-下载器-电脑的连接。 经过以上过程,Arduino开发板即恢复了串口下载。另外,我也可以通过bootloader的刷写,将UNO板刷成NANO板来用,我测试过将一块板载mega328p的改进型Lilypad板刷成NANO板来使用。 本期分享到此,希望能够对各位Arduino玩家有所帮助,欢迎在评论区留言交流,期待您的点赞与。

标签: 交互设计