“第三十四课--Microduino制作烧写器/zh”的版本间的差异

来自Microduino Wikipedia
跳转至: 导航搜索
设备
 
(未显示1个用户的35个中间版本)
第5行: 第5行:
 
本教程讲解了Microduino-Core作为烧写器的软硬件环境,实现了AVR烧写器的功能(烧写app区,烧写bootloader区,烧写熔丝等),同时介绍了AVRDUDE烧写工具、Intel 的.hex文件的组成结构。
 
本教程讲解了Microduino-Core作为烧写器的软硬件环境,实现了AVR烧写器的功能(烧写app区,烧写bootloader区,烧写熔丝等),同时介绍了AVRDUDE烧写工具、Intel 的.hex文件的组成结构。
 
==设备==
 
==设备==
*'''[[Microduino-Core]]'''
+
*'''[[Microduino-Core/zh]]'''
 
Microduino-Core 是以 Atmel ATmega328P为核心的8位单片机开发核心板,是一个开源的、与 Arduino UNO 兼容的控制器模块。
 
Microduino-Core 是以 Atmel ATmega328P为核心的8位单片机开发核心板,是一个开源的、与 Arduino UNO 兼容的控制器模块。
  
*'''[[Microduino-USBTTL]]'''
+
*'''[[Microduino-USBTTL/zh]]'''
 
下载程序模块,可直接与 Microduino-Core 或者Microduino-Core+ 相连,让他们与计算机通讯。它的下载接口用的是MicUSB,这也是Microduino小巧的一部分。Microduino大小与一枚一元硬币差不多大。下载线与绝大多数智能手机usb数据线是一样的,方便实用。
 
下载程序模块,可直接与 Microduino-Core 或者Microduino-Core+ 相连,让他们与计算机通讯。它的下载接口用的是MicUSB,这也是Microduino小巧的一部分。Microduino大小与一枚一元硬币差不多大。下载线与绝大多数智能手机usb数据线是一样的,方便实用。
  
第28行: 第28行:
 
|}
 
|}
  
 +
==实验原理图==
 +
{|class="wikitable"
 +
|-
 +
|Microduino-Core (作为烧写器)||Uno兼容板(被烧写板)
 +
|-
 +
|D13||D13
 +
|-
 +
|D12||D12           
 +
|-               
 +
|D11 ||D11
 +
|-
 +
|D10 ||Reset
 +
|-
 +
|5V ||5V
 +
|-
 +
|GND||GND
 +
|-
 +
|Reset接10uf 电容到GND||
 +
|-
 +
|}
  
==实验原理图==
+
接线就是这样的。这与Arduino官网提到的把Arduino作为avr ISP烧写器是一样的。
Microduino (烧写器) Uno兼容板(被烧写板)
+
链接:http://arduino.cc/en/Tutorial/ArduinoISP
D13 D13
 
D12 D12
 
D11 D11
 
D10 Reset
 
5V 5V
 
GND GND
 
Reset接10uf 电容到GND
 
接线就是这样的。这与Arduino官网提到的把Arduino作为avr ISP烧写器是一样的。链接:http://arduino.cc/en/Tutorial/ArduinoISP
 
  
 
==实验准备==
 
==实验准备==
第48行: 第60行:
  
 
==相关实验==
 
==相关实验==
*'''按照官网的说法来实现。'''
+
===按照官网的说法来实现===
 
选择Tools—Programmer—ArduinoISP,这是在选择编程器。然后再点击Tools—Burn Bootloader。这时可以看到uno兼容板13脚的led闪烁,证明开始烧写了。uno的13脚与Microduino-Core
 
选择Tools—Programmer—ArduinoISP,这是在选择编程器。然后再点击Tools—Burn Bootloader。这时可以看到uno兼容板13脚的led闪烁,证明开始烧写了。uno的13脚与Microduino-Core
的13脚连在一起,所以uno上的小灯会闪烁。为什么arduino’板会选择13脚放led呢,可能是因为它的英文是SCK,也就是说烧写时钟到来时,它可兼作指示。只是我们用bootloader引导串口烧写时,它失去了闪烁的机会。
+
的13脚连在一起,所以uno上的小灯会闪烁。为什么arduino板会选择13脚放led呢,可能是因为它的英文是SCK,也就是说烧写时钟到来时,它可兼作指示。只是我们用bootloader引导串口烧写时,它失去了闪烁的机会。
 
烧写成功图如下:[[File: burnBootloaderNormal.JPG|600px|center|thumb]]
 
烧写成功图如下:[[File: burnBootloaderNormal.JPG|600px|center|thumb]]
 
烧写成功后,被烧写的uno板的bootloader区已经有了opti-boot代码。当我们点击uno的reset按键时,13脚的小灯会闪几下,这时的小灯闪烁是因为uno的bootloader开始工作了。
 
烧写成功后,被烧写的uno板的bootloader区已经有了opti-boot代码。当我们点击uno的reset按键时,13脚的小灯会闪几下,这时的小灯闪烁是因为uno的bootloader开始工作了。
  
*'''瞒天过海,用ArduinoIDE烧写bootloader时顺便把app区的程序也烧写了。'''
+
===瞒天过海,用ArduinoIDE烧写bootloader时顺便把app区的程序也烧写了===
当我们点下Tools—Burn Bootloader时,ArduinoIDE程序其实是把D:\Program Files\Arduino\hardware\arduino\bootloaders\optiboot目录下的optiboot_atmega328.hex作为烧写源文件的(根据安装目录不同,会有不同位置,Arduino官网提供的无需安装版里也可以方便找到hardware文件夹)。我们把optiboot_atmega328.hex稍改下名字再烧录,ArduinoIDE会提示avrdude: read from file 'D:\Program Files\Arduino\hardware\arduino\bootloaders\optiboot\optiboot_atmega328.hex' failed 是说找不到文件了。
+
*当我们点下Tools—Burn Bootloader时,ArduinoIDE程序其实是把D:\Program Files\Arduino\hardware\arduino\bootloaders\optiboot目录下的optiboot_atmega328.hex作为烧写源文件的(根据安装目录不同,会有不同位置,Arduino官网提供的无需安装版里也可以方便找到hardware文件夹)。我们把optiboot_atmega328.hex稍改下名字再烧录,ArduinoIDE会提示avrdude: read from file 'D:\Program Files\Arduino\hardware\arduino\bootloaders\optiboot\optiboot_atmega328.hex' failed 是说找不到文件了。见下图:
见下图:[[File: optibootDirNG.jpg|600px|center|thumb]]
+
[[File: optibootDirNG.jpg|600px|center|thumb]]
 +
 
 
下面我们在这个文件上作些文章。
 
下面我们在这个文件上作些文章。
首先,我们打开ArduinoIDE的Blink程序,然后找到Blink程序生成的hex文件。如何找到该hex文件呢?只需在ArduinoIDE上点击 ,或是快捷键ctrl+R,编译程序,不上载。这时在状态提示栏的倒数第二行便会有它的目录了。如下图。ctrl+C,找到该文件。如果你的ArduinoIDE没有显示这行文字,需要点击File—Preference—compilation复选框。用记事本或是其它文本编辑器打开该hex文件,把它的内容复制到剪贴板。然后再粘贴到D:\Program Files\Arduino\hardware\arduino\bootloaders\optiboot\optiboot_atmega328.hex这个文件的最上边(optiboot_atmega328.hex可以作个备份,为了以后恢复)。如下图,笔者是用notpad打开,记事本也可以的。
+
首先,我们打开ArduinoIDE的Blink程序,然后找到Blink程序生成的hex文件。如何找到该hex文件呢?只需在ArduinoIDE上点击编译按钮,或是快捷键ctrl+R,校验编译程序,不上载。这时在状态提示栏的倒数第二行便会有它的目录了。如下图:
 
[[File: blinkHEX.jpg|600px|center|thumb]]
 
[[File: blinkHEX.jpg|600px|center|thumb]]
 +
ctrl+C,找到该文件。如果你的ArduinoIDE没有显示这行文字,需要点击File—Preference—compilation复选框。用记事本或是其它文本编辑器打开该hex文件,把它的内容复制到剪贴板。然后再粘贴到D:\Program Files\Arduino\hardware\arduino\bootloaders\optiboot\optiboot_atmega328.hex这个文件的最上边(optiboot_atmega328.hex可以作个备份,为了以后恢复)。如下图,笔者是用notepad打开,记事本也可以的。
 +
[[File:hexConn.jpg|600px|center|thumb]]
  
 
删除下图选中的这一行
 
删除下图选中的这一行
第65行: 第80行:
 
OK,保存文件。再回到ArduinoISP的程序界面,点击Tools—Burn Bootloader,烧写完成后看到了什么?是的,13脚的led开始blink了,点击uno的Reset,led先是执行bootloader的闪烁,然后开始无休止的执行blink。这说明了我们的uno中既烧入了opti的bootloader,也烧入了app区的blink程序。一次完成,这样实际量产时,会给生产带来方便。
 
OK,保存文件。再回到ArduinoISP的程序界面,点击Tools—Burn Bootloader,烧写完成后看到了什么?是的,13脚的led开始blink了,点击uno的Reset,led先是执行bootloader的闪烁,然后开始无休止的执行blink。这说明了我们的uno中既烧入了opti的bootloader,也烧入了app区的blink程序。一次完成,这样实际量产时,会给生产带来方便。
  
下面介绍下.hex文件的组成,我们以optibootloader的第一行为例。:107E0000112484B714BE81FFF0D085E080938100F7。“:”的概念我们不去管它,“10”代表了该行的有效字节数为16,16进制嘛,10代表16。然后是“7E00”代表了328芯片Flash的地址位置,为什么是7E00,因为opti的bootloader有512个Byte(256Word),用32768(328的总Flash空间)减去512,得到的16进制数就是7E00,熔丝位烧写合适,复位向量就会直接跳到这里来的啊。后面的“00”,我们不去管它。然后是“112484B714BE81FFF0D085E080938100”共16个字节,对了,就是开头的“10”表征的这16个字节。最后一个字节是“F7”,和校验字节。校验的是“107E0000112484B714BE81FFF0D085E080938100”这一大堆数,什么是和校验?0X01的和校验字节就是FF,0X02的和校验字节就是FE,也就是总数加起来必须是256的整数倍。下面一个小软件可以获取和校验字节。供参考。上文删除的那一行“00000001FF”文字表明.hex文件的结束,如果不删这一行,两个hex文件揉在一起,后面的.hex文件不会被执行到。
+
*下面介绍下.hex文件的组成,我们以optibootloader的第一行为例。:107E0000112484B714BE81FFF0D085E080938100F7。“:”的概念我们不去管它,“10”代表了该行的有效字节数为16,16进制嘛,10代表16。然后是“7E00”代表了328芯片Flash的地址位置,为什么是7E00,因为opti的bootloader有512个Byte(256Word),用32768(328的总Flash空间)减去512,得到的16进制数就是7E00,熔丝位烧写合适,重启后PC指针就会找到该复位向量。后面的“00”,我们不去管它。然后是“112484B714BE81FFF0D085E080938100”共16个字节,对了,就是开头的“10”表征的这16个字节。最后一个字节是“F7”,和校验字节。校验的是“107E0000112484B714BE81FFF0D085E080938100”这一大堆数,什么是和校验?0X01的和校验字节就是FF,0X02的和校验字节就是FE,也就是总数加起来必须是256的整数倍。下面一个小软件可以获取和校验字节。
 +
'''[[File:checkSum.zip]]'''供参考。上文删除的那一行“00000001FF”文字表明.hex文件的结束,如果不删这一行,两个hex文件揉在一起,后面的.hex文件内容不会被执行到。
 
[[File: sumCheck.jpg|600px|center|thumb]]
 
[[File: sumCheck.jpg|600px|center|thumb]]
更多更详细的hex文件描述可参考https://en.wikipedia.org/wiki/Intel_HEX
+
更多更详细的hex文件描述可参考
嗯,.hex文件介绍就写这么多吧。ArduinoIDE中File—Upload Using Programmer。单击它烧写blink程序后,bootloader就丢失了,读者熟悉了.hex文件之后,也就能知道个中缘由了。
+
https://en.wikipedia.org/wiki/Intel_HEX 嗯,.hex文件介绍就写这么多吧。
 +
*如果点击ArduinoIDE中File—Upload Using Programmer烧写blink程序后,bootloader就丢失了,读者熟悉了.hex文件之后,也就能知道个中缘由了。
  
*'''脱离ArduinoIDE环境,直接寻求avrdude烧写。'''
+
===脱离ArduinoIDE环境,直接寻求avrdude烧写===
ArduinoIDE烧写程序从本质上说也是调用的avrdude烧写软件。Avrdude 链接:'''[[File:AVRDUDE.rar]]''',Avrdude GUI 链接: ''' [[File: AVRdude GUI.rar]] '''
+
ArduinoIDE烧写程序从本质上说也是调用的avrdude烧写软件。
Avrdude是直接使用命令行操作的软件,Avrdude GUI化命令行为UI界面。
+
*Avrdude 链接:'''[[File:AVRDUDE.rar]]'''
下面以Avrdude.exe文件在D盘根目录下为例。Windows开始菜单—运行—cmd—回车—d:--回车—dir—回车—avrdude---回车 可见下图。
+
*Avrdude GUI 链接:'''[[File: AVRdude GUI.rar]]'''
 +
Avrdude是直接使用命令行操作的软件,Avrdude GUI化命令行为窗口UI。
 +
下面以Avrdude.exe文件在D盘根目录下为例。Windows开始菜单—运行—cmd—回车—d:--回车—dir—回车—avrdude---回车 可见下图:
 
[[File: avrdudeInit.jpg.jpg|600px|center|thumb]]
 
[[File: avrdudeInit.jpg.jpg|600px|center|thumb]]
输入avrdude -p m328p -c stk500v1 -b 19200 -P com2  -U flash:w:d:\a.hex:i  后回车,接下来就是见证奇迹的时刻。看到一大堆#号(下图),然后再看13脚的led狂闪,事情成了,Flash写入了d:\a.hex文件,该文件读者可从前文提到的揉在一起的(含app,bootloader).hex文件复制更名得到。Com口依据读者电脑更改,如果电脑的com口编号大,要改为小编号。笔者就因为Microduino-USBTTL被识别成com15耗进去几个小时,在设备管理器中更改即可。Avrdude更多命令行的学习请参考http://www.ladyada.net/learn/avr/avrdude.html
+
输入avrdude -p m328p -c stk500v1 -b 19200 -P com2  -U flash:w:d:\a.hex:i  后回车,接下来就是见证奇迹的时刻。看到一大堆#号(下图),然后再看13脚的led狂闪,事情成了,Flash写入了d:\a.hex文件,该文件读者可从前文提到的揉在一起的(含app,bootloader).hex文件复制更名得到。Com口依据读者电脑更改,如果电脑的com口编号大,要改为小编号。笔者就因为Microduino-USBTTL被识别成com15耗进去几个小时,com口编号在设备管理器中更改即可。
[[File: avrdudeSucc.jpg.jpg|600px|center|thumb]]
+
Avrdude更多命令行学习请参考:http://www.ladyada.net/learn/avr/avrdude.html    
 +
 
 +
[[File: avrdudeSucc.jpg.jpg|600px|center|thumb]]
  
 
下面介绍下Avrdude GUI。按下图选择
 
下面介绍下Avrdude GUI。按下图选择
 
[[File: avrdudeUI.jpg.jpg|600px|center|thumb]]
 
[[File: avrdudeUI.jpg.jpg|600px|center|thumb]]
-b 19200是必须要输入的。点击  看看效果吧。由图可以看出,熔丝位、锁定位、eeprom、Flash都由你掌控。自然,用命令行的方式也都可以实现。
+
-b 19200是必须要输入的。点击上图中蓝色圈起的按钮看看效果吧。由图可以看出,熔丝位、锁定位、eeprom、Flash都由你掌控。自然,用命令行的方式也都可以实现。这时,我们实现的功能已不仅仅是ArduinoIDE提供的烧写bootloader功能,我们借助ArduinoISP,avrdude GUI ,可以实现avr编程器能够实现的功能。用Microduino-Core与Microduino-USBTTL实实在在打造出了AVRISP。
这时,我们实现的功能已不仅仅是ArduinoIDE提供的烧写bootloader功能,我们借助ArduinoISP,avrdude GUI ,可以实现avr编程器能够实现的功能。用Microduino-Core
+
 
与Microduino-USBTTL实实在在打造出了AVRISP。
+
===扩展实验:用淘宝上常见的USBasp与USBtinyISP烧写器6Pin或10Pin  ISP接口直接接到uno===
+
烧写器实物见下图:
*'''扩展实验:用淘宝上常见的USBasp与USBtinyISP烧写器6Pin或10Pin  ISP接口直接接到uno。'''
+
[[File: otherProgrammer.jpg.jpg|600px|center|thumb]]
实物见下图:
 
[[File: otherProgrammer.jpg.jpg|600px|center|thumb]]
 
用USBasp+avrdude(或avrdude GUI)可以实现读取烧写等。
 
用USBasp+ArduinoIDE不能实现,ArduinoIDE环境不能识别淘宝20元左右的USBasp。
 
用USBasp+progisp可以实现读取烧写等。
 
  
USBtinyISP极客工坊有售。
+
*用USBasp+avrdude(或avrdude GUI)可以实现读取烧写等
USBtiny+ avrdude(或avrdude GUI)可以实现读取烧写等。
+
*用USBasp+ArduinoIDE不能实现,ArduinoIDE环境不能识别淘宝20元左右的USBasp
USBtiny+ArduinoIDE可以实现在ArduinoIDE环境中使用Burn bootloader或是Upload Using Programmer。
+
*用USBasp+progisp可以实现读取烧写等
  
并且在avrdude命令行模式下,两款avr编程器均不需要输入-b  19200。在avrdude GUI中也无需输入 。
+
*USBtiny+ avrdude(或avrdude GUI)可以实现读取烧写等
 +
*USBtiny+ArduinoIDE可以实现在ArduinoIDE环境中使用Burn bootloader或是Upload Using Programmer
 +
USBtinyISP极客工坊有售。在avrdude命令行模式下,两款avr编程器均不需要输入-b  19200。在avrdude GUI中也无需输入 。
  
 
==结果==
 
==结果==
用Microduino-Core 与Microduino USBTTL实现了AVR通用编程器的功能,不管hex文件来自iccavr或是iar for avr抑或是atmel studio,都可以通过记事本把bootloader代码叠加进去,也不论芯片是88,168还是328,本文提到的Microduino烧写器(STK500v1协议)都可以帮你实现读取烧写。本文参考了阿古作坊里的文章,http://aguegu.net/?p=1507          感谢阿古。
+
用Microduino-Core 与Microduino USBTTL实现了AVR通用编程器的功能,不管hex文件来自iccavr或是iar for avr还是atmel studio,都可以通过记事本把bootloader代码叠加进去,也不论芯片是88,168还是328,本文提到的Microduino烧写器(STK500v1协议)都可以帮你实现读取烧写。本文参考了阿古作坊里的文章,http://aguegu.net/?p=1507          感谢阿古。
  
 
==视频==
 
==视频==
 
|}
 
|}

2014年10月29日 (三) 03:40的最新版本

目的

本教程讲解了Microduino-Core作为烧写器的软硬件环境,实现了AVR烧写器的功能(烧写app区,烧写bootloader区,烧写熔丝等),同时介绍了AVRDUDE烧写工具、Intel 的.hex文件的组成结构。

设备

Microduino-Core 是以 Atmel ATmega328P为核心的8位单片机开发核心板,是一个开源的、与 Arduino UNO 兼容的控制器模块。

下载程序模块,可直接与 Microduino-Core 或者Microduino-Core+ 相连,让他们与计算机通讯。它的下载接口用的是MicUSB,这也是Microduino小巧的一部分。Microduino大小与一枚一元硬币差不多大。下载线与绝大多数智能手机usb数据线是一样的,方便实用。

  • 其他硬件设备
相关硬件 数量 功能
10uf 16V电容 1个 连接于Microduino-Core 的RESET与GND。
UNO板 1个 模拟被烧写芯片,另一片Microduino-Core也可以。
USB数据连接线 1条 连通Microduino模块与计算机。
面包板 1块 各个元器件汇聚于此。
面包板跳线 1盒 电气连接线。

实验原理图

Microduino-Core (作为烧写器) Uno兼容板(被烧写板)
D13 D13
D12 D12
D11 D11
D10 Reset
5V 5V
GND GND
Reset接10uf 电容到GND

接线就是这样的。这与Arduino官网提到的把Arduino作为avr ISP烧写器是一样的。 链接:http://arduino.cc/en/Tutorial/ArduinoISP

实验准备

在按照实验原理图接线前,首先把Microduino-Core与Micoduino-USBTTL叠加,再把Microduino-Core烧入ArduinoISP的程序,这个很轻松吧。打开Arudino程序的File—Examples--ArduinoISP 见下图:

烧写完该程序后,Microduino-Core已经具备了作为烧录器的硬件能力。作为烧写器的Microduino-Core在烧写过程中自然不应该有重启动作,所以用到了一个10uF电容。好,按照实验原理图接好线。 实物见下图:

相关实验

按照官网的说法来实现

选择Tools—Programmer—ArduinoISP,这是在选择编程器。然后再点击Tools—Burn Bootloader。这时可以看到uno兼容板13脚的led闪烁,证明开始烧写了。uno的13脚与Microduino-Core 的13脚连在一起,所以uno上的小灯会闪烁。为什么arduino板会选择13脚放led呢,可能是因为它的英文是SCK,也就是说烧写时钟到来时,它可兼作指示。只是我们用bootloader引导串口烧写时,它失去了闪烁的机会。

烧写成功图如下:

烧写成功后,被烧写的uno板的bootloader区已经有了opti-boot代码。当我们点击uno的reset按键时,13脚的小灯会闪几下,这时的小灯闪烁是因为uno的bootloader开始工作了。

瞒天过海,用ArduinoIDE烧写bootloader时顺便把app区的程序也烧写了

  • 当我们点下Tools—Burn Bootloader时,ArduinoIDE程序其实是把D:\Program Files\Arduino\hardware\arduino\bootloaders\optiboot目录下的optiboot_atmega328.hex作为烧写源文件的(根据安装目录不同,会有不同位置,Arduino官网提供的无需安装版里也可以方便找到hardware文件夹)。我们把optiboot_atmega328.hex稍改下名字再烧录,ArduinoIDE会提示avrdude: read from file 'D:\Program Files\Arduino\hardware\arduino\bootloaders\optiboot\optiboot_atmega328.hex' failed 是说找不到文件了。见下图:

下面我们在这个文件上作些文章。 首先,我们打开ArduinoIDE的Blink程序,然后找到Blink程序生成的hex文件。如何找到该hex文件呢?只需在ArduinoIDE上点击编译按钮,或是快捷键ctrl+R,校验编译程序,不上载。这时在状态提示栏的倒数第二行便会有它的目录了。如下图:

ctrl+C,找到该文件。如果你的ArduinoIDE没有显示这行文字,需要点击File—Preference—compilation复选框。用记事本或是其它文本编辑器打开该hex文件,把它的内容复制到剪贴板。然后再粘贴到D:\Program Files\Arduino\hardware\arduino\bootloaders\optiboot\optiboot_atmega328.hex这个文件的最上边(optiboot_atmega328.hex可以作个备份,为了以后恢复)。如下图,笔者是用notepad打开,记事本也可以的。

删除下图选中的这一行

OK,保存文件。再回到ArduinoISP的程序界面,点击Tools—Burn Bootloader,烧写完成后看到了什么?是的,13脚的led开始blink了,点击uno的Reset,led先是执行bootloader的闪烁,然后开始无休止的执行blink。这说明了我们的uno中既烧入了opti的bootloader,也烧入了app区的blink程序。一次完成,这样实际量产时,会给生产带来方便。

  • 下面介绍下.hex文件的组成,我们以optibootloader的第一行为例。:107E0000112484B714BE81FFF0D085E080938100F7。“:”的概念我们不去管它,“10”代表了该行的有效字节数为16,16进制嘛,10代表16。然后是“7E00”代表了328芯片Flash的地址位置,为什么是7E00,因为opti的bootloader有512个Byte(256Word),用32768(328的总Flash空间)减去512,得到的16进制数就是7E00,熔丝位烧写合适,重启后PC指针就会找到该复位向量。后面的“00”,我们不去管它。然后是“112484B714BE81FFF0D085E080938100”共16个字节,对了,就是开头的“10”表征的这16个字节。最后一个字节是“F7”,和校验字节。校验的是“107E0000112484B714BE81FFF0D085E080938100”这一大堆数,什么是和校验?0X01的和校验字节就是FF,0X02的和校验字节就是FE,也就是总数加起来必须是256的整数倍。下面一个小软件可以获取和校验字节。

文件:CheckSum.zip供参考。上文删除的那一行“00000001FF”文字表明.hex文件的结束,如果不删这一行,两个hex文件揉在一起,后面的.hex文件内容不会被执行到。

更多更详细的hex文件描述可参考 https://en.wikipedia.org/wiki/Intel_HEX 嗯,.hex文件介绍就写这么多吧。

  • 如果点击ArduinoIDE中File—Upload Using Programmer烧写blink程序后,bootloader就丢失了,读者熟悉了.hex文件之后,也就能知道个中缘由了。

脱离ArduinoIDE环境,直接寻求avrdude烧写

ArduinoIDE烧写程序从本质上说也是调用的avrdude烧写软件。

Avrdude是直接使用命令行操作的软件,Avrdude GUI化命令行为窗口UI。 下面以Avrdude.exe文件在D盘根目录下为例。Windows开始菜单—运行—cmd—回车—d:--回车—dir—回车—avrdude---回车 可见下图:

输入avrdude -p m328p -c stk500v1 -b 19200 -P com2 -U flash:w:d:\a.hex:i 后回车,接下来就是见证奇迹的时刻。看到一大堆#号(下图),然后再看13脚的led狂闪,事情成了,Flash写入了d:\a.hex文件,该文件读者可从前文提到的揉在一起的(含app,bootloader).hex文件复制更名得到。Com口依据读者电脑更改,如果电脑的com口编号大,要改为小编号。笔者就因为Microduino-USBTTL被识别成com15耗进去几个小时,com口编号在设备管理器中更改即可。 Avrdude更多命令行学习请参考:http://www.ladyada.net/learn/avr/avrdude.html

下面介绍下Avrdude GUI。按下图选择

-b 19200是必须要输入的。点击上图中蓝色圈起的按钮看看效果吧。由图可以看出,熔丝位、锁定位、eeprom、Flash都由你掌控。自然,用命令行的方式也都可以实现。这时,我们实现的功能已不仅仅是ArduinoIDE提供的烧写bootloader功能,我们借助ArduinoISP,avrdude GUI ,可以实现avr编程器能够实现的功能。用Microduino-Core与Microduino-USBTTL实实在在打造出了AVRISP。

扩展实验:用淘宝上常见的USBasp与USBtinyISP烧写器6Pin或10Pin ISP接口直接接到uno

烧写器实物见下图:

  • 用USBasp+avrdude(或avrdude GUI)可以实现读取烧写等
  • 用USBasp+ArduinoIDE不能实现,ArduinoIDE环境不能识别淘宝20元左右的USBasp
  • 用USBasp+progisp可以实现读取烧写等
  • USBtiny+ avrdude(或avrdude GUI)可以实现读取烧写等
  • USBtiny+ArduinoIDE可以实现在ArduinoIDE环境中使用Burn bootloader或是Upload Using Programmer

USBtinyISP极客工坊有售。在avrdude命令行模式下,两款avr编程器均不需要输入-b 19200。在avrdude GUI中也无需输入 。

结果

用Microduino-Core 与Microduino USBTTL实现了AVR通用编程器的功能,不管hex文件来自iccavr或是iar for avr还是atmel studio,都可以通过记事本把bootloader代码叠加进去,也不论芯片是88,168还是328,本文提到的Microduino烧写器(STK500v1协议)都可以帮你实现读取烧写。本文参考了阿古作坊里的文章,http://aguegu.net/?p=1507 感谢阿古。

视频