2011年6月16日 星期四

用 avrdude 燒錄 Arduino Sketch

這篇說明如何用 avrdude 燒錄 Arduino Sketch,以下指令的方式燒錄韌體。

用 Arduino IDE 就可以燒錄韌體了,而且很方便,只要按個 upload 鍵就行了,為什麼還要學下指令的方式燒錄韌體呢?理由很簡單,其實 Arduino IDE 也是透過 avrdude 進行韌體燒錄的工作,下指令可以讓我們知道更多技術細節。

設定 PATH 環境變數

首先,為了使用 avrdude,你必須先把底下幾個路徑加到 PATH 環境變數裏:

C:\arduino-00xx\hardware\tools\avr\bin;
C:\arduino-00xx\hardware\tools\avr\utils\bin;
C:\arduino-00xx\hardware\tools\avr\etc

其中,arduino-00xx 是 Arduino IDE 的版本號碼,例如 arduino-0021。

燒錄 Arduino Sketch

以 Blink 為例,當你下底下這行指令時,avrdude 會把 Blink.cpp.hex 燒錄到 Arduino 板子上:

avrdude -q -c stk500v1 -P com4 -b 57600 -p atmega328p -U flash:w:Blink.cpp.hex:i

這行指令在做什麼呢?

●  -q

省略燒錄訊息。如果你想看燒錄過程中的資訊,可以把 -q 換成 -v 選項。

–c stk500v1

使用 stk500v1 協定燒錄程式。Arduino 大部份 bootloader 用的都是講 stk500v1 的協定。

–P com4 –b 57600

使用 COM4 並且以 57600 bps 的 baud rate 速率。如果你的 Serial port 不是 COM4,請適當調整。關於 baud rate 的設定,稍後會補充說明。

–p atmega328p

使用 atmega328p 晶片。你必須知道你 Arduino 板子所用的 AVR 晶片為何。

–U flash:w:Blink.cpp.hex:i

把 Blink.cpp.hex 寫到 Flash 中。最後的小寫 i 代表 intel hex format,可省略。

要怎麼取得 Arduino IDE 產生的 HEX 檔呢?這部份請參考「Arduino IDE Tweak (開發環境調校)」或「Arduino 產生的 HEX 檔」。

底下是實際操作畫面:

image
▲ Blink.cpp.hex 上傳到 Arduino 板子後,pin 13 上的 LED 就會開始閃爍

查詢適當的 baud rate 

前面的範例使用 baud rate 是 57600 bps,其實並不是所有 Arduino 都用 57600。那麼要怎麼知道你的 Arduino 板子所用的 baud rate 是多少呢?答案是到 "arduino-00xx\hardware\arduino\boards.txt" 這個檔案裏查詢。

我用的板子是 Arduino Duemilanove,在 boards.txt 裏有這麼一筆記錄:

從這裏我就可以知道 Duemilanove 所用的燒錄速度是 57600 bps。其它 Arduino 板子的燒錄速度也都可以在 boards.txt 裏查出,例如 Diecimila 用的是 19200, Mega (Atmega1280) 用的是 57600,而較新款的 UNO 和 Mega 2560 則使用 115200。

用其它 ISP 燒錄韌體

除了透過 Arduino 的 bootloader 燒錄的方法外,avrdude 也支援其它 ISP (In System Programmer) 燒錄器,支援的種類很多,例如 AVR Dragon, USBTiny, avrispmkii 以及 arduinoisp 等。

以走 USB 介面的 AVR dragon 為例,燒錄 Flash 的指令是:

avrdude -c dragon_isp -P usb -p atmega328p -U flash:w:Blink.cpp.hex

如果你把 Arduino 當成 ISP 用,燒錄的指令則是:

avrdude -q -c stk500v1 -P com4 -b 57600 -p atmega328p -U flash:w:Blink.cpp.hex:i

注意!這行指令跟最前面介紹的是一樣的,不過 Arduino ISP 硬體接法不一樣,而且結果也不同。這部份請參考「Arduino 當成一個 AVR ISP (In-System Programmer) 使用 (3)」的說明。

另外,用 ISP 直接把 Arduino Sketch 燒錄到板子上,這種方式沒有用到 bootloader,這讓你得以使用 ATmega 晶片全部的程式空間 (program space)。

延伸閱讀

0 意見: