基于USBASP给AVR单片机烧写Arduino bootloader和application固件

Arduino 微控制器的数字端口和模拟端口与 ATMEGA 328 芯片引脚的对应关系图如下。其中,标有 0~13 标号的引脚对应的是数字端口;在 0~13 前面有符号“~”的引脚对应的端口具有 PWM 输出功能;标有 A0~A5 标号的是模拟端口。

Arduino板由于操作不当导致固件损坏,或者想把自己开发的板子用到Arduino生态中去,这里介绍一下基于外购的USBASP烧录器通过USB转SPI接口将Arduino的bootloader烧写进目标MCU的FLASH,就之后就可以用Arduino IDE通过UART下载APP到目标MCU了。首先确保手上有一个USBASP下载器,淘宝上一搜一大堆。

一、准备工作:

1)给USBASP板子装驱动程序

注意选择好驱动程序所在目录之后,win10可能会弹窗报错,说INF不包含数字签名所以拒绝安装驱动程序,此刻请参考《解决Win10安装驱动时,INF不包含数字签名信息》一文,设置windows系统有条件重启,需选择“禁用驱动程序强制签名”,然后再尝试安装驱动程序。注意USBasp的驱动程序也讲究版本,我图便宜是在“优信电子”淘宝店买的下载板,但店家提供的驱动程序libusb0.dll的版本是V0.1.10.1,着实太老了,结果智峰固件下载软件PROGISP V1.72运行时会报错说没有找到下载板或下载板到目标板连线错误,我只得将驱动程序换成其他店家提供的V1.2.4.0的版本:USBasp-win-driver-x86-x64-ia64-v1.2.4,这之后才能成功下载bootloader的hex文件到目标MCU。下图是安装好驱动程序之后的“设备管理器”截屏:

2)连接USBASP到Arduino UNO

注意USBASP下载接口是10PIN插针,而Arduino UNO板载的下载接口是6PIN插针,需要按下图的管脚定义用杜邦线飞线连接。下图是连接好杜邦线之后的照片:

其中: MOSI连MOSI,SCK连SCK,MISO连MISO,RESET连RSET,最后把VCC和GND连好,USBASP能对arduino提供5V供电,因此无需再给Arduino UNO供电。

二、下载bootloader

线连好之后就可以下载bootloader了,需运行淘宝店提供的配套软件PROGISP V1.72,操作步骤如下:

以Arduino UNO为例,它板载了一颗ATmega328P芯片,因此在第一步栏选择ATmega328P,然后第二步点击按钮。如果下面的文本框提示"读出ID成功",说明你的目标MCU已经被下载器识别到了。

第三步熔丝位配置部分如下,★★注意熔丝位配置好后一定要点写入,检验熔丝位有没有正确写入,可以在点写入之后再点读出,看是否与写入相同!

第四步选择一个bootloader的hex文件,点击<调入FLASH>,我电脑的hex文件所在的目录是C:\Program Files (x86)\Arduino\hardware\arduino\avr\bootloaders\optiboot

这之后还有关键一步,即设置编程参数!千万不能省,严禁勾选“加密芯片”选项!否则你的芯片可能跪了。这里只勾选三个选项:<校验falsh>,<芯片擦除>,<编程FLASH>,如下图所示。

第五步点击自动,等待程序下载完成,这样我们就完成了bootloader的烧写。此后,拔掉UNO板和下载器相连的6-PIN连接线(不拔线也行),然后用arduino IDE上传BLINK程序看看,应该完全OK。如果arduino IDE报错“avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x10”,我尝试在上一步多勾选一项“编程熔丝”,再在点击“自动”,这之后就arduino IDE再上传BLINK就不报错了。

鸣谢:

1,《使用USBASP给Arduino烧写bootloader教程》,

https://blog.csdn.net/armcsdn/article/details/103682010

2,《解决Win10安装驱动时,INF不包含数字签名信息》,

https://jingyan.baidu.com/article/375c8e19c2b25b25f2a229a3.html

当然,我们也可以只把arduino IDE只当编译器用,固件下载和串口通信都不依靠arduino IDE,就像开发传统mcu那样。欲在Arduino IDE中编译源码得到可烧录hex文件,需要执行如下的步骤:

点击Arduino IDE的菜单<文件>–<首选项>,弹出<首选项>页面:

首先勾选上图画圈位置的默认未勾选项即<显示详细输出:>的<编译>和<上传>,然后点击上图方框的xxx\preference.txt链接,会弹出该preference.txt所在的目录。注意Arduino IDE已经明确告知用户“(只能在 Arduino未运行时进行编辑)”,所以在编辑该preference.txt文件之前请先关闭Arduino IDE,再编辑preference.tx在第一行插入一段文字“build.path=d:\arduino_hex”

上图新增的红框文字“build.path=d:\arduino_hex”,就是这之后每次在Arduino IDE点击编译之后hex文件的输出文件夹,所以用户需要如文字所述新建一个名为“d:\arduino_hex”的文件夹。下图展示了PHY.ino源码经过编译之后,在d:\arduino_hex文件夹中生成的系列可烧录文件,注意除了《PHY.ino.hex》,还有《PHY.ino.with_bootloader.hex》。注意Arduino IDE每次编译,都会先清空d:\arduino_hex文件夹,再创建编译输出文件。

下面用Beyond Compare来对比下两个hex文件,开端处《PHY.ino.hex》比《PHY.ino.with_bootloader.hex》少了一段话“:020000040000FA”,主要区别在后端,疑似《PHY.ino.with_bootloader.hex》多了一截bootloader代码,而且为了配合bootloader的跳转其APP固件数据的结尾7段内容也略有不同。

下面用Beyond Compare来对比下另两个hex文件,《optiboot_atmega328.hex》明显就是《PHY.ino.with_bootloader.hex》中比《PHY.ino.hex》多出来的那截bootloader代码。

所以,用下载bootloader代码的智峰固件下载软件PROGISP,打开我们编译出来的hex文件,再基于USBASP板子,就可以把hex文件的固件数据通过USBASP板子的USB转SPI接口,烧录到ATMega328的FLASH。实践证明,无论是烧录不带bootloader的《PHY.ino.hex》,还是烧录带bootloader的《PHY.ino.with_bootloader.hex》,MCU都能实现源码既定的目标。当然如果烧录的固件是不带bootloader的《PHY.ino.hex》,那么在Arduino IDE里面就无法再上传(通过UART下载)代码到MCU了。

十多年前我曾经编程过Mega88用做ONU光模块的MCU,固件下载是基于CH341A的USB转SPI总线发命令来实现的。PC上位机界面如下红框所示,好久有时间了可以试试自己开发一个USB转SPI主机程序,来替代智峰固件下载软件PROGISP,实现对ATMega328的固件下载。遗憾的是,据ATMEGA328的原厂Microchip公司的本地FAE说,Microchip已经和Arduino解约,不再提供技术支持。所以我获取不到ATMega328的固件下载协议,只有试试原先ATMega88的固件下载源码看得行不了。

另外,Microchip公司的本地FAE还说,只有在+5V供电情况下,给ATMEGA328外置了最高16MHz的晶体,ATMEGA328才能在Arduino IDE中通过UART口下载application固件。如果改用+3.3V供电,主频将降至8MHz(ATMEGA328的时钟源可以是0~20MHz的外置晶体External Crystal Oscillator,熔丝位CKSEL[3…0]=0000b;可以是8MHz的内置的已校准振荡器Internal Calibrated RC Oscillator,熔丝位CKSEL[3…0]=0010b;可以是128KHz的内置的已校准振荡器Internal Calibrated RC Oscillator熔丝位CKSEL[3…0]=0011b)。我还看到有帖子说,如果硬件更改了主频,还需要找到makefile一并更改clock的编译条件,不简单不简单,固件开发是一门永无止境的学问,只求乐在其中,优哉游哉。

基于USBASP给AVR单片机烧写Arduino bootloader和application固件相关推荐

  1. [Arduino]烧写Arduino BootLoader的几种方法

    [Arduino]烧写Arduino BootLoader的几种方法 身为Arduino 电子工程师,很多时候都会涉及到自制各种功能的Arduino 电路板(亦或者说是功能扩展板),但是从网上或者其他 ...

  2. AVR单片机烧写Arduino-bootloader

    关于bootloader * 通常情况下MCU烧写程序都需要通过专门的编程器进行. * 假使每次复位时MCU不是从程序存储器起始位置开始读取命令,而是预先加载一段指令,实现一些设置和功能,再开始执行代 ...

  3. 使用Arduino烧写 Arduino BootLoader

    文章目录 1.连接方式 2.烧写ArduinoISP固件 3.BootLoader烧写 1.连接方式 作为烧写器的Arduino UNO 板 待烧写单片机芯片/电路板 D10 RESET D11 D1 ...

  4. 13.1-自己开发一个“单片机烧写工具”!不是开玩笑吧?原来如此^~^(OTA升级)

    听到这个"需求"的第一反应"这是开玩笑吧".我是是一个普通的码农,怎么可能开发出了那么复杂的东西. 带着一头冷汗,开始查资料中- 原来如此,有一种下载程序的方式 ...

  5. USBISP/USBasp编程器给Atmega32U4下载Arduino bootloader引导程序

    用USBISP/USBasp编程器给ATmega32U4下载Arduino bootloader引导程序 ATmega32U4 bootloader引导程序是什么 引导程序下载接口与连接 配置熔丝位与 ...

  6. 嵌入式系统烧写uboot/bootloader/kernel的一般方法

    嵌入式系统烧写uboot/bootloader/kernel的一般方法 本文介绍了在嵌入式系统中烧写uboot/bootloader/kernel 的一般方法,以及如果uboot或者内核出现错误,   ...

  7. C语言烧写C51单片机的线,51单片机烧写程序过程以及详细说明【图文】

    Step 1:Keil软件的安装 1.选中文件夹中的C51V900安装程序并打开,如图: 2.在安装对话框里一直选择Next,直到Finish完成Keil的安装. Step 2: 安装USB转串口线的 ...

  8. 普中科技stc89c52rc单片机烧写失败

    我在使用普中的stc89c52rc单片机时候遇到了烧写失败的情况,如图所示 尝试使用stc-isp 进行烧写时候一直显示正在检测目标单片机 我的解决办法: STC-ISP勾选使能6T(双倍速)模式 , ...

  9. 【嵌入式Linux开发学习】基于TFTP的通用代码烧写方式

    文章目录 概述 实现思路 升级UBOOT 升级KERNEL ROOTFS QEMU 仿真 代码实现 升级效果 概述 对于从事嵌入式行业的人来说,进行代码升级一定不会陌生.相对于单片机相对单一的烧写方式 ...

最新文章

  1. java B2B2C电子商务平台分析之十一------配置中心和消息总线
  2. 地图点击省跳转到市_城市天际线导入真实世界地图教程
  3. ruby gem install rails 错误解决方法
  4. [MVC学习笔记]5.使用Controller来代替Filter完成登录验证(Session校验)
  5. 第七周作业——简单FTP
  6. 《C++ Primer 5th》笔记(1 / 19):C++基础
  7. c语言a 寻路算法,JS/HTML5游戏常用算法之路径搜索算法 A*寻路算法完整实例
  8. BubbleSort 优化后的冒泡排序算法
  9. 有没有一百万的电脑配置?
  10. iPlayer惨遭破解诅咒AKAIO作者扬言要让它支持商业游戏
  11. Sublime Text3 直接运行js调试控制台
  12. 图像处理与机器视觉网络资源收罗——倾心大放送
  13. pdfplumber和pdfminer.six提取PDF中文本行内容及对应坐标
  14. LaTeX插入参考文献手把手教学 | BibTeX教程
  15. RHEL配置网卡vlan tag
  16. Python关键词百度指数采集,抓包Cookie及json数据处理
  17. 鸿蒙系统hdc,HDC2020有看头:要揭开鸿蒙系统和EMUI11神秘面纱?
  18. Windows 7(Win7)下Visual Studio 2012(VS2012)编译jrtplib与MinGW编译jrtplib
  19. 登陆qq出现计算机丢失msvcp140.dll,缺少msvcp140.dll怎么办?msvcp140.dll丢失解决方法...
  20. c语言visit_数据结构(c语言)——入门数据结构的世界:顺序线性表(一)

热门文章

  1. hive整合hbase
  2. 美国高校EECS方向相关情况
  3. 数据库中字段是什么意思?
  4. 欧式距离、标准化欧式距离、马氏距离、余弦距离
  5. 2021-5-5今日目标计划行动理由
  6. rails plural lib
  7. 『强烈推荐』Linux 下的大型/开源/网络游戏.(转)
  8. 巩固知识体系!这么香的技术还不快点学起来,高级面试题+解析
  9. linux mdadm 源码,mdadm详解
  10. C#与.NET 4高级程序设计:第5版