☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆ ☆
☆ AVR 通用 Bootloader 使用说明 ☆
☆ AVR Common Bootloader Readme ☆
☆ ☆
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
基本介绍
主要特点
程序版本
特别感谢
开发环境
项目文件
使用方法
主要参数
支持型号
常见问题
使用许可
这个程序的主要目的是为了提供一个具有通用性的AVR Bootloader,不同型号的AVR单片机只需要修改一下几个简单的配置参数就可以直接使用了,不用再修改主程序。因为现在网上流传的很多Bootloader程序都是针对某几个特定型号的,在换用其它型号后,需要对程序进行较多的修改,使用起来不太方便,所以我写了这个程序。它是在网上流传的马潮老师的ATmega128 Bootloader程序的基础上,结合了我以前在PIC18单片机中使用Bootloader的一点经验,以及学习自AVR USB中一些使用宏定义的技巧,再经过多次优化后得到的。
这个通用的Bootloader可以支持目前的大部分具有自编程功能,带有Boot区和UART串口的AVR单片机(主要是Mega系列)。如果是带有多串口的单片机,可以任意选择使用其中的一个串口。程序也支持RS485/RS422方式,如果程序稍加修改,也应当可以很容易的支持USI、SPI、I2C等接口。
这个Bootloader已经在ATmega8、ATmega64、ATMega168、ATmega169(Butterfly)等型号的AVR单片机上测试通过。对于其它型号,也基本都编译通过。虽然如此,也无法保证对其它没有经过完全测试的型号上使用不出现问题。如果你发现这个程序在某个型号的单片机上存在问题,请与我联系以便及时修正。
整个Bootloader最大占用不到1K Word的空间。在最小情况下,占用的空间不到300 Word(具体占用空间的大小与单片机的型号、配置的参数、功能裁剪的多少以及程序的优化等级有关)。
v1.0 |
2007.Mar.22 |
第一版,实现全部基本功能,并扩展了XModem协议以适合不同的应用(可变缓冲区长度和多种校验方式)。 |
在此特别感谢下面这些为此程序做出贡献的人:
刘海涛 |
我的同事,在程序编写和调试时提供了很多帮助和资料 |
本项目的开发环境是:WinAVR + AVR Studio
WinAVR版本: 20070122
AVR Studio版本: 4.13.258
本项目中所有文件都以AVR Studio作为IDE进行调试,可以使用mk-II仿真器或其他仿真工具调试。使用AVR Studio的好处是可以不用手工修改makefile文件,不容易出错,降低了初学者上手的难度。WinAVR可以在 http://winavr.sourceforge.net/ 下载,AVR Studio可以在 http://www.atmel.com/ 下载,它们都是免费软件。
整个Bootloader主要由以下几个文件组成:
bootldr.c 主程序
bootldr.h 主程序的头文件
bootcfg.h 主程序的用户配置文件
test.c 串口通信的测试程序
testcfg.h test.c的配置文件
readme.txt 本说明文件
下面的参数很重要,请按照用户系统的要求仔细设置:
BUFFERSIZE |
串口缓冲区大小,使用超级终端时=128。这个参数应当是单片机页面大小SPM_PAGESIZE的倍数或约数 |
F_CPU |
系统时钟频率(Hz) |
BAUDRATE |
串口波特率(bps) |
LEVELMODE |
Bootloader触发模式 0=串口 1=电平 |
timeclk |
基本时间间隔(ms) |
TimeOutCnt |
Bootloader启动超时计数<=255 |
TimeOutCntC |
等待接收文件的超时计数<=255 |
CONNECTCNT |
联机密码长度 |
KEY |
联机密码,任意16进制数或字符串 |
COMPORTNo |
串口号,多串口的单片机是串口号(0/1/2...),单串口的单片机一般是空,也有的需要设置为0(特别是新的型号,如ATmega168) |
WDGEn |
使能看门狗 |
RS485 |
使能RS485/RS422 |
RS485PORT |
RS485/RS422发送控制端口=A/B/C/D... |
RS485TXEn |
RS485/RS422发送控制引脚=PC0/PC1/PC2... |
LEDEn |
LED状态指示使能 |
LEDPORT |
LED使用的端口 |
LEDPORTNo |
LED使用的引脚 |
InitDelay |
额外的延时(某些型号的单片机需要) |
VERBOSE |
提示模式,显示更多的提示信息,方便超级终端下的交互输入 |
CRCMODE |
校验模式,0=XMODEM的CRC校验 1=简单的累加和 |
目前已经完全测试过的AVR单片机的型号:
ATmega8
ATmeag64
ATmega168
ATmega169(Bufferfly)
如果你成功使用了不在上面列表中型号,请给我发EMail,以便及时添加到列表中。
1. |
问: |
怎样保护Bootloader区? |
答: |
为了保护Bootloader区本身不被意外改写,需要设置Bootloader区的保护。通常是将BLB1锁定位设置成模式2或3,禁止对Bootloader区写。 |
|
2. |
问: |
为什么需要在bootloader中使用看门狗? |
答: |
为了增加系统的稳定性,通常应当允许看门狗,这样在意外情况下可以由看门狗将系统复位,防止在升级过程中进入死循环。 |
|
3. |
问: |
是否支持使用超级终端作为上位机软件进行升级? |
答: |
这个程序支持使用超级终端作为上位机软件进行下载。如果使用超级终端下载,那么串口缓冲区的大小必须定义为128,同时要将等待密钥和等待文件的超时时间设置大一些(TimeOutCnt/TimeOutCntC和timeclk的乘积),避免来不及输入而超时造成不能进入Bootloader模式;否则可以设置小一些,缩短启动带来的延时。此外校验方式CRCMODE需要设置为0。在超级终端中输入联机密码后,在发送文件时选择标准XMODEM协议就可以下载BIN格式的用户程序了。 |
|
4. |
问: |
怎样判断串口通信是否正常(硬件连接是否正常)? |
答: |
示例程序test.c可以用于测试系统的串口通信是否正常。程序运行时不断向串口发送数据,同时检测串口是否收到数据。如果接收到数据,就将发送的数据改为新收到的数据。可以用超级终端和这个程序联机调试。如果在调试Bootloader遇到问题,可以先试试这个程序是否可以正常运行。如果test可以正常运行,那么一般就没有太大的问题了。 |
|
5. |
问: |
为什么升级完后不能跳转到用户程序? |
答: |
如果不能正确跳转到用户程序,往往是使用的GCC编译器存在bug,造成某些型号的单片机不能正确跳转。可以尝试升级GCC到新版本。也可以查看反汇编代码进行分析。 |
|
6. |
问: |
怎样减少Bootloader代码的大小,留出更多空间给用户程序? |
答: |
可以裁减掉不必要的功能,如提示信息、LED状态指示、将CRC校验改为累加和校验等。还可以打开程序的优化选项,选择代码大小优化。因为C语言优化时具有一定的不确定性,选用代码大小优化得到的最终代码有时并不是最小的。 |
|
7. |
问: |
是否可以支持其它C编译器? |
答: |
本项目使用了WinAVR带有的GCC编译器,其它编译器目前没有试验过。IAR C编译器和GCC最为接近,我想只要做很小的修改就可以了(AVR USB就是可以同时GCC和IAR C编译器);其它编译器应当也可以,因为我在编写代码时,是尽量按照ANSI C的规范编写。最容易出问题的地方应该在头文件部分,不同的C编译器在声明同样的寄存器或参数时存在一些差异。 |
|
8. |
问: |
在什么地方可以下载本程序的最新版本? |
答: |
在 http://shaoziyang.bloger.com.cn 上可以下载到最新版本。一般情况下我也会在OURAVR上提供最新的版本。如果有任何建议,欢迎发EMail到 shaoziyang@126.com。 |
邵子扬 2007.3 于武汉
e Y8b Y8b Y88888P888 88e |