CAT | 手册
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
Arduino USB模块使用了FTDI公司的USB转串口芯片FT232BM,因此使用一根USB电缆就能够完成Arduino程序的下载。相应地,你需要在你的计算机上安装该USB芯片的驱动,在FTDI网站上可以找到相应的驱动安装程序。FDTI提供了两种驱动:虚拟串口(VCP)方式和直接访问(DX22)方式。我选择安装的是DX22方式的驱动程序,从该页面下载相应操作系统所对应的可执行文件,然后执行就可以了。
接下来就是安装Arduino集成开发环境了,从Arduino网站下载相应的压缩包(我用的是0010 Windows版本),然后解压缩就可以了。第一次运行Arduino集成开发环境时console窗口出现了一大堆警告信息,但似乎只需要简单地忽略就行了,因为再次运行Arduino集成开发环境时不会再出现这些警告信息。
现在可以开始连接Arduino USB模块了。Arduino USB模块可以用两种供电方式,一种是通过USB接口提供的5V电压,另一种是通过外接的9V变压器,这两者可以通过Arduino电路板USB接口旁边的“PWR SEL”跳线来确定。当用跳线连接标为“USB”的两脚时,使用USB接口提供的5V电压;当用跳线连接标为“EXT”的两脚时,使用外接的变压器作为电源。
用USB电缆将Arduino USB模块与计算机连接,在设备管理器中就会立即找到相应的设备:
此时再启动Arduino集成开发环境,从Tools->Board菜单中选择“Arduino Diecimila”:
再从Tools->Serial Port菜单中选择设备管理器里“USB Serial Port”所对应的串口设备:
为了实验Arduino USB模块的基本功能,仍旧可以从最简单的Hello World开始,即创建一个下面的Arduino工程:
int ledPin = 13;
void setup()
{
pinMode(ledPin, OUTPUT);
}
void loop()
{
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
delay(1000);
}
按照Arduino USB模块的原理图,在数字I/O管脚13上没有再接电阻,以保持与其他数据I/O接口的一致,但该管脚上接了一个发光二极管L。上述程序正是通过对该管脚的操作,实现发光二极管不断亮灭的效果。出厂时的Arduino USB模块里已经下载了一个Arduino程序,它会循环地控制数字I/O端口2~12,每隔一定的时间就会将其中一个端口的输出置为高,而其它端口的输出置为低,你看到的效果就是板子上的发光二极管L有节奏地亮灭。
在Arduino集成开发环境中按Ctrl+R编辑该程序,然后再按Ctrl+U将编译好的工程上传到Arduino USB模块中,整个过程不需要按Arduino USB模块的Reset按钮(S1)即可以完成,同之前的Arduino串口模块相比确实方便了不少。在上传工程的过程当中,Arduino USB模块上的发光二极管TX和RX在有数据通过USB接口发送的时候会闪烁。程序下载完之后也不需要按Reset按钮,下载结束后工程会自动运行起来。
No tags












