AVR開発環境設定 for Ubuntu 15.04
久々にAVRで電子工作をしたくなった・・・・
前はAVR Studioを使ってたけど、最近はWindowsよりUbuntuばっかり使ってるのでLinuxで環境設定するのだ。
で、世の中の人に聞いてみると・・・
Kenichiro MATOHARAさんが、スライドで紹介してくれていました。感謝!
必要な環境として
ここでは、書込み器には AVRISPmkIIを使うよ。
今回は ATtiny2313を使ったので、オプションの -mmcu に attiny2313 を指定する。
後は、delay.hを利用するので、 -Dオプションで、F_CPU を 1MHzに設定し、最適化は程々の-O2にする。ちなみに-gはデバッグ情報を付加するためのもの。
コンパイルが成功すると、a.out が出来上がるので、これを hex形式にする。
また、-pオプションで、デバイスを指定する。今回は ATtiny2313なので、t2313となる。(-cオプションで書込み器のみを指定すれば、デバイスの一覧が 表示されるので参照の亊)
最後に -Uオプションで書き込む内容を指定するが、ここではヒューズを書き換えるので、ヒューズ名(lfuse,hfuse)と書き込み指定(w)とその値(0x64,0xdf)、そして即値なのでimmediate mode (m)を指定している。
ここから、いよいよプログラムの書き込みになる。さっきの -Uオプションを使って書き込むのだ。
そして、つぎの壁が立ちはだかりました。
いろいろ調べてみたら、AVR FREAKSで、似たような案件について教えてくれている人たちを発見!!
なんか、スピードを遅くしろって言ってるね。
そういえば、ここで使ってる ATtiny2313は、前に何か書き込んでヒューズビットの設定も書き換えた覚えがあるな。。。。
(案の定、クロックが4MHzになってたからかな。)
前はAVR Studioを使ってたけど、最近はWindowsよりUbuntuばっかり使ってるのでLinuxで環境設定するのだ。
で、世の中の人に聞いてみると・・・
Kenichiro MATOHARAさんが、スライドで紹介してくれていました。感謝!
必要な環境として
- コンパイル環境
- AVR書き込み環境
コンパイル環境
コンパイルするにはコンパイラとして gcc-avr、プログラミングツールに binutils-avr、ライブラリに avr-libcが必要なようだ。コンパイル環境のインストール# apt-get install gcc-avr binutils-avr avr-libc
AVR書き込み環境
AVRに実際に書き込むためのプログラムには avrdudeを使いましょうって事ですね。ここでは、書込み器には AVRISPmkIIを使うよ。
AVR書き込み環境のインストール# apt-get install avrdude
サンプル作成
ひとまず、そこらにあったATtiny2313で作ることにする。hello.c/* LED点滅プログラム */
#include <util/delay.h>
#include <avr/io.h>
int main(void)
{
DDRB = _BV(DDB0);
for(;;){
PINB = _BV(PINB0);
_delay_ms(500);
}
return 0;
}
コンパイル & リンク
ATtiny2312用にコンパイル & リンク$ avr-gcc -g -O2 -mmcu=attiny2313 -DF_CPU=1000000UL hello.c
今回は ATtiny2313を使ったので、オプションの -mmcu に attiny2313 を指定する。
後は、delay.hを利用するので、 -Dオプションで、F_CPU を 1MHzに設定し、最適化は程々の-O2にする。ちなみに-gはデバッグ情報を付加するためのもの。
コンパイルが成功すると、a.out が出来上がるので、これを hex形式にする。
a.outをhex形式に変換$ avr-objcopy -j .text -j .data -O ihex a.out hello.hex
AVRへ書き込む
まずは、ヒューズビットを初期化する。こうすると、内蔵クロックは8MHzで8分周になる。つまり、1Mhzですな。ヒューズビット初期化# avrdude -e -c avrisp2 -p t2313 -U lfuse:w:0x64:m -U hfuse:w:0xdf:m
オプション-eはチップ消去、-cは書込み器の指定で今回は AVRISPmkII なので avrisp2を指定する。(-c? と指定すれば、書込み器のリストが表示されるので参照の亊)
また、-pオプションで、デバイスを指定する。今回は ATtiny2313なので、t2313となる。(-cオプションで書込み器のみを指定すれば、デバイスの一覧が 表示されるので参照の亊)
最後に -Uオプションで書き込む内容を指定するが、ここではヒューズを書き換えるので、ヒューズ名(lfuse,hfuse)と書き込み指定(w)とその値(0x64,0xdf)、そして即値なのでimmediate mode (m)を指定している。
ここから、いよいよプログラムの書き込みになる。さっきの -Uオプションを使って書き込むのだ。
プログラム書き込み# avrdude -e -c avrisp2 -p t2313 -U flash:w:hello.hex
ま、Flashメモリ(flash)に書き込む(w)指定と、ファイル名(hello.hex)を記述すればよし。
最初は上手くいかなかった・・・
なんと、ターゲットに電源を供給してませんでした。。。。アホすぎ。そして、つぎの壁が立ちはだかりました。
エラーメッセージavrdude: Device signature = 0x010305
avrdude: Expected signature for ATtiny2313 is 1E 91 0A
といった、エラーが出てしまった。シグネチャが違いすぎます。。。。
いろいろ調べてみたら、AVR FREAKSで、似たような案件について教えてくれている人たちを発見!!
なんか、スピードを遅くしろって言ってるね。
そういえば、ここで使ってる ATtiny2313は、前に何か書き込んでヒューズビットの設定も書き換えた覚えがあるな。。。。
ビットレート変更# avrdude -e -c avrisp2 -p t2313 -B 100
というわけで、-Bオプションで100くらいに設定したら、解決しました! めでたし、めでたし。
(案の定、クロックが4MHzになってたからかな。)
大変参考になりました。
返信削除ところで、hello.c の4行目は avt/io.h ではなく avr/io.h ではありませんか?
ははは。。。本当ですね。
削除きちんと修正させていただきました。
このページを見てくれる人がいるとは思ってなかったもので、適当に書き留めてました(笑)
本当にありがとうございました★