☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆                                ☆
☆  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          本说明文件

使用方法

  1. 建立一个新的项目,并将上面的文件复制到新项目的文件夹中;
  2. 添加bootldr.c、bootldr.h、bootcfg.h三个文件到项目中;
  3. 在bootcfg.h中修改配置参数;
  4. 设置项目的内存段地址为Bootloader的起始地址,在AVR Studio中设置时注意地址是按照字(word)计算的;
  5. 编译项目,产生目标文件;
  6. 使用编程器烧录HEX目标文件到单片机;
  7. 设置相应的加密位和熔丝位,设置Boot区大小和Boot Reset向量;
  8. 通过串口联机,进行升级测试。

主要参数

下面的参数很重要,请按照用户系统的要求仔细设置:

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格式的用户程序了。
其实本项目中带的专用上位机下载软件也不错的,可以自动转换HEX为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

使用许可

  1. 本程序以开源方式提供,任何人都可以自由使用、复制、传播,而无需事先获取作者的同意。
  2. 你可以按照自己的要求对本程序进行修改,但是必须保持整个项目文件的完整,也必须保留原始的版权信息。
  3. 不能通过销售本程序进行盈利。
  4. 因为用户系统和环境的复杂性和多样性,作者不保证在任何情况下本程序都能正常运行。任何由于使用本程序引起的后果,均由使用者自行承担。
  5. 一旦你开始使用本程序,就意味着你接受了上面的许可。如果你不同意这个许可,请不要使用这个程序。

 

邵子扬 2007.3 于武汉  

 

                           e Y8b    Y8b Y88888P888 88e                       
                          d8b Y8b    Y8b Y888P 888 888D                      
                         d888b Y8b    Y8b Y8P  888 88"                       
                        d8WuHan888b    Y8b Y   888 b,                        
                       d8888888b Y8b    Y8P    888 88b,                      
             e88'Y88                                                         
            d888  'Y e88 88e 888 888 8e 888 888 8e  e88 88e 888 8e           
           C8888    d888 888b888 888 88b888 888 88bd888 888b888 88b          
            Y888  ,dY888 8Shao88 zi8 8yang8 888 888Y888 888P888 888          
             "88,d88 "88 88" 888 888 888888 888 888 "88 88" 888 888          
 888 88b,                    d8  888                         888             
 888 88P' e88 88e  e88 88e  d88  888     e88 88e  ,"Y88b e88 888 ,e e, 888,8,
 888 8K  d888 888bd888 888bd20078888    d888 888b"8" 888d888 888d88 88b888 "
 888 88b,Y888 888PY888 888P 888  888  ,dY888 888P,ee 888Y888 888888   ,888   
 888 88P' "88 88"  "88 88"  888  888,d88 "88 88" "88 888 "88 888 "YeeP"888   
          __                                                                 
         / _)                                                                
        /(_)(/                                    __                         
            /                                    (_ |_  _. _  _ o   _.._  _  
                                                 __)| |(_|(_) /_|\/(_|| |(_|
                                                                /        _|