用 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,可省略。
查詢適當的 baud rate
前面的範例使用 baud rate 是 57600 bps,其實並不是所有 Arduino 都用 57600。那麼要怎麼知道你的 Arduino 板子所用的 baud rate 是多少呢?答案是到 "arduino-00xx\hardware\arduino\boards.txt" 這個檔案裏查詢。
我用的板子是 Arduino Duemilanove,在 boards.txt 裏有這麼一筆記錄:
1 | atmega328.name=Arduino Duemilanove or Nano w/ ATmega328 |
2 |
3 | atmega328.upload.protocol=stk500 |
4 | atmega328.upload.maximum_size=30720 |
5 | atmega328.upload.speed=57600 |
從這裏我就可以知道 Duemilanove 所用的燒錄速度是 57600 bps。其它 Arduino 板子的燒錄速度也都可以在 boards.txt 裏查出,例如 Diecimila 用的是 19200, Mega (Atmega1280) 用的是 57600,而較新款的 UNO 和 Mega 2560 則使用 115200。
=======================================================================
所以也好奇的也來試一下,這裡我大多亦採用轉載文章內容,以下僅是我測試的方式
步驟一:先將一個ARDUINO IDE放到您的根目錄下(使用免安裝的IDE)
我是放在C:下,注意官方下載回來解壓縮後可能會多一層資料夾哦!
步驟二:設定PATH環境,我由「系統」「進階系統設定」「環境變數」
增加了這三個路徑
主要是為了在不指定路徑下可以直接執行avrdude
如果你早已經開啟終端機的話,請開掉重新開啟終端機再輸入avrdude,就能執行,如下
步驟4:在終端機上,先到test資料夾中,下以下的命令 ( 使用UNO板子)
avrdude -q -c arduino -P com9 -b 115200 -p atmega328p -U flash:w:Blink.ino.hex:i
在此我修改了一些和參網址上不一樣的地方
avrdude -q -c stk500v1 -P com4 -b 57600 -p atmega328p -U flash:w:Blink.cpp.hex:i
stk500v1改arduino (查詢了board.txt)
com4改com9 (到裝置管理員中找)
57600改115200 (查詢board.ext)
Blink.cpp.hex改Blink.ino.hex (實際的HEX檔名)
接下來我們來測試atmega2560看看
下了以下命令
avrdude -q -c wiring -P com18 -b 115200 -p atmega2560 -U flash:w:Blink2560.hex:i
出現了failed,燒錄失敗,但是在上面有NOTE提示 -D option
-D選項:停用自動清除flash memory,我也不是很明白
就加上這一項
avrdude -q -c wiring -P com18 -b 115200 -p atmega2560 -U flash:w:Blink2560.hex:i -D
大功告成…
沒有留言:
張貼留言