2015年1月13日 星期二

Arduino當ISP燒入Sketch code

在開發案子的時候,為了要能夠省電而在電路上做了一個電晶體開關電路,在工作結束後讓Arduino以I/O切斷電晶體開關,讓整個電源電路關閉,也直接讓Arduino斷電。

但是卻意外發現原來Arduino bootloader的boot時間需要3~7秒,這點讓在操作產品時的使用者體驗是非常難以接受的,因此上網找了如何直接將sketch code燒入到Atmega 328。
我的環境架設為:
1. Arduino Nano *1 當ISP
2. 空白的Atmega * 1 當Target
3. mac pro-book retina OX X
4. Arduino IDE 1.0.6


如果有用過一塊Arduino當ISP燒過Arduino bootloader的人,一定知道線該怎麼接,因此我把流程分為兩塊,一將Arduino設定為ISP工具,二燒入sketch code到target。


將Arduino nano設定為ISP programmer
1. 將Arduino Nano與PC連接。
2. 開啟Arduino IDE->file->Example->ArduinoISP。
3. tool->board->Arduino Nano w/ Atmega328。
4. tool->Serial Port->(選擇Arduino Nano的port)。
5. tool->Programmer-> AVR ISP。
6. upload ArduinoISP程式到Arduino Nano板子上。

將sketch code燒入到空白的Atmega328
1. 修改arduino的preferences.txt(路徑為Users/[User Name]/Library/Arduino/preferences.txt)檔中的upload.using=bootload變為upload.using=arduinoisp或是修改hareware/boards.txt(Users/[User name]/Applications/Arduino/Contents/Resources/Java/hardware/arduino/boards.txt)中新增一個borad name並在該board name中加入[board name].upload.using=Arduino as ISP,選擇第二個的好處是不用每次在bootloader與arduinoisp間切換,而是若要直接燒入code的時候選擇你定義的板子。
2. 接線方式為(Programmer -> Target) VDD->VDD, D10->RST, D11->D11, D12->D12, D13->D13, GND->GND
3. tool->board->你定義的board。
4. tool->Serial Port->(選擇Arduino Nano的port)。
5. tool->Programmer-> Arduino as ISP。
6. upload,就可接將code燒入到你的target中。

後續,我用mac燒入的時候遇到avrdude: stk500_getsync(): not in sync: resp=0x15的錯誤訊息,這個錯誤訊息的改善方式是要在Arduino ISP端的Reset與GND間加上一個10uF電容即可改善。
另外若是在燒入時出現verification的問題,則需重新連接Arduino與PC,並且重新開啟Arduino IDE即可。

當sketch code直接燒入atmega 328後,可以省掉5~7秒的等待時間,並且可以多出約2kbyte的rom。


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