?? readme.htm
字號(hào):
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=gb2312">
<title>使用說(shuō)明</title>
<meta name="author" content="邵子揚(yáng)">
<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; }
--></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 使用說(shuō)明 ☆<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.Jun</font></p>
<ul>
<li><a href="#b1">基本介紹</a></li>
<li><a href="#b2">主要特點(diǎn)</a></li>
<li><a href="#b3">程序版本</a></li>
<li><a href="#b5">開發(fā)環(huán)境</a></li>
<li><a href="#b6">項(xiàng)目文件</a></li>
<li><a href="#b7">使用方法</a></li>
<li><a href="#b8">主要參數(shù)</a></li>
<li><a href="#b9">已測(cè)試的型號(hào)</a></li>
<li><a href="#b10">常見(jiàn)問(wèn)題</a></li>
<li><a href="readme.htm#b4">特別感謝</a></li>
<li><a href="#b11">使用許可</a></li>
<li><a href="#b12">聯(lián)系方式</a></li>
</ul>
<p><a href="readme.htm#b0" name="b1">▲</a></p>
<h1>基本介紹</h1>
<p>這個(gè)程序的主要目的是為了提供一個(gè)具有通用性的 AVR Bootloader,不同型號(hào)的AVR單片機(jī)只需要修改一下幾個(gè)簡(jiǎn)單的配置參數(shù)就可以直接使用了,不需要再修改主程序。因?yàn)楝F(xiàn)在網(wǎng)上流傳的很多 Bootloader程序都是針對(duì)某個(gè)或幾個(gè)特定型號(hào)的,在換用其它型號(hào)后,需要對(duì)程序進(jìn)行較多的修改;而且很多Bootloader程序雖然實(shí)現(xiàn)了基本功能,但是存在著一些缺陷或隱患,或者使用起來(lái)不夠方便,所以我寫了這個(gè)程序。它是在網(wǎng)上流傳的馬潮老師的ATmega128 Bootloader程序的基礎(chǔ)上,結(jié)合了我以前在PIC18單片機(jī)中使用Bootloader的一點(diǎn)經(jīng)驗(yàn),以及學(xué)習(xí)自AVR USB中一些使用宏定義的技巧,再經(jīng)過(guò)多次優(yōu)化和反復(fù)測(cè)試后得出的。 </p>
<p>這個(gè)通用的Bootloader可以支持大部分具有自編程功能、帶有Boot區(qū)和UART串口的AVR單片機(jī)(主要是Mega系列)。如果是多串口的單片機(jī),可以任意選擇使用其中的一個(gè)串口。程序支持RS232/RS485/RS422方式,如果程序稍加修改,也應(yīng)當(dāng)可以很容易的支持USI、SPI、I2C等接口。</p>
<p>整個(gè)Bootloader最大占用不到1K Word的空間。在最小情況下,占用的空間不到256 Word(具體占用空間的大小與單片機(jī)的型號(hào)、配置的參數(shù)、功能裁剪的多少以及程序的優(yōu)化等級(jí)有關(guān))。</p>
<p> </p>
<p><a href="#b0" name="b2">▲</a></p>
<h1>主要特點(diǎn)</h1>
<ul>
<li>支持多種型號(hào)的AVR單片機(jī)</li>
<li>支持多串口的AVR單片機(jī)</li>
<li>支持RS232/RS485/RS422模式</li>
<li>支持多種通信波特率和時(shí)鐘頻率</li>
<li>自動(dòng)計(jì)算波特率誤差,如果波特率誤差>2%,將給出錯(cuò)誤提示</li>
<li>完全C語(yǔ)言編寫,容易修改</li>
<li>代碼高度優(yōu)化,占用空間小</li>
<li>方便的功能裁剪,適應(yīng)不同的要求</li>
<li>支持看門狗</li>
<li>支持使用LED指示升級(jí)狀態(tài)</li>
<li>支持使用超級(jí)終端做為上位機(jī)下載軟件</li>
<li>支持Flash寫入校驗(yàn)</li>
<li>可以自定義用戶程序區(qū)大小</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.2</td>
<td width="100" valign="top">2008.Jun</td>
<td valign="top">增加了128/256位AES加密解密算法<br>
修正了看門狗初始化的宏定義筆誤<br>
修正了LED初始化在某些情況下造成RS485錯(cuò)誤的問(wèn)題<br>
優(yōu)化了部分代碼,減少了代碼大小<br>
</td>
</tr>
<tr>
<td width="50" valign="top">v4.0</td>
<td width="100" valign="top">2008.Apr</td>
<td valign="top">增加了128/256位PC1加密解密算法<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程序校驗(yàn)的Bug<br>
在AVRUBD的自動(dòng)代碼中自動(dòng)產(chǎn)生 avrub.bat,不再需要到AVR Studio中設(shè)置段偏移量,減少了出錯(cuò)幾率,也更加容易使用<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>修正了初始化串口時(shí)URSEL位的問(wèn)題,造成部分型號(hào)的單片機(jī)串口初始化錯(cuò)誤。<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>根據(jù)Douglas Hammond的建議,調(diào)整了串口初始化中寄存器的順序(據(jù)說(shuō)在M32上存在初始化的問(wèn)題,因?yàn)槲覜](méi)有M32所以沒(méi)有測(cè)試過(guò),但是有其他網(wǎng)友以前報(bào)告沒(méi)有問(wèn)題)<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中一個(gè)錯(cuò)誤。<br>修改串口號(hào)的設(shè)定<br>通過(guò)了AVR GCC 4.1.2(WinAVR20070525)版本的測(cè)試<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寫入校驗(yàn)功能,極大的提高了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>修正了串口寄存器計(jì)算中的一個(gè)隱含錯(cuò)誤(這個(gè)錯(cuò)誤很常見(jiàn),包括在很多書中和網(wǎng)上的程序中都能見(jiàn)到),造成部分波特率的計(jì)算會(huì)出錯(cuò)。<br>
同時(shí)修正了波特率誤差判斷。<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>第一版,實(shí)現(xiàn)全部基本功能,并擴(kuò)展了XModem協(xié)議以適合不同的應(yīng)用(可變緩沖區(qū)長(zhǎng)度和多種校驗(yàn)方式)。</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>開發(fā)環(huán)境</h1>
<p>本項(xiàng)目的開發(fā)環(huán)境是:WinAVR + AVR Studio</p>
<p>WinAVR版本: 20071221<br>
AVR Studio版本: 4.13.571</p>
<p>本項(xiàng)目通過(guò)了WinAVR的多個(gè)版本的測(cè)試,但是早期的版本在編譯某些型號(hào)的單片機(jī)中存在一些Bug。</p>
<p>本項(xiàng)目中所有文件都以AVR Studio作為IDE進(jìn)行調(diào)試,可以使用JTAG mk-II仿真器或其他仿真工具進(jìn)行調(diào)試。使用AVR Studio的好處是可以不用手工修改makefile文件,不容易出錯(cuò),降低了初學(xué)者上手的難度。當(dāng)然也可以使用其他工具軟件,如KamAVR、AtmanAVR、PN等代替AVR Studio進(jìn)行開發(fā)。</p>
<p><a href="#b0" name="b6">▲</a></p>
<h1>項(xiàng)目文件</h1>
<p>整個(gè)Bootloader主要由以下幾個(gè)文件組成:</p>
<p>bootldr.c 主程序<br>
bootldr.h 主程序的頭文件<br>
bootcfg.h 主程序的用戶配置文件<br>
bootldr.aps 主程序的AVR Studio的項(xiàng)目文件<br>
aes.c aes解密子程序<br>
pc1crypt.c PC1解密子程序<br>
test.c 串口通信的測(cè)試程序<br>
testcfg.h test.c的配置文件<br>
test.aps test的項(xiàng)目文件<br>
readme.htm 本說(shuō)明文件</p>
<p>因?yàn)楹芏嗳硕加蠥VR Butterfly試驗(yàn)板,所以這里的項(xiàng)目文件都以AVR Butterfly為例。如果使用了其它的硬件環(huán)境,只需要簡(jiǎn)單的修改<a href="#b8">配置參數(shù)</a>。</p>
<p><a href="#b0" name="b7">▲</a></p>
<h1>使用方法</h1>
<p>現(xiàn)在你可以使用<a href="http://avrubd.googlepages.com" target="_blank">AVRUBD</a>軟件進(jìn)行自動(dòng)化的參數(shù)配置和編譯:</p>
<ol>
<li>建立一個(gè)新的項(xiàng)目,并將上面的文件復(fù)制到新項(xiàng)目所在的文件夾中;</li>
<li>運(yùn)行AVRUBD軟件,選擇自動(dòng)代碼功能;</li>
<li>選擇時(shí)鐘、波特率、看門狗等參數(shù)時(shí);</li>
<li>按下 <input type="button" name="formbutton1" value="創(chuàng)建"> 鍵,選擇保存的位置后,將自動(dòng)產(chǎn)生一個(gè)對(duì)應(yīng)參數(shù)配置文件bootcfg.h和對(duì)應(yīng)的編譯批處理文件avrub.bat;</li>
<li>運(yùn)行批處理文件將直接調(diào)用AVRGCC編譯文件,產(chǎn)生目標(biāo)代碼。不再需要到AVR Studio中進(jìn)行容易混淆的段地址設(shè)置,更加簡(jiǎn)單方便了,同時(shí)減少了出錯(cuò)的可能。</li>
</ol>
<p>這也是現(xiàn)在我推薦的用法。也可以使用手工配置的方法:</p>
<ol>
<li>建立一個(gè)新的項(xiàng)目,并將上面的文件復(fù)制到新項(xiàng)目所在的文件夾中;</li>
<li>添加bootldr.c、bootldr.h、bootcfg.h三個(gè)文件到項(xiàng)目中;</li>
<li>在bootcfg.h中修改配置參數(shù),參數(shù)的含義見(jiàn)下面小節(jié);</li>
<li>設(shè)置項(xiàng)目的Flash段地址為Bootloader的起始地址,設(shè)置時(shí)注意地址是按照字(word)計(jì)算的。同時(shí)還要設(shè)置單片機(jī)型號(hào)等相關(guān)參數(shù)(如果使用AVR Studio或KamAVR,可以直接在IDE中設(shè)置;否則需要自行修改makefile文件);</li>
<li>編譯項(xiàng)目,產(chǎn)生最終的目標(biāo)文件;</li>
</ol>
<p>經(jīng)過(guò)上面的步驟后,你可以使用編程器燒錄Bootloader的目標(biāo)文件到單片機(jī),然后:</p>
<ol>
<li>通過(guò)設(shè)置相應(yīng)的加密位和熔絲位來(lái)選擇Boot區(qū)大小和使能Boot Reset向量;</li>
<li>通過(guò)串口聯(lián)機(jī),進(jìn)行升級(jí)測(cè)試。</li>
</ol>
<p><a href="#b0" name="b8">▲</a></p>
<h1>主要參數(shù)</h1>
<p>下面的參數(shù)很重要,請(qǐng)按照用戶系統(tǒng)的要求仔細(xì)設(shè)置:</p>
<table border="1" width="100%" cellspacing="0" bordercolordark="white" bordercolorlight="black">
<tr>
<td width="100" bgcolor="#CCCCCC">參數(shù)</td>
<td bgcolor="#CCCCCC">說(shuō)明</td>
</tr>
<tr>
<td width="100">
<p>BUFFERSIZE</p>
</td>
<td>
<p>串口緩沖區(qū)大小,使用超級(jí)終端時(shí)必須等于128。這個(gè)參數(shù)應(yīng)當(dāng)是單片機(jī)頁(yè)面大小SPM_PAGESIZE的倍數(shù)或約數(shù)</p>
</td>
</tr>
<tr>
<td width="100">
<p>F_CPU </p>
</td>
<td>
<p>系統(tǒng)時(shí)鐘頻率(Hz)</p>
</td>
</tr>
<tr>
<td width="100">
<p>BAUDRATE</p>
</td>
<td>
<p>串口通信使用的波特率(bps)</p>
</td>
</tr>
<tr>
<td width="100">
<p>LEVELMODE</p>
</td>
<td>
<p>Bootloader觸發(fā)模式(0=串口 1=電平)</p>
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -