2011年7月7日 星期四

USBasp

USBasp 是給 AVR microcontrollers 使用的 USB 燒錄器 (in-circuit programmer)。USBasp 只需要 ATMega8, ATMega48 或 ATMega88 等 MCU 和少量的被動元件,除了電路圖和韌體原始碼外,官網上還提供多種 PCB Layouts 讓使用者下載。USBasp 可以搭配 avrdude 使用,因此可以跟 Arduino IDE 整合,見「整合 USBasp 與 Arduino IDE」一文。

下載

USBasp 可以在底下的網址取得:

http://www.fischl.de/usbasp/

USBasp 驅動程式:

http://www.fischl.de/usbasp/usbasp-windriver.2011-05-28.zip

硬體電路

底下是 USBasp 的參考電路,由於 USB D+ 和 D- 用 3.3V 的電壓,因此在 D+ 和 D- 上使用稽納二極體 (Zener diodes)。你必須確保 D- 準位在 2.5V 與 3.6V 之間。

 image
註: JP3 用來選擇低速燒錄

韌體調整

● bootloaderconfig.h:


定義所用的 D+ 和 D- data lines 腳位以及 Jumper 接腳。必須根據你的硬體調整 USB_CFG_IOPORTNAME, USB_CFG_DMINUS_BIT 和 USB_CFG_DPLUS_BIT。

● Makefile:


定義所用的 MCU 時脈頻率。必須根據你的硬體調整 TARGET 和 F_CPU。

編譯

下指令編譯韌體,你會需要 WinAVR:

$ cd firmware
$ make main.hex

接著把韌體燒錄到板子上,把板子插到電腦 USB port,作業系統會偵到有新的硬體裝置,此時請安裝剛剛下載的 USBasp 驅動程式,然後「裝置管理員」視窗裏就會出現剛剛安裝的裝置 ,如下圖所示:

image_thumb2
▲ 新的裝置: USBasp

使用 USBasp

首先,照著下圖連接 USBasp 與 Target Board:

image
▲ 本圖以 Arduino 示範,你可以用任何 AVR 的板子

現在可以寫個簡單的程式來測試 USBasp。

最簡單的方法是直接用 Arduino 的 Blink 範例程式,這支程式會讓 PB5 (亦即 Arduino 的 pin 13) 上的 LED 閃爍 。

Arduino IDE 預設不會顯示 hex 檔所在的位置,因此在編譯程式的時候,要按著 SHIFT 鍵不放再點 Verify 編譯程式,然後畫面下方的狀態視窗就會顯示 HEX 檔所在的位置:

image 

接著開始進行韌體的燒錄程序,下指令把 Blink.cpp.hex 燒錄到板子上:

$ avrdude -q -c usbasp -p atmega328p -U flash:w:Blink.cpp.hex

操作畫面如下:

image_thumb2[1]

如果一切順利的話,Target Board PB5 (Arduini pin 13) 上的 LED 就會開始閃爍。

延伸閱讀

2 意見:

提到...

請問一下,我發現最新的 Arduino IDE 1.0的Tools->Programmer裡面多了USBasp和Arduino as ISP 的選項。
我在想說是否可以直接採用您在http://coopermaa2nd.blogspot.com/2011/03/arduino-avr-ispin-system-programmer-2.html 發表的麵包板電路接法,直接燒我寫的程式到一個空白的arduino晶片?(因為有已經有一片arduino"開發板",而我想要燒單顆arduino的晶片,所以我想可不可以不要製作USBasp而直接採用我上面所說的方式呢?
另外,我想請問您,
Arduino Sketch 和 bootloader 分別是什麼?
Arduino Sketch代表我寫出來程式嗎?

非常謝謝您!!

Cooper Maa 提到...

沒錯,Arduino 1.0 Tools>Programmer 裏多了 USBasp 選項,其實舊版也可以喔,增加的方法可以參考我這篇:
http://coopermaa2nd.blogspot.com/2011/07/usbasp-arduino-ide.html

Arduino as ISP 則是原本就有的,我這篇正是用麵包板電路接法直接燒空白晶片的教學:http://coopermaa2nd.blogspot.com/2011/03/arduino-avr-ispin-system-programmer-2.html

sketch 其實就是 "程式",我們 Arduino 使用者寫的程式都叫 sketch。bootloader 是預燒在晶片的程式,它的好處讓我們不需要硬體 programmer 就可以上傳 sketch 到板子上。我這篇有簡單說明 bootloader 的概念:
http://coopermaa2nd.blogspot.com/2011/03/arduino-avr-ispin-system-programmer-1.html