2011年9月14日 星期三

BootloadHID

BootloadHID 是給 AVR microcontrollers 使用的 USB bootloader,它可以用在支援 2 KB 以上 bootloader section 的所有 AVRs 上,例如 ATMega8。BootloadHID 會燒錄到 Flash 的上層記憶體 (upper memory),並且會在 reset 的時候取得 MCU 的控制權。假如硬體狀況有符合 (這個狀況可以設定,例如利用 jumper),bootloader 會等待 USB bus 上的資料,然後把應用程式自我燒錄到 Flash 裏,當硬體狀況解除時 (例如拿掉 jumper),bootloader 就會把控制權交給應用程式。

BootloadHID 用的是 HID device class,除了這點以外,BootloadHID 跟 Thomas Fischl 的 avrusbboot 很像,由於大部份作業系統都有內建 HID 驅動程式,所以跑 BootloadHID 不需要安裝驅動程式。

下載

BootloadHID 可以在底下的網址取得:

http://www.obdev.at/products/vusb/bootloadhid.html

硬體電路

基本上,BootloadHID 可以用在所有 V-USB 支援的電路上 (MCU 的 bootloader section 至少要有 2 KB)。底下是一個參考電路,由於 USB D+ 和 D- 用 3.3V 的電壓,因此在 D+ 和 D- 上使用稽納二極體 (Zener diodes)。你必須確保 D- 準位在 2.5V 與 3.6V 之間。

image_thumb135
註: BootloadHID 所用的 Jumper 預設是 PD3 接腳,這部份圖上沒有畫出來

韌體調整

● bootloaderconfig.h:


定義所用的 D+ 和 D- data lines 腳位以及 Jumper 接腳。必須根據你的硬體調整 USB_CFG_IOPORTNAME, USB_CFG_DMINUS_BIT 和 USB_CFG_DPLUS_BIT 以及 Jumper 接腳,Jumper 接腳預設是 PD3。

● Makefile:


定義所用的 MCU, bootloader 起始位址以及時脈頻率。必須根據你的硬體調整 DEVICE, BOOTLOADER_ADDRESS 和 F_CPU。

補充說明:

● 關於 BOOTLOADER_ADDRESS: BOOTLOADER_ADDRESS 用來設定 bootloader 的起始位址。BootloadHID 需要 2 KB 的 flash 空間,以 ATmega8 為例,mega8 有 8 KB (0x2000) 的 program flash,所以 bootloader 的起始位址就是 0x2000 – 0x800 = 0x1800,mega168 有 16 KB (0x4000) ,起始位址就是 0x4000 – 0x800 = 0x3800,而 mega328 有 32 KB (0x8000),所以起始位址就是 0x8000 – 0x800 = 0x7800。

● 另外,為了讓 MCU 在 reset 時跳到 bootloader,必須調整 Fuse 的設定,啟用 BOOTRTS 選項 (=0),並把 bootloader size 設定 2 KB (1024 words)。

編譯

下指令編譯韌體,你會需要 WinAVR:

$ cd firmware
$ make

接著把韌體燒錄到板子上,讓裝置重新上電 (記得設定 jumper),然後「裝置管理員」視窗裏就會出現剛剛安裝的裝置:

image

使用 BootloadHID

現在可以寫個簡單的程式來測試 BootloadHID。

最簡單的方法是直接用 Arduino 的 Blink 範例程式,這支程式會讓 PB5 (亦即 Arduino 的 pin 13) 上的 LED 閃爍 。

Arduino IDE 預設不會顯示 hex 檔所在的位置,因此在編譯程式的時候,要按著 SHIFT 鍵不放再點 Verify 編譯程式,然後畫面下方的狀態視窗就會顯示 HEX 檔所在的位置:

image 

接著開始進行韌體的燒錄程序。

首先,先設定 jumper (預設是在 PD3 接腳),並且 reset AVR。

然後下指令把 Blink.cpp.hex 燒錄到板子上:

$ cd commandline
$ bootloadHID –r Blink.cpp.hex

操作畫面如下:

image ▲ –r 選項是告訴 bootloadHID 在燒錄完成後直接進入應用程式 

如果一切順利的話,PB5 (Arduini pin 13) 上的 LED 就會開始閃爍。

另外,也有 GUI 介面的上傳程式可以用,也就是 HIDBootFlash 這支程式:

image
▲ HIDBootFlash 的操作介面

HIDBootFlash 的操作辦法很簡單。首先,點「Find Device」,假如有找到裝置,視窗下方的狀態窗格會顯示 "Device detected" 之類的訊息,然後畫面中央上方會出現「Open .hex File」的按鈕,如下圖:

image

按下「Open .hex File」並選擇好 hex 檔後,視窗右上方會出現「Flash Device」的按鈕,如下圖:

image 

接著按下「Flash Device」,HIDBootFlash 就會把韌體燒錄到板子上,底下為操作示範畫面:

image 
▲ 將「Reboot AVR」選項打勾,在燒錄完韌體後,MCU 會自動進入應用程式

延伸閱讀

0 意見: