2017年8月21日月曜日

Digispark+gcc Lチカチュートリアル(RaspberryPi, Linux, FreeBSD 版)

 

概要


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
WindowsPC から書き込む方法
 
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
FreeBSD の場合 ["pkg install" コマンドでインストール]
  • gmake-4.2.1_1
  • gcc-5.4.0_2
  • avr-gcc-5.4.0
  • avr-libc-2.0.0_1,1
Linux (centOS) の場合 ["yum install" コマンドでインストール]

※ 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 が点滅すれば、ファームウェアが正常に動作している。