?? 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; }
--></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.Jun</font></p>
<ul>
<li><a href="#b1">基本介紹</a></li>
<li><a href="#b2">主要特點</a></li>
<li><a href="#b3">程序版本</a></li>
<li><a href="#b5">開發(fā)環(huán)境</a></li>
<li><a href="#b6">項目文件</a></li>
<li><a href="#b7">使用方法</a></li>
<li><a href="#b8">主要參數</a></li>
<li><a href="#b9">已測試的型號</a></li>
<li><a href="#b10">常見問題</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>這個程序的主要目的是為了提供一個具有通用性的 AVR Bootloader,不同型號的AVR單片機只需要修改一下幾個簡單的配置參數就可以直接使用了,不需要再修改主程序。因為現(xiàn)在網上流傳的很多 Bootloader程序都是針對某個或幾個特定型號的,在換用其它型號后,需要對程序進行較多的修改;而且很多Bootloader程序雖然實現(xiàn)了基本功能,但是存在著一些缺陷或隱患,或者使用起來不夠方便,所以我寫了這個程序。它是在網上流傳的馬潮老師的ATmega128 Bootloader程序的基礎上,結合了我以前在PIC18單片機中使用Bootloader的一點經驗,以及學習自AVR USB中一些使用宏定義的技巧,再經過多次優(yōu)化和反復測試后得出的。 </p>
<p>這個通用的Bootloader可以支持大部分具有自編程功能、帶有Boot區(qū)和UART串口的AVR單片機(主要是Mega系列)。如果是多串口的單片機,可以任意選擇使用其中的一個串口。程序支持RS232/RS485/RS422方式,如果程序稍加修改,也應當可以很容易的支持USI、SPI、I2C等接口。</p>
<p>整個Bootloader最大占用不到1K Word的空間。在最小情況下,占用的空間不到256 Word(具體占用空間的大小與單片機的型號、配置的參數、功能裁剪的多少以及程序的優(yōu)化等級有關)。</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>代碼高度優(yōu)化,占用空間小</li>
<li>方便的功能裁剪,適應不同的要求</li>
<li>支持看門狗</li>
<li>支持使用LED指示升級狀態(tài)</li>
<li>支持使用超級終端做為上位機下載軟件</li>
<li>支持Flash寫入校驗</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錯誤的問題<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程序校驗的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>第一版,實現(xiàn)全部基本功能,并擴展了XModem協(xié)議以適合不同的應用(可變緩沖區(qū)長度和多種校驗方式)。</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>本項目的開發(fā)環(huán)境是:WinAVR + AVR Studio</p>
<p>WinAVR版本: 20071221<br>
AVR Studio版本: 4.13.571</p>
<p>本項目通過了WinAVR的多個版本的測試,但是早期的版本在編譯某些型號的單片機中存在一些Bug。</p>
<p>本項目中所有文件都以AVR Studio作為IDE進行調試,可以使用JTAG mk-II仿真器或其他仿真工具進行調試。使用AVR Studio的好處是可以不用手工修改makefile文件,不容易出錯,降低了初學者上手的難度。當然也可以使用其他工具軟件,如KamAVR、AtmanAVR、PN等代替AVR Studio進行開發(fā)。</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>
aes.c aes解密子程序<br>
pc1crypt.c PC1解密子程序<br>
test.c 串口通信的測試程序<br>
testcfg.h test.c的配置文件<br>
test.aps test的項目文件<br>
readme.htm 本說明文件</p>
<p>因為很多人都有AVR Butterfly試驗板,所以這里的項目文件都以AVR Butterfly為例。如果使用了其它的硬件環(huán)境,只需要簡單的修改<a href="#b8">配置參數</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>軟件進行自動化的參數配置和編譯:</p>
<ol>
<li>建立一個新的項目,并將上面的文件復制到新項目所在的文件夾中;</li>
<li>運行AVRUBD軟件,選擇自動代碼功能;</li>
<li>選擇時鐘、波特率、看門狗等參數時;</li>
<li>按下 <input type="button" name="formbutton1" value="創(chuàng)建"> 鍵,選擇保存的位置后,將自動產生一個對應參數配置文件bootcfg.h和對應的編譯批處理文件avrub.bat;</li>
<li>運行批處理文件將直接調用AVRGCC編譯文件,產生目標代碼。不再需要到AVR Studio中進行容易混淆的段地址設置,更加簡單方便了,同時減少了出錯的可能。</li>
</ol>
<p>這也是現(xiàn)在我推薦的用法。也可以使用手工配置的方法:</p>
<ol>
<li>建立一個新的項目,并將上面的文件復制到新項目所在的文件夾中;</li>
<li>添加bootldr.c、bootldr.h、bootcfg.h三個文件到項目中;</li>
<li>在bootcfg.h中修改配置參數,參數的含義見下面小節(jié);</li>
<li>設置項目的Flash段地址為Bootloader的起始地址,設置時注意地址是按照字(word)計算的。同時還要設置單片機型號等相關參數(如果使用AVR Studio或KamAVR,可以直接在IDE中設置;否則需要自行修改makefile文件);</li>
<li>編譯項目,產生最終的目標文件;</li>
</ol>
<p>經過上面的步驟后,你可以使用編程器燒錄Bootloader的目標文件到單片機,然后:</p>
<ol>
<li>通過設置相應的加密位和熔絲位來選擇Boot區(qū)大小和使能Boot Reset向量;</li>
<li>通過串口聯(lián)機,進行升級測試。</li>
</ol>
<p><a href="#b0" name="b8">▲</a></p>
<h1>主要參數</h1>
<p>下面的參數很重要,請按照用戶系統(tǒng)的要求仔細設置:</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>串口緩沖區(qū)大小,使用超級終端時必須等于128。這個參數應當是單片機頁面大小SPM_PAGESIZE的倍數或約數</p>
</td>
</tr>
<tr>
<td width="100">
<p>F_CPU </p>
</td>
<td>
<p>系統(tǒng)時鐘頻率(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>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -