« Fitbit Ultra を修理した | トップページ | Android で USB-IO-Mini が動いた »

2013.06.19

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 を指定

image

image

■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 にすることが重要。(ちょっと悩んだ^^;;)

image

■回路を作る
vusb-20121206/circuits/tiny45-rc.png の通りに作ればOK

tiny45-rc

これで、HID device として認識されるはず。

う~ん、、コードが見辛いなぁ。。このブログはコード貼り付けるのがムズイ。。

|

« Fitbit Ultra を修理した | トップページ | Android で USB-IO-Mini が動いた »

H/W」カテゴリの記事

AVR」カテゴリの記事

コメント

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

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: V-USB を AtmelStudio 6 でビルドする:

« Fitbit Ultra を修理した | トップページ | Android で USB-IO-Mini が動いた »