关于Bootloader
Bootloader 从字面上来看就是启动加载的意思。用过电脑的都知道,windows开机时会首先加载bios,然后是系统内核,最后启动完毕。那么bootloader就相当于单片机的bios,它在嵌入式系统在加电启动的时候根据基带初始化硬件,然后引导系统内核或者是烧写的程序,直到系统启动1。
举个实际案例,ATMEGA328P-PU使用其自带的 8MHz晶振就需要烧写
…\hardware\arduino\avr\bootloaders\atmega\ATmegaBOOT_168_atmega328_pro_8MHz.hex
而使用外部的16MHz晶振则需要烧写
…\hardware\arduino\avr\bootloaders\optiboot\optiboot_atmega328.hex
使用Arduino作为烧录器
首先是做一个以Arduino开发板为基础的烧录器,选择 文件>>示例>>11.ArduinoISP>>ArduinoISP
示例程序,把程序烧写进入就完成了一个烧录器。
然后是了解Arduino的ISP下载接口,开发板上的”1”数字标号或者“.”点标号就是MISO接口,其他接口按如下顺序排列。
将烧录器与需要烧录Bootloader的开发板除了按下图进行连接,主要差别就是将烧录器的D10引脚与目标单片机的RESET引脚相连,具体可查看示例代码的第73行:
define RESET 10 // Use pin 10 to reset the target rather than SS
最后就是烧写了,在 工具
选项中,开发板和处理器
按实际需求设置即可,端口
选择烧录器的端口,编程器
选择 Arduino as ISP,设置完成后,点击烧录引导程序即可,如果烧录成功会在下面的窗口提示如下内容:
BUGS:
- 如果在连接后的第一次烧写发生如下错误,可以尝试进行第2或第3次烧写,烧写时似乎是有一个响应时间,我个人在烧录时,连接后第一次烧录Bootloader都会有如下错误,但第2次之后基本没失败过。
avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x00 avrdude: stk500_recv(): programmer is not responding … 烧录引导程序出错。
- 如果在多次尝试后都无法烧录,可以考虑检查杜邦线的问题,把一些很松胯的杜邦线换掉就可以了。