How to flash mbed binary to the Arduino M0 Pro

Arduino M0 Pro で mbed のバイナリを実行させる

/media/uploads/MACRUM/img_7301a.jpg

arduino.org の Arduino M0 Pro は、mbed のプラットフォーム Atmel ATSAMD21-XPRO とほぼ同じチップが使用されています。 チップが同じであれば、mbed オンラインコンパイラで生成したバイナリが動作するはずなので、試してみました。

https://developer.mbed.org/platforms/SAMD21-XPRO/

使用してるチップの型名は、それぞれ以下のようになっています。

Board nameChip name
Arduino M0 ProAtmel ATSAMD21G18A
mbed ATSAMD21-XPROAtmel ATSAMD21J18A

この枝番の違いをデータシートで調べてみると、パッケージのピン数や使用できるタイマーのチャネル数等でした。mbed で使用されているJ版がG版に対するスーパーセットのようなので、mbed 環境でのプログラミング方法に注意するだけで問題なさそうです。

mbedのバイナリの実行は、以下の手順になります。

  • 自分のアカウントにプラットフォームを追加
  • プログラムを作成
  • ビルド
  • 生成されたバイナリをターゲットに書き込む
  • ターゲット上で実行

セットアップ

mbed 側はオンライン環境なので、ユーザ登録を行います。 登録の手順はこちらをご覧下さい。

https://docs.google.com/document/d/19YevEKAWngR0lOEPLUuw91uBLQlJuI9oY2BDtLS6nbY/edit?usp=sharing

ターゲットへの書き込みは、USB ドラッグ&ドロップが出来ないので、Atmel Studio で行います。こちらからダウンロードして、インストールを行います。

http://www.atmel.com/ja/jp/tools/ATMELSTUDIO.aspx

基本的には、Atmel Studio のみで書き込みが出来るのですが、初回の書き込みのみ問題があるようなので、Arduino Software (IDE) が必要になります。こちらからダウンロードして、インストールします。

https://www.arduino.cc/en/Main/Software
http://www.arduino.org/software

Information

私の環境では、www.arduino.cc のIDEでブートローダを書き込んだ場合のみ正常に動作しました(ARDUINO 1.6.7)。以下の説明は、このバージョンを使った場合になります。

プログラムの作成とビルド

mbed ATSAMD21-XPRO プラットフォームページに移動します。

https://developer.mbed.org/platforms/SAMD21-XPRO/

画面右側の青いボタン [Add to your mbed compiler] をクリックします。 Platform 'ATSAMD21-XPRO' is now added to your account! と表示されるはずです。

次に以下のリンクから mbed_blinky プログラムをインポートします。

https://developer.mbed.org/compiler/#import:/teams/mbed/code/mbed_blinky/;platform:

インポート後に、画面右上のプラットフォームが Atmel ATSAMD21-XPRO になっているか確認して下さい(他のターゲットになっている場合は、正しいターゲットに設定し直して下さい)。

main.cpp をダブルクリックすると、コードがエディタ上で編集可能になります。

ポート名の定義(LED1 等)は、ATSAMD21-XPRO ボード上で使用する名称となっているため、このままでは Arduino M0 Pro で使用しているポートと異なるので変更します。Serial クラスを使って、printf 出力をターミナルに送信するコードを追加します。以下のコードを使います。

#include "mbed.h"

DigitalOut myled(PA17);
Serial pc(PB22, PB23);

int main() {
    pc.printf("hello, mbed world.\n");
    while(1) {
        myled = 1;
        wait(0.2);
        myled = 0;
        wait(0.2);
    }
}

[コンパイル] ボタンを押すと、クラウド側でコンパイルされたバイナリファイルがダウンロードできます。

Arduino M0 Pro への書き込み

PCとArduino M0 ProをUSBケーブルで接続します(Programming 側のポートを使います)。Atmel Studio を立ち上げ、メニューから [Tools] - [Device Programming] を選択します。以下のように設定します。

Tool : EDBG
Device : ATSAMD21G18A
Interface : SWD

[Apply] ボタンを押すと、ウィンドウ内にメニューが表示されます。[Device Information] - [Read] ボタンを押し、接続されたデバイスの情報が正しく表示されていることを確認します。Firmware Upgrade のダイアログが表示された場合は、[Upgrade] を押して、ファームウェアを更新します。

/media/uploads/MACRUM/---------_2016-03-07_22.09.08.png

[Memories] メニューを選択します。 /media/uploads/MACRUM/---------_2016-03-07_22.10.52.png

ここで、Flash (256KB) の右端の Browse for file ボタンを押して、mbed オンラインコンパイラで生成した mbed_blinky_atmel_SAMD21J18A.bin ファイルを指定します。 /media/uploads/MACRUM/---------_2016-03-08_22.00.17.png

[Program] ボタンを押します。おそらく、初回の書き込み時には以下のエラーが表示されて書き込むことが出来ません。 /media/uploads/MACRUM/---------_2016-03-07_22.14.37.png

Atmelのチップは余り詳しく知らないので原因は不明ですが、色々と調べていると Arduino IDE でブートローダーを書き込むことで回避することが出来ました。

Device Programming ウィンドウを閉じて、Arduino IDE を立ち上げます。 Arduino M0 Pro の設定ファイルはデフォルトでは含まれていないようなので、メニューから [ツール] - [マイコンボード] - [ボードマネージャー…] で表示される一覧から、Arduino SAMD Boards (32-bits ARM Cortex-M0+) by Arduino をインストールします。インストール後に、以下のように設定します。

[ツール] - [マイコンボード] - [Arduino/Genuino Zero (Programming Port)]
[ツール] - [シリアルポート] - ボードを接続し、認識されたポート
[ツール] - [書込装置] - [Atmel EDBG]

[ツール] - [ブートローダを書き込む]

「ブートローダの書き込みが完了しました。」と表示されれば成功です。 /media/uploads/MACRUM/---------_2016-03-08_22.11.03.png

Arduino IDE を閉じて、Atmel Studio に戻ります。

再度、Device Programming ページの [Memories] から [Program] を選択します。これでエラー無く書き込むことが出来ました。

Information

2016/3/8 追記: 私の環境では、arduino.cc 版のIDEでブートローダを書き込むと問題無いのですが、arduino.org 版でブートローダを書き換えた後にAtmel Studioからの書き込みでベリファイエラーが発生しました。再度調査してみます。

Tera Term や CoolTerm 等のターミナルソフトウェアを起動し、Arduino のシリアルポートと接続します。設定は、9600-8-N-1 です。

ボード上のリセットボタンを押し、ターミナル上に文字が表されれば成功です。 また、digital pin 13に LED を取り付けると点滅するのを確認することが出来ます。

/media/uploads/MACRUM/---------_2016-03-08_22.14.38.png


Please log in to post comments.