📄 readme.htm
字号:
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=gb2312">
<title>使用说明</title>
<meta name="author" content="邵子扬">
<style><!--
td { font-size:9pt; }
h1 { font-size:12pt; }
name { font-size:12pt; }
p { font-size:9pt; }
li { font-size:9pt; }
a { font-size:9pt; text-decoration:none; }
a:hover {color:white; background-color:#000000; text-decoration:none; border-style:none; }
SPAN.button {
background-color: #F5F5DC;
border-color: gray;
border-style: outset;
border-width: 1px;
font-weight: normal;
line-height: 160%;
padding: 1px 9px 1px 9px;
}
--></style>
<meta name="generator" content="Namo WebEditor">
</head>
<body bgcolor="white" text="black" link="blue" vlink="purple" alink="red">
<p>☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆<a name="b0"> </a><br>
☆ ☆<br>
☆ AVR 通用 Bootloader 使用说明 ☆<br>
☆ <span style="background-color:red;"><font color="white">A</font></span><span style="background-color:rgb(255,38,0);"><font color="white">V</font></span><font color="white"><span style="background-color:rgb(255,76,0);">R</span><span style="background-color:rgb(255,114,0);"> </span><span style="background-color:rgb(255,153,0);">U</span><span style="background-color:rgb(255,178,0);">n</span><span style="background-color:rgb(255,204,0);">i</span><span style="background-color:rgb(255,229,0);">v</span><span
style="background-color:yellow;">e</span><span style="background-color:rgb(192,255,0);">r</span><span style="background-color:rgb(64,255,0);">sa</span><span style="background-color:lime;">l</span><span style="background-color:rgb(0,255,64);"> </span><span style="background-color:rgb(0,255,128);">B</span><span style="background-color:rgb(0,255,192);">o</span><span style="background-color:aqua;">o</span><span style="background-color:rgb(0,192,255);">t</span><span
style="background-color:rgb(0,128,255);">l</span><span style="background-color:rgb(0,64,240);">o</span><span style="background-color:blue;">a</span><span style="background-color:rgb(64,0,255);">d</span><span style="background-color:rgb(128,0,255);">e</span><span style="background-color:rgb(192,0,255);">r</span><span style="background-color:fuchsia;"> </span><span style="background-color:rgb(255,0,192);"> </span></font><span style="background-color:rgb(255,0,128);"><font color="white"> </font></span><span
style="background-color:rgb(255,0,64);"><font color="white"> </font></span> ☆<br>
☆ ☆<br>
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆</p>
<p><font color="#999999">本文件最后修订于2008.May</font></p>
<p><a href="#b1">基本介绍</a><br>
<a href="#b2">主要特点</a><br>
<a href="#b3">程序版本</a><br>
<a href="#b5">开发环境</a><br>
<a href="#b6">项目文件</a><br>
<a href="#b7">使用方法</a><br>
<a href="#b8">主要参数</a><br>
<a href="#b9">已测试的型号</a><br>
<a href="#b10">常见问题</a><br>
<a href="readme.htm#b4">特别感谢</a><br>
<a href="#b11">使用许可</a></p>
<p><a href="readme.htm#b0" name="b1">▲</a></p>
<h1>基本介绍</h1>
<p>这个程序的主要目的是为了提供一个具有通用性的 AVR Bootloader,不同型号的AVR单片机只需要修改一下几个简单的配置参数就可以直接使用了,不需要再修改主程序。因为现在网上流传的很多 Bootloader程序都是针对某个或几个特定型号的,在换用其它型号后,需要对程序进行较多的修改;而且很多Bootloader程序虽然实现了基本功能,但是存在着一些缺陷或隐患,或者使用起来不够方便,所以我写了这个程序。它是在网上流传的马潮老师的ATmega128 Bootloader程序的基础上,结合了我以前在PIC18单片机中使用Bootloader的一点经验,以及学习自AVR USB中一些使用宏定义的技巧,再经过多次优化和反复测试后得出的。 </p>
<p>这个通用的Bootloader可以支持大部分具有自编程功能、带有Boot区和UART串口的AVR单片机(主要是Mega系列)。如果是多串口的单片机,可以任意选择使用其中的一个串口。程序支持RS232/RS485/RS422方式,如果程序稍加修改,也应当可以很容易的支持USI、SPI、I2C等接口。</p>
<p>整个Bootloader最大占用不到1K Word的空间。在最小情况下,占用的空间不到300 Word(具体占用空间的大小与单片机的型号、配置的参数、功能裁剪的多少以及程序的优化等级有关)。</p>
<p> </p>
<p><a href="#b0" name="b2">▲</a></p>
<h1>主要特点</h1>
<ul>
<li>支持多种型号的AVR单片机</li>
<li>支持多串口的AVR单片机</li>
<li>支持RS232/RS485/RS422模式</li>
<li>支持多种通信波特率和时钟频率</li>
<li>自动计算波特率误差,如果波特率误差>2%,将给出错误提示</li>
<li>完全C语言编写,容易修改</li>
<li>代码高度优化,占用空间小</li>
<li>方便的功能裁剪,适应不同的要求</li>
<li>支持看门狗</li>
<li>支持使用LED指示升级状态</li>
<li>支持使用超级终端做为上位机下载软件</li>
<li>支持Flash写入校验</li>
<li>可以自定义用户程序区大小</li>
<li>...</li>
</ul>
<p><a href="#b0" name="b3">▲</a></p>
<h1>程序版本</h1>
<table width="100%" cellpadding="0" cellspacing="0">
<tr>
<td width="50" valign="top">v4.0</td>
<td width="100" valign="top">2008.May</td>
<td valign="top">增加了128/256位PC1加密解密算法<br>
修正了一个下载大文件时出错的问题<br>
</td>
</tr>
<tr>
<td width="50" valign="top">v3.5</td>
<td width="100" valign="top">2008.Mar</td>
<td valign="top">
<p>修正了大于64K的Flash程序校验的Bug<br>
在AVRUBD的自动代码中自动产生 avrub.bat,不再需要到AVR Studio中设置段偏移量,减少了出错几率,也更加容易使用<br>
</p>
</td>
</tr>
<tr>
<td width="50" valign="top">v3.2</td>
<td width="100" valign="top">2008.Mar</td>
<td valign="top">
<p>修正了初始化串口时URSEL位的问题,造成部分型号的单片机串口初始化错误。<br>
</p>
</td>
</tr>
<tr>
<td width="50" valign="top">v3.1</td>
<td width="100" valign="top">2007.Sep</td>
<td valign="top">
<p>根据Douglas Hammond的建议,调整了串口初始化中寄存器的顺序(据说在M32上存在初始化的问题,因为我没有M32所以没有测试过,但是有其他网友以前报告没有问题)<br>
</p>
</td>
</tr>
<tr>
<td width="50" valign="top">
<p>v3.0</p>
</td>
<td width="100" valign="top">
<p>2007.Jun</p>
</td>
<td valign="top">
<p>修正了ATmega162中一个错误。<br>修改串口号的设定<br>通过了AVR GCC 4.1.2(WinAVR20070525)版本的测试<br> </p>
</td>
</tr>
<tr>
<td width="50" valign="top">v2.0</td>
<td width="100" valign="top">
<p>2007.Apr.10</p>
</td>
<td valign="top">
<p>增加Flash写入校验功能,极大的提高了Bootloader的可靠性。<br>
</p>
</td>
</tr>
<tr>
<td width="50" valign="top">v1.2</td>
<td width="100" valign="top">2007.Apr.02</td>
<td valign="top">
<p>修正了串口寄存器计算中的一个隐含错误(这个错误很常见,包括在很多书中和网上的程序中都能见到),造成部分波特率的计算会出错。<br>
同时修正了波特率误差判断。<br>
</p>
</td>
</tr>
<tr>
<td valign="top" width="50">
<p>v1.0</p>
</td>
<td valign="top" width="100">
<p>2007.Mar.22</p>
</td>
<td valign="top">
<p>第一版,实现全部基本功能,并扩展了XModem协议以适合不同的应用(可变缓冲区长度和多种校验方式)。</p>
</td>
</tr>
<tr>
<td valign="top" width="50"> </td>
<td valign="top" width="100"> </td>
<td valign="top"> </td>
</tr>
</table>
<p><a href="readme.htm#b0" name="b5">▲</a></p>
<h1>开发环境</h1>
<p>本项目的开发环境是:WinAVR + AVR Studio</p>
<p>WinAVR版本: 20071221<br>
AVR Studio版本: 4.14.589</p>
<p>本项目通过了WinAVR的多个版本的测试,但是早期的版本在编译某些型号的单片机中存在一些Bug。</p>
<p>本项目中所有文件都以AVR Studio作为IDE进行调试,可以使用JTAG mk-II仿真器或其他仿真工具进行调试。使用AVR Studio的好处是可以不用手工修改makefile文件,不容易出错,降低了初学者上手的难度。当然也可以使用其他工具软件,如KamAVR、AtmanAVR、PN等代替AVR Studio进行开发。</p>
<p><a href="#b0" name="b6">▲</a></p>
<h1>项目文件</h1>
<p>整个Bootloader主要由以下几个文件组成:</p>
<p>bootldr.c 主程序<br>
bootldr.h 主程序的头文件<br>
bootcfg.h 主程序的用户配置文件<br>
bootldr.aps 主程序的AVR Studio的项目文件<br>
test.c 串口通信的测试程序<br>
testcfg.h test.c的配置文件<br>
test.aps test的项目文件<br>
readme.txt 本说明文件<br>
readme.htm 本说明文件的HTML版本</p>
<p>因为很多人都有AVR Butterfly试验板,所以这里的项目文件都以AVR Butterfly为例。如果使用了其它的硬件环境,只需要简单的修改<a href="#b8">配置参数</a>。</p>
<p><a href="#b0" name="b7">▲</a></p>
<h1>使用方法</h1>
<p>现在你可以使用<a href="http://avrubd.googlepages.com" target="_blank">AVRUBD</a>软件进行自动化的参数配置和编译:</p>
<ol>
<li>建立一个新的项目,并将上面的文件复制到新项目所在的文件夹中;</li>
<li>运行AVRUBD软件,选择自动代码功能;</li>
<li>选择时钟、波特率、看门狗等参数时;</li>
<li>按下 <span class="button">创建</span> 键,选择保存的位置后,将自动产生一个对应参数配置文件bootcfg.h和对应的编译批处理文件avrub.bat;</li>
<li>运行批处理文件将直接调用AVRGCC编译文件,产生目标代码。不再需要到AVR Studio中进行容易混淆的段地址设置,更加简单方便了,同时减少了出错的可能。</li>
</ol>
<p>这也是现在我推荐的用法。也可以使用手工配置的方法:</p>
<ol>
<li>建立一个新的项目,并将上面的文件复制到新项目所在的文件夹中;</li>
<li>添加bootldr.c、bootldr.h、bootcfg.h三个文件到项目中;</li>
<li>在bootcfg.h中修改配置参数,参数的含义见下面小节;</li>
<li>设置项目的Flash段地址为Bootloader的起始地址,设置时注意地址是按照字(word)计算的。同时还要设置单片机型号等相关参数(如果使用AVR Studio或KamAVR,可以直接在IDE中设置;否则需要自行修改makefile文件);</li>
<li>编译项目,产生最终的目标文件;</li>
</ol>
<p>经过上面的步骤后,你可以使用编程器烧录Bootloader的目标文件到单片机,然后:</p>
<ol>
<li>通过设置相应的加密位和熔丝位来选择Boot区大小和使能Boot Reset向量;</li>
<li>通过串口联机,进行升级测试。</li>
</ol>
<p><a href="#b0" name="b8">▲</a></p>
<h1>主要参数</h1>
<p>下面的参数很重要,请按照用户系统的要求仔细设置:</p>
<table border="1" width="100%" cellspacing="0" bordercolordark="white" bordercolorlight="black">
<tr>
<td width="100" bgcolor="#CCCCCC">参数</td>
<td bgcolor="#CCCCCC">说明</td>
</tr>
<tr>
<td width="100">
<p>BUFFERSIZE</p>
</td>
<td>
<p>串口缓冲区大小,使用超级终端时必须等于128。这个参数应当是单片机页面大小SPM_PAGESIZE的倍数或约数</p>
</td>
</tr>
<tr>
<td width="100">
<p>F_CPU </p>
</td>
<td>
<p>系统时钟频率(Hz)</p>
</td>
</tr>
<tr>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -