PIC BOOTLOADER

壹、BOOTLOADER

BOOTLOADER 的用意是方便程式的燒寫。當程式經由編譯器編譯完成後會產生 HEX FILE。一般的做法是用ICD2、ICD3或REAL ICE 燒寫程式碼到PIC裡面。然而我們可能會遇到沒有ICE可以用的時機,或有ICE但比較麻煩,因為還要安裝MPLAB的IDE環境。如果有 BOOTLAODER 的話,只需要一條RS232的線和一個傳送HEX的軟體程式就可以進行程式的燒寫了,這樣豈不方便許多。再者,當產品在客戶手中要更新韌體時,通常是沒有ICE隨身伺候的,這時候BOOTLOADER就變得很重要。所以學好 BOOTLOADER 對於產品研發、量產,以及後續服務上是很有幫助的。

BOOTLOAD的程式記憶體配置如下圖:

pic18f87j10單版

0~0x00fff 是 BOOLOADER 的區域範圍。
0x01000~0x1fc00 是 PROGRAM CODE AREA 的區域範圍。
0x1fc00~0x1ffff 是 CONFIGURATION BITS 的區域範圍。


貳、BOOTLOADER 的應用

首先,用 ICE 把 BOOTLOADER 燒寫到 PIC 的 FLASH 上。 BOOTLOADER 是每次都一定會執行的程式,只是不會進入燒寫程序,而是直接執行後面的應用程式。
我寫了一隻 BOOTLOADER,約 2 K ,可以吃 HEX FILE,並寫入 BOOTLOADER 後面的 PROGRAM CODE AREA 。

HEX FILE 的範例如下:
以第一行為例,
每一行的開頭一定是" : " (colon) 。
接下來是BYTE COUNT[04],
然後是ADDRESS[1000],
然後是RECORD TYPE[00](CODE TYEPE),
然後是DATA[14EF08F0],
然後是CHECKSUM[F1]。
關於HEX FILE的詳細說明請到wiki百科全書找"INTEL HEX"的說明。

pic18f87j10單版

接著,使用 myconsole.exe 把電腦上的 HEX FILE 傳送到 PIC。過程如下圖所示:

pic18f87j10單版

在 myconsole.exe 中,使用 wi 指令傳送 HEX FILE。wi 是 WRITE IMAGE 的縮寫。 wi 指令會打開 mypic.hex,檢查 HEX FILE 的格式和內容是否正確。通過 HEX FILE 的檢查後,wi 會等待從 PIC 來的信號 " ! "。之後 wi 就會傳送 " pic "三字給 PIC,以便進入燒寫模式。等 PIC 把 FLASH 清除後,會傳 " y " 給 wi,然後就正式進入HEX FILE的傳送程序了。每傳一行HEX FILE 字串,PIC 就會回一個 " c ",好讓 wi 可以繼續傳送下一行。如果有錯誤發生時,PIC 會回傳 " e " 給 wi,並中斷傳送程序。HEX FILE傳送完成後,BOOTLOADER 會自行跳到 PROGRAM CODE AREA 執行剛剛燒寫完成的程式。


參、BOOTLOADER的 程式設計

BOOTLOADER 的程式碼編輯畫面:

pic18f87j10單版

基本上,BOOTLOADER 的程式碼不大。只用到 GPIO 和 UART1 的功能,我把處理 BOOTLOADER 分兩段處理,一段負責接收並檢查 HEX STRING,一段負責處理HEX STRING的內容。處理完後,就回給 HOST 一個信號 " c "。對 BOOTLOADER 來說,HEX FILE 就是一行一行的HEX STRING,只要按部就班的處理好每一段的 HEX STRING 就可以了。

PIC18F87J10 的程式碼部份,在下一個網頁上。