2017年2月12日 星期日

用 avrdude 燒錄 Arduino Sketch (實作在UNO上及測試在2560)

在網路上看見了一篇文章
用 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 裏有這麼一筆記錄:
1atmega328.name=Arduino Duemilanove or Nano w/ ATmega328
2
3atmega328.upload.protocol=stk500
4atmega328.upload.maximum_size=30720
5atmega328.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,就能執行,如下

步驟三:用ARDUINO IDE編釋一個簡單的範例:如Blink。然後再把他編釋好的HEX檔抓出來

將這個檔案複制到,等一下你在終端機這裡要下命令的位置或路徑上,示範時我是放在C:/test的資料夾裡

步驟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


大功告成…


沒有留言:

張貼留言