Arduino使用的是Atmel公司的AVR单片机,一般为ATmega8和ATmega168,这一系列的单片机都支持ISP(In System Programmability )编程,无需依赖昂贵的编程器就可以完成程序的下载。Arduino电路在设计上考虑到了ISP功能,也留出了相应的接口(ICSP),从而允许我们通过ISP下载线来完成bootloader的下载。
新买来的Arduino模块上一般都已经预先下载好了bootloader,因此上电之后就能够直接通过Arduino集成开发环境下载相应的Arduino程序。正常情况下我们在用Arduino时是不需要ISP下载线的,但在某些情况下可能会出现在Arduino集成开发环境中无法正常下载程序的现象,这很可能是由于bootloader受损所致。解决的办法就是重新将bootloader烧写到ATmega芯片中,此时你就需要用到这里介绍的ISP下载线了。
Arduio网站上给出的并口下载线电路我只成功地更新过ATmega8的bootloader,而无法为Diecimila上的ATmega168下载bootloader。此外,Arduino给出的这一下载线电路过于简单,没有做相应的隔离和保护, 经常使用可能会对Atmega芯片带来一定的损害。AVR建议使用一片74HC244来隔离并口和ATmega芯片,下面是我所使用的下载线的原理图:
以及自制的下载线:
使用并口下载线的时候,我们需要先到计算机的BIOS中将并口设为ECP(The extended capabilities port )模式,同时将I/O基地址设置成378:
此时在Windows的设备管理器中,我们会发现并口已经被标记为“ECP 打印机端口”:
用鼠标右键单击后从弹出的菜单中选择“属性”命令打开属性对话框,在“资源”页面中我们会看到相应I/O基地址的设置已经生效:
现在就可以用ISP下载线连接计算机并口和Arduino上的ICSP接口了,请特别留意连接方向:ISP下载线六口插座上标有小三角的一端应该靠近 Arduino的ICSP接口上标为1的一端。虽然计算机并口能够为下载电路提供一定的电压,但一般我还是建议给Arduino模块加上5V电压(通过USB线和外接电源都可以),以保证下载过程的稳定。
硬件准备好之后,我们就可以通过相应的软件将bootloader烧到Arduino中。支持AVR下载线的软件比较多,如AVRDUDE和SLISP等,我们在这里使用的是PonyProg。下载并安装好PonyProg v2.07a BETA版本,启动PonyProg时会提示你进行相应的校准和设置工作。首先选择“Setup”菜单中的“Calibration”命令进行校准,然后再选择“Setup”菜单中的“Intreface Setup…”命令进行相应的并口设置:
根据你的Arduino模块上的芯片类型,从“Device” 菜单中的“AVR micro”子菜单中选择“ATmega8”或者“ATmega168”。你也可以从工具栏上的Device下拉框中进行相应的选择:
首先从“Command”菜单中选择“Read All” 命令,从Arduino模块上读出ATmega中的当前数据和设置,其中最重要的是之后要设置的熔丝位。
然后选择“File”菜单中的“Open Program (FLASH) File…” 命令,打开“Open program (FLASH) content file”对话框。从你的Arduino安装目录下找出对应于的bootloader。对于Arduino 0010版本来讲,我们可以在hardware\bootloaders目录下找到atmega8和atmega168两个目录,分别对应ATmega8和ATmega168芯片所对应的bootloader(文件扩展名为.hex),在atmega168目录下可以找到ATmegaBOOT_168_diecimila.hex和ATmegaBOOT_168_ng.hex两个文件,分别对应Diecimila和NG模块。你需要根据你的Arduino模块的具体情况,加载相应的bootloader文件。
AVR通过熔丝来控制芯片内部的一些功能,比如JTAG,时钟的使用,掉电检测电压,是否允许调试等。熔丝位的配置是为Arduino下载bootloader过程中最复杂的一步,而且设置出错很有可能导致芯片锁死,所以一定要仔细。选择“Command”菜单中的“Security and Configuration Bits …”命令,打开相应的熔丝设置对话框。
Arduino的bootloader对熔丝位有一定的要求,主要是同外部时间设置相关的。对于串口模块采用的ATmega8来讲,相应的熔丝字节要设置成0xCA(Fuse High Byte)和0xFF(Fuse Low Byte),具体每位的含义可以参见Wolf Paulus的文章。在PonyProg中对ATmega8的熔丝位设置为下图所示:
对于NG和Diecimila采用的ATmega168来讲,相应的熔丝字节要设置成0xF8(Extended Fuse Byte), 0xDF(Fuse High Byte)和0xFF(Fuse Low Byte)。在PonyProg中对ATmega168的熔丝位设置为下图所示:
熔丝位设置好之后,选择“Command”菜单中的“Write All”命令,将bootloader下载到Arduino中。下载过程中Arduino上的发光二极管L会不断闪烁。下载完成之后,我们可以通过Arduino集成开发环境下载一个Arduino工程,来验证新下载的bootloader是否能够正常工作。
No tags









[AVR]-自製AVR ISP下載線~Part-I « [MitchCircuit] - 米奇電路 · 2008/02/22 at 1:05 PM
[...] ScienceProg – AVR ISP*4. Simple AVR Programmer5. Learning About AVR Parallel Programmer6. Arduino下載線使用手冊7. Arduino官網的Parallel [...]
[AVR]-自製AVR ISP下載線~Part-I « [MitchCircuit] - 米奇電路 · 2008/02/22 at 1:08 PM
[...] 3. ScienceProg – AVR ISP* 4. Simple AVR Programmer 5. Learning About AVR Parallel Programmer 6. Arduino下載線使用手冊 7. Arduino官網的Parallel [...]
Yurtdisi Egitim · 2008/03/11 at 6:35 PM
it seems like e very good web site but my Chinese is not good. It would be great if it might be availible in English too. Thanks.