ぼくの技術日誌

日誌って銘打っていますが、更新頻度が…

Arduino M0 ProをAtmelStudioから使う

はじめに

Arduino M0 Proを買いました。
発売当初、「5000円は高いな~」と思って購入を見送ったのですが、先日お世話になっている師匠からお勧めされると欲しくなってしまい、購入してしました。

師匠によるお勧めの理由は、
Arduino M0 Proに搭載のARMマイコンが多機能な割に安価で入手しやすい。
 ⇒UART、SPI、I2C、PWMのほかUSB Hostも登載のうえ、秋月でチップ単体が500円程で販売されている。
Arduino M0 Proにはデバッガ(EDBG)が付いているので、これを使えば開発がし易い。
 ⇒AtmelStudioでデバッグ実行が可能。

というようなことでした。

今回はこのArduino M0 Proの開発環境をAtmelStudioで立ち上げてみたので、そのやり方をまとめておこうと思います。
Arduino IDEではなく、AtmelStudioを使います。


この記事の実行環境は下記のとおりです。

Windows7 x64
AtmelStudioバージョン 7.0.634
Arduino M0 Proファームウェアバージョン 2.10(初期は1.1?)

開発環境の構築

AtmelStudioのインストール

AtmelStudioのインストーラを入手します。
公式ページAtmel StudioでWeb/Offlineどちらかのインストーラ項目のCDマークをクリックします。
ページが変わった先で自分のメールアドレスを入力することで、入力したアドレス向けにダウンロードリンクが送られてきます。

ダウンロードしたインストーラを実行すると、IDEとともにドライバがインストールされます。

Arduino M0 Proのファームウェアアップデート

AtmelStudioを起動し、Arduino M0 Proを接続します。
Arduinoを接続した初回にFirmwareの更新を行うダイアログが出現します。

私は何も考えず、更新ボタンを押しましたが、失敗する場合もあるようです。

ファームウェアの更新は手動でも行うことができますので、失敗するようなら手動実行するのが良いでしょう。

[ToDo:上記の方法について加筆すること]

プログラム書き込みの方法と設定

早速開発しようとしたところ、プログラムの書き込みについて、途中行き詰まったことが2点ありました。
開発方法の紹介に入る前に、行き詰まった内容とその解決法をご紹介します。

プログラムが実行できない

通常のPCアプリの感覚でプログラムを実行しても、Arduino M0 Pro上で実行されませんでした。
どうやらプログラムは自動でArduinoに書き込まれないようです。
ですのでプログラムを実行する前に、プログラムの書き込みを別メニューから手動で行う必要があるようです。
#そんなのわからないですよ…

AtmelStudioメニューバーのTools→Device Programingで表示されるダイアログでプログラムの書き込みが行えます

プログラムを書き込めない

上記のプログラム書き込みを行おうとすると、「Verify Error」が発生して書き込みを完了できませんでした。
USB経由のプログラム書き込みにはFuseの設定変更が必要なようです。

Fuseを0x01から0x07に変更すると、プログラムの書込みが完了しました!
#調べてもすぐにはわからず、師匠に相談したところ、Fuse設定を変更してみてはどうかとアドバイスを賜りました。
Fuse設定とプログラムの書き込みにどういった関係があるのかはわかってません

さて、ここからはプロジェクトの作成から、デバッグ実行までを解説します。

プロジェクトの新規作成

AtmelStudioを起動、メニューのNew→Project...→出現するNew Projectダイアログ上でGCC ASF Board Projectを選択してOK
Board Selectionダイアログに変わるので、Arduino Mo Proに使われているATSAMD21G18Aを選択、User Board Template - ATSAMD21G18Aを押してOK

プロジェクトが生成されます。

Atmel Software Framework(ASF)ライブラリ追加

Atmel Software Framework(以下、ASF)というデバイスドライバ等のフレームワークが提供されています。
ASFには、LED点滅に必要なgpio操作や時間待ちを行うドライバが存在しますので、プロジェクトに追加します。

メニューのASF→ASF Wizard→出現するASFWizardタブで「Port - GPIO Pin Control(Driver)」、「Delay routines(service)」をAdd、Applyを押す
確認ダイアログが出るのでOK

main.cでincludeされているasf.h内部で各ドライバのモジュールがincludeされているのがわかります。

Lチカ実装

main.cのmain関数内部の「/* Insert application code here, after the board has been initialized. */」行の下に下記を追加します。

int main (void)
{
	system_init();

	/* Insert application code here, after the board has been initialized. */
	delay_init();
	
	struct port_config pin_conf;
	port_get_config_defaults(&pin_conf);
	pin_conf.direction  = PORT_PIN_DIR_OUTPUT;
	port_pin_set_config(PIN_PA17, &pin_conf);
	
	while (1) {
		port_pin_set_output_level(PIN_PA17, true);
		delay_ms(500);
		port_pin_set_output_level(PIN_PA17, false);
		delay_ms(500);
	}
	
}
gpio

公式ドキュメントQuick Start Guide for PORT - Basic にサンプルコードが書いてあるので、そのまま書き写します。

Arduino M0 proは回路図をみるとマイコンPA_17が基板上「L」と書かれた横のLEDと結線されているので、これを使用します。

delay

delayはdelay_msだけではビルドは通っても時間待ちをしてくれませんでした。
delay_initを行うことが必要なようです。

プログラム書込

注意:「プログラム書き込みの方法と設定」のFuse設定を行っていないとArduinoにプログラムを書き込みできません。

プログラムをビルド、Arduino M0 ProをPCと接続した状態で
メニューのTool→Device programing→出現するDevice programinngダイアログ上部のApplyを押し、左メニューからMemoriesを選択
Flashの項目のProgramボタンを押すと、選択中のelf(ビルドして生成されていたもの)がArduinoへ書き込まれ、プログラムが開始します。

デバッグ実行

デバッガの選択EDBG FFFF(略)を選択してある状態でプログラムをデバッグ実行することができます。
コードの左横でダブルクリックをすればブレークポイントも設定できます。
このあたりはVisual Studioの機能のままですね。

デバッグ実行と同時に自動でプログラム書き込みをしてくれると大変便利なのですが、今のところそういった設定変更の方法はわかっていません。
わかり次第追記したいと思います。

参考Webページ

ASFの公式ドキュメンント
ASF Source Code Documentation

ASFの使用方法
Atmel Studio入門:ASFのモジュール導入方法 | easy labo

プログラムを実行できなくて困った時に調べて参考になった情報

Arduino Zero Pro EDBG unknown serial number | AVR Freaks

Verify Error with SAMD21G18A | AVR Freaks

Arduino M0 Proの回路図
http://download.arduino.org/products/ZEROPRO/Arduino-Zero-Pro-V3-SCH.pdf