V-USB を AtmelStudio 6 でビルドする
V-USB を使った project を AtmelStudio 6 でビルドしようとしたが、、、うまくいかず。。
結局、V-USB 付属の Makefile を使ってしかビルドできなかったが、一応メモ。
以下、付属のサンプルの hid-data をまるごと持ってきて ATTiny45 で Internal RC Oscillator を使って動作するようにビルドする方法のメモ。
■V-USB を落とす
http://www.obdev.at/products/vusb/download.html
ここから、vusb-20121206.zip を落とす。
■Project の作成
AtmelStudio → File → New → Project...
→ C/C++ の一番上の GCC C Executable Project
→ Name, Location, Solution name を適当に入れる
(以下、Name を foo としたことにする)
→ OK → ATTiny45 → OK
[CTRL]+[SHIFT]+[b] でビルドできることを確認(Build: 1 succeded...が出ればOK)
■V-USB のコピー
vusb-20121206.zip の usbdrv ディレクトリと libs-device ディレクトリを
foo/foo/ の中にコピーする
foo/foo/usbdrv と foo/foo/libs-device となる
examples/hid-data/firmware/Makefile
examples/hid-data/firmware/usbconfig.h
も foo/foo/ の中にコピーする。
■Makefile の修正
foo/foo/Makefile の main. を foo. に全置き換えする(コメント内も含めて26箇所)
foo/foo/Makefile の先頭に
SHELL=C:/Windows/System32/cmd.exe
を追加。
一番下に、
all: foo.hex
を追加。
(make のバグが残っているらしく SHELL を指定しないと make clean の時にエラーが出るのでその対策と、make all の条件が書かれてなくて build できないのでその対策)
■Makefile を使って build するように変更
Project の Property で、
(Solution Explorer の foo ディレクトリで右クリックして properties を選択)
Build→Use External Makefile にチェックして、↑でコピーした Makefile を指定
■foo.c を修正
foo.c の中身を全部消して(or コメントアウト)して、
examples/hid-data/firmware/main.c の中身をコピペする。
[CTRL]+[SHIFT]+[b] でビルドすると const にしろと怒られるので、
usbHidReportDescriptor のところの先頭に const を付ける
const PROGMEM char usbHidReportDescriptor[22] = { /* USB report descriptor */
これで、[CTRL]+[SHIFT]+[b] でビルドできればOK
■ATTiny45 用に修正
foo/foo/Makefile の3行を以下のように修正
# Salt changed from DEVICE = atmega168
DEVICE = attiny45
# Salt changed from F_CPU = 16000000 # in Hz
F_CPU = 16500000 # in Hz
# Salt changed from OBJECTS = usbdrv/usbdrv.o usbdrv/usbdrvasm.o usbdrv/oddebug.o foo.o
OBJECTS = usbdrv/usbdrv.o usbdrv/usbdrvasm.o usbdrv/oddebug.o libs-device/osccal.o foo.o
foo/foo/usbconfig.h の4ヶ所を以下のように修正
// Salt changed from #define USB_CFG_IOPORTNAME D
#define USB_CFG_IOPORTNAME B
// Salt changed from #define USB_CFG_DMINUS_BIT 4
#define USB_CFG_DMINUS_BIT 1
// Salt changed from #define USB_CFG_HAVE_MEASURE_FRAME_LENGTH 0
#define USB_CFG_HAVE_MEASURE_FRAME_LENGTH 1
/* #define USB_RESET_HOOK(resetStarts) if(!resetStarts){hadUsbReset();} */
/* This macro is a hook if you need to know when an USB RESET occurs. It has
* one parameter which distinguishes between the start of RESET state and its
* end.
*/
/* #define USB_SET_ADDRESS_HOOK() hadAddressAssigned(); */
// Salt added {
#ifndef __ASSEMBLER__
#include <avr/interrupt.h> // for sei()
extern void calibrateOscillator(void);
#endif
#define USB_RESET_HOOK(resetStarts) if(!resetStarts){cli(); calibrateOscillator(); sei();}
// } Salt added
これで、[CTRL]+[SHIFT]+[b] でビルドできればOK
不可解なエラーが出る時は、*.o を全部消してみる。
GUI からは Makefile の clean をうまく呼び出せないみたいなので、手動で。
(ATTiny45 には PortB しかないので B に、
USB_CFG_DMINUS_BIT は、付属の回路図に合わせて 1 に、
USB_RESET_HOOK は libs-device/osccal.h の説明通りにコピペ
キャリブレーションを有効にするために USB_CFG_HAVE_MEASURE_FRAME_LENGTH を 1 にする)
■焼く
Memories はそのまま焼く。
Fuse は、HIGH=0xDD, LOW=0xE1 にして焼く。
internal rc oscillator を使うけど、INTRCOSC_xxx を使うとダメで、PLLCLK_1KCK_14CK_64MS にすることが重要。(ちょっと悩んだ^^;;)
■回路を作る
vusb-20121206/circuits/tiny45-rc.png の通りに作ればOK
これで、HID device として認識されるはず。
う~ん、、コードが見辛いなぁ。。このブログはコード貼り付けるのがムズイ。。
| 固定リンク
「H/W」カテゴリの記事
- Essential Phone PH-1 のバッテリー交換(2021.12.11)
- sysbench をとってみた(2016.07.02)
- M4 から 850 PRO に変えた(2014.12.28)
- モバイルバッテリー(2014.05.14)
- LPCXpresso LPC11U68 が当たった(2014.02.11)
「AVR」カテゴリの記事
- V-USB を AtmelStudio 6 でビルドする(2013.06.19)
- AVR-USB is now V-USB(2009.04.22)
- AVR-USB, hid-data(2008.11.24)
- AVR-USB、Tiny45 の internal RC oscillator で動作!(2008.11.08)
- 78K0 AVR Writer(2008.10.26)
この記事へのコメントは終了しました。
コメント
Thanks-a-mundo for the blog.Really thank you! Will read on…
投稿: maillot de foot pas cher | 2013.07.07 21:49
Its such as you read my thoughts! You appear to understand so much about this, like you wrote the guide in it or something. I think that you just can do with a few p.c. to drive the message home a little bit, but other than that, that is excellent blog. A great read. I’ll certainly be back.
投稿: gifts for men | 2013.07.14 11:02