概要
Digispark+gcc チュートリアルの Part1 です。
Digispark 用のプログラムを C言語で書いて gcc でコンパイルし、USB で接続した Digispark に書き込んで実行する方法を説明します(Arduino の開発環境を使いません)。以前の記事では手順が分かりにくかったので、あらためてまとめます。
Raspberry Pi, Linux, FreeBSD で動作確認しました。
動作確認したOS
- FreeBSD: FreeBSD freebsd11 11.1-RELEASE i386
- Raspberry Pi: Linux raspberrypi 4.4.11+ #888 Mon May 23 20:02:58 BST 2016 armv6l GNU/Linux
- Linux (CentOS7): Linux localhost.localdomain 3.10.0-514.el7.x86_64 #1 SMP Tue Nov 22 16:42:41 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
Windows でも https://github.com/digistump/DigistumpArduino/releases/download/1.6.7/Digistump.Drivers.zip のドライバをインストールすれば、同梱の micronucleus.exe で書き込めるようになります。
Windows で micronucleus.exe が動作しない場合は、スタティックリンク版 を作成しましたので、こちらを利用して下さい (その場合も、上記の Digistump.Drivers.zip のドライバのインストールは必要)。
1. 必要なツールをパッケージインストール
(1) 以下のパッケージをインストールする。
○ RaspberryPi の場合["apt-get install" コマンドでインストール]
- libusb-dev
- gcc
- gcc-avr
- avr-libc
- gmake-4.2.1_1
- gcc-5.4.0_2
- avr-gcc-5.4.0
- avr-libc-2.0.0_1,1
※ yum の epel リポジトリの登録が必要
- libusb-devel.x86_64
- gcc.x86_64
- avr-libc.noarch
- avr-gcc.x86_64
2. ファームウェアの書き込みツールをコンパイル
コマンドラインから Digispark に USB 経由でファームウェアを書き込むために Micronucleus V2.03 という書き込みツールをコンパイルしておく。
(1) https://github.com/micronucleus/micronucleus/ から [Clone or Download] ボタンをクリックして zip ファイルをダウンロードし、ローカルに展開する。
(2) micronucleus-master/commandline/ に移動する。
(3) make コマンド(Raspberry Pi では make コマンド、FreeBSD では gmake コマンド) を実行すると、実行ファイル micronucleus が生成する。
3. ファームウェアのソースコードの作成
(1) 次のファイルを main.c として保存する。
// main.c: LED の点滅 #include <avr/io.h> #include <util/delay.h> //_delay_ms() を使うために必要 int main(void) { DDRB |= _BV(PB1); // PB1 を出力ポートにする while(1) { PORTB |= _BV(PB1); // LED 点灯 _delay_ms(100); // 100ms ディレイ PORTB &= ~_BV(PB1); // LED 消灯 _delay_ms(200); // 200ms ディレイ } return 0; }
4. ファームウェアのコンパイル
(1) 次のファイルを Makefile として保存する。3カ所行頭から字下げしている箇所があるが、スペース文字でなくタブで字下げすること。
# Makefile
CC = avr-gcc MCU = attiny85 TRG = sample1 OBJ = main.o # Options ASFLAGS = -gstabs -mmcu=$(MCU) -DF_CPU=16500000L -DDEBUG_LEVEL=0
OPTIMIZE = -Os CFLAGS = -g -Wall $(OPTIMIZE) -mmcu=$(MCU) -DF_CPU=16500000L LDFLAGS = -Wl,-Map,$(TRG).map OBJCOPY = avr-objcopy OBJDUMP = avr-objdump all: $(TRG).hex $(TRG).lst %.hex: %.elf $(OBJCOPY) -j .text -j .data -O ihex $< $@ $(TRG).elf: $(OBJ) $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ %.lst: %.elf $(OBJDUMP) -h -S $< > $@
(2) make コマンド(Linux/Raspberry Pi では make コマンド、FreeBSD では gmake コマンド) を実行すると main.c がコンパイルされてバイナリ (Intel HEX) 形式のファームウェア sample1.hex が生成する。
5. ファームウェアの書き込み
(1) 2. で作成した書き込みツール micronucleus をパスの通った場所に置き、
# micronucleus --run sample1.hex
を実行する(root 権限が必要)。
> Please plug in the device ...
> Press CTRL+C to terminate the program.
と表示されるので、この状態で USB 端子に Digispark を挿入するとファームウェアが書き込まれ、続けて実行される(書き込みが始まらない場合は、一度 CTRL+Cを押して停止し、再度実行する)。書き込みが完了すると、進行度の表示が 100% になる。Digispark 上の LED が点滅すれば、ファームウェアが正常に動作している。
0 件のコメント:
コメントを投稿