用Arduino板为另一块Arduino烧写(更新)BootLoader_两个arduino 一个程序烧入可以到达另一个arduino_小平友littlePING的博客-程序员秘密

技术标签: arduino  # Arduino  单片机  

手上有两块几年前买的arduino nano板子,这两天要用的时候发现用arduino IDE 1.8.11烧写的时候始终报错“上传失败”。查阅相关资料发现应该在 IDE–工具–处理器 中选择ATmega238P(Old Bootloader)即可上传成功。
这也侧面说明了我的板子的BootLoader已经旧了,不如顺便更新一下。
在这里插入图片描述

  • 烧写BootLoader至少需要两块arduino板,其中一个作为ISP下载器,另一个则是需要被烧写的板子(它们的型号可以不一样)
  • 本例将用两块arduino nano ATmega238P(Old Bootloader) 互相依次更新为最新的BootLoader

过程

1. 将ISP下载器的程序烧录进第一块arduino板(下文将其称为 ISP板):

打开 arduino IDE – 示例 – 11.ArduinoISP 示例文件,并上传(烧录)进arduino板中,因为两块板子都是old BootLoader,所以应注意此时选择的处理器应为“ATmega238P(Old Bootloader)”才能成功上传。
在这里插入图片描述


2. 将第二块arduino板(被烧录板)与ISP板相连:

本例中使用的arduino nano 的ISP接口是D10~D13口,分别是SS, MOSI, MISO, SCK
在这里插入图片描述
将ISP板与被烧录板的MOSI(D11), MISO(D12), SCK(D13), GND, 5V 引脚相接,将ISP板的SS(D10)引脚与被烧录板的RST引脚相接

ISP板 被烧录板
MOSI(D11) MOSI(D11)
MISO(D12) MISO(D12)
SCK(D13) SCK(D13)
GND GND
5V 5V
SS(D10) RST

注:由于不同型号的arduino板在引脚复用时对应的引脚不一样,所以括号内的引脚名称仅适用于arduino nano 和arduino UNO。若要使用arduino mega2560 等其他型号的板子时,注意对应的ISP接口与引脚号的对应与此表括号内的引脚号是不同的。


3. 进行BootLoader烧写
在 IDE–工具–处理器 中选择ATmega238P,选择没有括号的那个,作为要烧写进去的版本
在这里插入图片描述
IDE–工具–编程器 中选择Arduino as ISP
在这里插入图片描述
点击“烧录引导程序”即可完成烧写。
在这里插入图片描述


至此第二块Arduino nano 板的BootLoader已经烧写(更新)为最新的了。而第一块nano板作为ISP下载器,其中的BootLoader并未更新。接下来对调两者的角色,再如法炮制即可。

需要注意的是,此时给第二块(已更新)的nano板烧录ISP程序时,在IDE–工具–处理器 中就应该选择 ATmega238P了,烧录好ISP程序后,然后再给第一块板烧录BootLoader。


常见报错

在烧录引导程序的时候有过这样的报错:
avrdude: ser_open(): can't open device "\\.\COM10": ϵͳ�Ҳ���ָ�����ļ���
错误原因是串口端口被占用,尝试关闭IDE或其他软件的串口监视器后重试。

还有报错:
avrdude: Expected signature for ATmega328P is 1E 95 0F. Double check chip, or use -F
或:
Yikes! Invalid device signature. Double check connections and try again, or use -F to override this check.
在这里插入图片描述
解决方案:
在 IDE–文件–首选项 中把所有的调试信息(显示详细输出)打开,若显示Device signature = 0x000000Device signature = 0xffffff等情况,其实不是真的芯片签名有误,而是电路连接有问题,再次检查接线是否接对。


总结

总体思路是:

  1. 上传例程“11.ArduinoISP”,将其中一块Arduino作为ISP烧写器。
  2. 通过ISP引脚将两块板子相连。
  3. 选择BootLoader版本并上传。

值得注意的有两点:

  1. 我们会在步骤1和步骤3,两次涉及到在 IDE–工具–处理器 中选择处理器型号。其中步骤1中选择的是上传程序的那块板子(跟电脑用USB连接的那块)的处理器(BootLoader)型号。步骤3中选择的是要被烧写BootLoader的那块板子(用引线连接的那块)的处理器(BootLoader)型号。
  2. 这两块Arduino板的型号可以不一样,但要注意它们对应的ISP的引脚号也会不一样。不能单纯按照板子上印刷的引脚号相应连接,而应该找各个板子的PinMapping,找到对应的ISP的引脚。
ISP引脚 nano和UNO mega2560
SS D10 D53
MOSI D11 D51
MISO D12 D50
SCK D13 D52

觉得有用的话,不要吝惜评论点赞分享哦,希望大家多多包涵,有任何问题欢迎指正、讨论。
本文基于CC-BY-SA 4.0协议,欢迎转载
(博客看累了?去我的B站瞧一瞧?)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_27133869/article/details/104228553

智能推荐

JDK11无法使用@Resource注解[email protected] jdk11_绅士jiejie的博客-程序员秘密

原因在JDK11版本以后,javax.annotation这个包被移除了,所以无法使用@resource注解。解决方法在pom文件中引入以下依赖即可: <dependency> <groupId>javax.annotation</groupId> <artifactId>javax.annotation-api</artifactId> <version>1.3.2.

animation动画的使用_animation动画使用_阳阳C的博客-程序员秘密

animation动画的使用animation:mymove 5s infinite-webkit-animation:mymove 5s infinite; /Safari and Chrome/@keyframes mymove{from {left:0px;}to {left:200px;}}总结:动画&:hover {transform: scale(0.5); // 这个是缩放opacity: 0.2; // 这个是透明度animation: mymove 1s; /

慧荣SM3271AD芯片U盘量产_ives的博客-程序员秘密

设置2个盘,一个可以引导的光驱,一个存储用的磁盘开始刷机看看系统 上认到的磁盘状态

servlet中传值,然后在jsp页面中显示_jsp显示servlet放置的值_RainYeZ的博客-程序员秘密

该功能在账号框里面输入用户名,然后把查询结果在jsp页面中显示出来,账号存储在数据库中,在servlet中查询,返回结果,这其实就是参数的传递的过程方法一:requestrequest.setAttribute(“mess”, “该用户未注册”); 前面参数是key 后面是valuerequest.getRequestDispatcher(“findpassword.jsp”).f...

matlab对比度拉伸,[转载][数字图像处理学习]分段线性变换函数——对比度拉伸..._麦安安的博客-程序员秘密

1、导致低对比度图像的原因:照明不足、成像传感器动态范围太小、镜头光圈设置错误。2、分段线性变换函数:增强原图各部分的反差,即增强输入图像中感兴趣的灰度区域,相对抑制那些不感兴趣的灰度区域。优势在于形式可以任意合成,缺点是是需要更多的用户输入。3、分段线性变换的函数形式:给出需要转换的灰度范围,决定线性变换的斜率。4、分段的灰度拉伸可以更加灵活地控制输出灰度直方图的分布,可以有选择地拉伸某段灰度区...

项目实战-外卖自提柜 3. FreeRTOS主要API的应用_ba_wang_mao的博客-程序员秘密

项目实战-外卖自提柜 1.项目介绍、协议制定项目实战-外卖自提柜 2. CubeMX + FreeRTOS入门项目实战-外卖自提柜 3. FreeRTOS主要API的应用项目实战-外卖自提柜 4. FreeRTOS 堆栈分配、调试技巧项目实战-外卖自提柜 5. ESP8266 01S配置与掉线处理项目实战-外卖自提柜 6. 硬件工作与测试(原理图、PCB绘制、测试视频)一、第一个任务 初步入门FreeRTOS以后,着重解决通信部分,重新梳理一下与服务器通信部分的需求:1、设备端和服...

随便推点

php堆栈的开发,PHP debug_backtrace() 堆栈调试_weixin_39633774的博客-程序员秘密

例子function one($str1, $str2){two("Glenn", "Quagmire");}functiontwo($str1, $str2){three("Cleveland", "Brown");}function three($str1,$str2){print_r(debug_backtrace());}one("Peter", "Griffin");?>输出:Ar...

leftaxis 安卓,MPAndroid图表未显示xAxis的任何标签,缺少什么?_纯文本文档的博客-程序员秘密

I'm implementing a feature for displaying Incomes/Expenses for properties & also provided Filter for 1 Month , 3 Months , 6 Months & 12 Months .So, I have to display Months labels according to...

Shell脚本之免交互操作_小小考拉123的博客-程序员秘密

目录一、Here Document免交互1.1免交互定义1.2语法格式1.3实例示例1:使用 wc -l 命令后面直接跟文件名就可以统计文件内有多少行内容,将要统计的内容置于标记“EOF” 之间,直接将内容传给 wc -l 来统计。示例2:通常使用 read 命令接收用户的输入值时会有交互过程,在EOF两个标记间可以输入变量值示例3:使用 passwd命令设置密码1.4Here Document 变量设定示例1:在写入文件时会先将变量替换成实际值,再结合cat 命令完成写

(二)SPI通信的初始化设置verilog实现_打气瓶的博客-程序员秘密

emmmmm,一下子跳到了SPI通信,跨度有点大,刚好学到这里,OK少废话。相信学过ARM的同学对SPI通信也有一定的认识,很多模块都需要用到SPI通信。我就直接用黑金开发板AX301的SPI_Flash例程里面的SPI_master给大家讲解一下。够良心的啦,黑金开发板的资料都没有给出相应的SPI知识,这让学过ARM但基础知识不扎实的同学怎么办(说的好像就是我。。。。。。。)来吧来吧,哥给你...

推荐文章

热门文章

相关标签