查看“第三十四课--Microduino制作烧写器/zh”的源代码
←
第三十四课--Microduino制作烧写器/zh
跳转至:
导航
、
搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
{| style="width: 800px;" |- | ==目的== 本教程讲解了Microduino-Core作为烧写器的软硬件环境,实现了AVR烧写器的功能(烧写app区,烧写bootloader区,烧写熔丝等),同时介绍了AVRDUDE烧写工具、Intel 的.hex文件的组成结构。 ==设备== *'''[[Microduino-Core]]''' Microduino-Core 是以 Atmel ATmega328P为核心的8位单片机开发核心板,是一个开源的、与 Arduino UNO 兼容的控制器模块。 *'''[[Microduino-USBTTL]]''' 下载程序模块,可直接与 Microduino-Core 或者Microduino-Core+ 相连,让他们与计算机通讯。它的下载接口用的是MicUSB,这也是Microduino小巧的一部分。Microduino大小与一枚一元硬币差不多大。下载线与绝大多数智能手机usb数据线是一样的,方便实用。 *其他硬件设备 {|class="wikitable" |- |相关硬件||数量||功能 |- |10uf 16V电容 ||1个||连接于Microduino-Core 的RESET与GND。 |- |UNO板 ||1个||模拟被烧写芯片,另一片Microduino-Core也可以。 |- |USB数据连接线 ||1条||连通Microduino模块与计算机。 |- |面包板 ||1块 ||各个元器件汇聚于此。 |- |面包板跳线 ||1盒||电气连接线。 |- |} ==实验原理图== {|class="wikitable" |- |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 见下图: [[File: burn_ISPprog.jpg|600px|center|thumb]] 烧写完该程序后,Microduino-Core已经具备了作为烧录器的硬件能力。作为烧写器的Microduino-Core在烧写过程中自然不应该有重启动作,所以用到了一个10uF电容。好,按照实验原理图接好线。 实物见下图: [[File: MicroandUNORealConn.JPG|600px|center|thumb]] ==相关实验== ===按照官网的说法来实现=== 选择Tools—Programmer—ArduinoISP,这是在选择编程器。然后再点击Tools—Burn Bootloader。这时可以看到uno兼容板13脚的led闪烁,证明开始烧写了。uno的13脚与Microduino-Core 的13脚连在一起,所以uno上的小灯会闪烁。为什么arduino板会选择13脚放led呢,可能是因为它的英文是SCK,也就是说烧写时钟到来时,它可兼作指示。只是我们用bootloader引导串口烧写时,它失去了闪烁的机会。 烧写成功图如下:[[File: burnBootloaderNormal.JPG|600px|center|thumb]] 烧写成功后,被烧写的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 是说找不到文件了。见下图: [[File: optibootDirNG.jpg|600px|center|thumb]] 下面我们在这个文件上作些文章。 首先,我们打开ArduinoIDE的Blink程序,然后找到Blink程序生成的hex文件。如何找到该hex文件呢?只需在ArduinoIDE上点击编译按钮,或是快捷键ctrl+R,校验编译程序,不上载。这时在状态提示栏的倒数第二行便会有它的目录了。如下图: [[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]] 删除下图选中的这一行 [[File: blinkHEX_deleteEndFlag.jpg|600px|center|thumb]] 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的整数倍。下面一个小软件可以获取和校验字节。 '''[[File:checkSum.zip]]'''供参考。上文删除的那一行“00000001FF”文字表明.hex文件的结束,如果不删这一行,两个hex文件揉在一起,后面的.hex文件内容不会被执行到。 [[File: sumCheck.jpg|600px|center|thumb]] 更多更详细的hex文件描述可参考 https://en.wikipedia.org/wiki/Intel_HEX 嗯,.hex文件介绍就写这么多吧。 *如果点击ArduinoIDE中File—Upload Using Programmer烧写blink程序后,bootloader就丢失了,读者熟悉了.hex文件之后,也就能知道个中缘由了。 ===脱离ArduinoIDE环境,直接寻求avrdude烧写=== ArduinoIDE烧写程序从本质上说也是调用的avrdude烧写软件。 *Avrdude 链接:'''[[File:AVRDUDE.rar]]''' *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]] 输入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 [[File: avrdudeSucc.jpg.jpg|600px|center|thumb]] 下面介绍下Avrdude GUI。按下图选择 [[File: avrdudeUI.jpg.jpg|600px|center|thumb]] -b 19200是必须要输入的。点击上图中蓝色圈起的按钮看看效果吧。由图可以看出,熔丝位、锁定位、eeprom、Flash都由你掌控。自然,用命令行的方式也都可以实现。这时,我们实现的功能已不仅仅是ArduinoIDE提供的烧写bootloader功能,我们借助ArduinoISP,avrdude GUI ,可以实现avr编程器能够实现的功能。用Microduino-Core与Microduino-USBTTL实实在在打造出了AVRISP。 ===扩展实验:用淘宝上常见的USBasp与USBtinyISP烧写器6Pin或10Pin ISP接口直接接到uno=== 烧写器实物见下图: [[File: otherProgrammer.jpg.jpg|600px|center|thumb]] *用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 感谢阿古。 ==视频== |}
返回至
第三十四课--Microduino制作烧写器/zh
。
导航菜单
个人工具
创建账户
登录
名字空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
Welcome
首页
创客大赛
大赛详情
3D打印
安装月球车
图形化编程
操控月球车
升级月球车
编程工具下载
软件下载
Arduino
Processing
Mixly
Scratch
模块套件
Microduino 102
mCookie 102
mCookie 202
mCookie 302
IBC
其他
应用套件
四轴飞行器
平衡车
小车CUBE
音乐播放器
刷卡音乐播放器
wifi气象站
彩虹音乐触摸灯
分贝检测仪
迎门汇报
LED点阵时钟
LED点阵屏幕
硬件
mCookie
Sensor
Microduino
MicroWrt
MicroNux
MicroRobot-Core
MicroRobot-CoreESP
ideaBoard
ideaBox
MicroMV
MicroAI
帮助
常见问题
帮助
工具
链入页面
相关更改
特殊页面
页面信息