21
26

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Ubuntu 14.04.3 LTSでAVRマイコン開発

Posted at

Atmel studioがクソ重い。
Eclipseは使い物にならない。
それにプログラミング作業は慣れた*nix系でやりたい。
仕事場から暇を見つけてはsshを家に張ってマイコン開発に勤しみたい。
もちろん可能だ。

スムーズにいけば10秒で導入できる。

必要なパッケージを導入

binutils-avr gcc-avr avr-libc avrdude

binutils=avr、gcc-avr、avr-libcは名前の通りavrマイコン向けのプログラミングに必要。
avrdudeはライターを制御する。

だいたいのディストリでapt-getできる。

sudo apt-get install binutils-avr gcc-avr avr-libc avrdude

avrdudeを試す

今回は、Atmel AVR ISP mkIIとAtmel ATmega328Pを使用する。

マイコンにmkIIを繋ぎ、usbポートにmkIIを繋ぐ。
mkIIはVccを供給しないので、別途電源を確保する事。

次のコマンドを入力する。

sudo avrdude -c avrisp2 -P usb -p m328p -v

詳細はmanで確認する事。
正しくmkIIが動いていれば、メモリ領域の統計情報等が表示される。

ubuntu等では、デフォルトではusbデバイスへのアクセスにroot権限が必要。
この設定の変更については次の節を参考。

usbデバイスの権限を変更する

sudoする手間を惜しまなければこの節は必要ない。

権限を変更するためには、udevを利用する。
udevはLinuxにおけるデバイス管理ツール。
udevはハードウェアの追加や削除を検知してイベントを発行し、ユーザーは各イベントに対する動作を設定できる。
今回の場合は、mkIIが追加された時に権限を変更すれば良い。

そのために次のudevルールを追加する。

sudo vim /etc/udev/rules.d/60-avr.rules

内容は以下の通り

SUBSYSTEM!="usb", ACTION!="add", GOTO="avrend"

ATTR{idVendor}=="03eb", ATTR{idProduct}=="2104", MODE="0666"

LABEL="avrend"

意味は「usbデバイスが追加された時に、追加されたデバイスのベンダーIDが"o3eb"(Atmelに対応)かつ、プロダクトIDが"2104"(mkIIに対応)ならば、権限を"0666"に設定」

mkII以外のライタを扱いたい時は、udevinfoudevadmによってidProductを確認する事。
usbデバイスの場合は/sys/bus/usb/devices/の中にデバイスファイルがある。

権限をより細かく設定したい場合は、udevルールについて調べる事。

Cプログラムをコンパイルする

avr-gcc -mmcu=atmega328p ./test.c -o ./test.out

プログラムを書き込む

avrdude -c avrisp2 -P usb -p m328p -U flash:w:test.out:e -v

意味は、「flashメモリにelfフォーマット(e)のtest.outファイルを書き込む(w)」。

昔はhexファイルしか書けなかったけど、今はelfを与えるだけで内部的に変換してくれる。

ボーレートの細かい設定等をしたい人はmanを参照。

その他

サポートされている部品のリストを表示するには

avrdude -p ?

サポートされているライタのリストを表示するには

avrdude -c ?

困ったらとにかくman

番外: clang_completeで補完する

通常のc/c++プログラムを補完する際との違いは2点ある。

1.clang_completeにgcc-avrが参照しているインクルードパスを教える。

2.マイコンの種類を教えるマクロをdefineする。

例えば、次の様なコマンドを.vimrcに食わせれば良い。

let g:clang_user_option = "-I/usr/lib/avr/include/ -D__AVR_ATmega328P__"
let g:clang_complete_macros = 1

avr/includeの場所はシステムによっては異なるので、avr-gcc -v等で確認する。
自分の使いたいマイコンに対応したマクロを調べるには、avr/io.h等を見ればわかる。

21
26
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
26

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?