2014年5月22日 星期四

燒錄Hex code到Arduino

最近考慮到要怎麼用Arduino來幫廠商開發一個專案,但又不想將source code分享給廠商,所以就上網找了一下如何用直接燒錄Hex code到Arduino上,上網一查還蠻多人有這樣的需求,也有前輩分享了他的使用經驗,所以就將網頁轉帖過來,做一個保留以便自己日後可以回憶。
底下有幾個相關的連結。


[轉]

用 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 裏有這麼一筆記錄:
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。
用其它 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
or
    avrdude -q -c stk500v1 -P com4 -b 57600 -p atmega328p -U flash:w:Blink.cpp.hex:i -C /Application/Arduino.app/Contents/Resources/Java/hardware/tools/avr/etc/avrdude.conf
 
$(SKETCHHEX)        $(AVRDUDE) -c $(UPLOAD_PROTOCOL) -p $(MCU) -P $(PORT) -b$(UPLOAD_SPEED) -U flash:w:$(SKETCHHEX):i -C /Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/etc/avrdude.conf
注意!這行指令跟最前面介紹的是一樣的,不過 Arduino ISP 硬體接法不一樣,而且結果也不同。這部份請參考「Arduino 當成一個 AVR ISP (In-System Programmer) 使用 (3)」的說明。
另外,用 ISP 直接把 Arduino Sketch 燒錄到板子上,這種方式沒有用到 bootloader,這讓你得以使用 ATmega 晶片全部的程式空間 (program space)。

原網址如下:
http://coopermaa2nd.blogspot.tw/2011/06/avrdude-arduino-sketch.html

[轉]
Arduino 也可以產生 hex 檔 (File > Preferences > Show verbose output during "compilation")

可以修改 preferenecs.txt,加上這麼一行:

build.path=C:\ArduinoHex


如此一來,產生的 HEX 檔就會放放到 C:\ArduinoHex 資料夾
記得要自己先建個 C:\ArduinoHex 資料夾,不然 Arduino IDE 會跟你抱怨找不到資料夾


see:
http://coopermaa2nd.blogspot.tw/2011/06/arduino-ide-tweak.html
原網址如下:
http://www.robofun.net/forum/viewthread.php?tid=7770

[轉]
鉴于前两天没有找到关于烧录HEX文件给Arduino程序的帖子,于是自己找了一个。

至于大家要问为什么需要直接给Arduino上传hex,其实很简单,就是为了保护源代码。
设想你用Arduino给别人设计了一套装置,别人想照着你的硬件批量生产,你不想把源代码给人家,可是又不能替别人一块板子一块板子的写程序,那只好把HEX文件送过去了,让他们自己连上USB写hex吧~~


转自:http://www.dustless.cn/?p=184



当同时要往100块板子置入程序时时候,你会发现arduion IDE (目前我用0022版本)开发环境提供的upload就显得并不方便了。这个情况,越来越感觉不方便的时候,我开始找GUI界面的第三方上传程序工具。这里找到一个,非常好用。不敢独自享用,分享给大家了。软件下载地址:http://www.ngcoders.com/download ... ader-and-programmer

9b60df5c4ff734cd2d515a55acaf125120110921022833.jpg 


要说明的是:仅支持atmega m8, m168, m328p and m128
软件下载安装好之后,需要做一件事情:将arduino-XXXX\hardware\tools\avr\etc\avrdude.conf替换掉这个工具软件下的同名文件即可。
另外,arduion编译好的hex文件在以下路径:(WIN7系统)用户名-AppData-Local-Temp中buildXXXXXXX的某个文件夹(搜索一下最新的文件夹)。

原網址如下:
http://www.geek-workshop.com/thread-8134-1-1.html

沒有留言:

張貼留言