mbed TY51822r3でmbed OSを使う
スッッチサイエンスさんからBLEつきのmbedボード、mbed TY51822r3を買いました。mbed TY51822r3はまだオフィシャルにmbed OSのサポート対象になっていないのですが、mbed OS対応ボードのNordic nRF51-DKと互換性があります(差分は動作クロックが32MHzとなっており、Nordic nRF51-DK の16MHzと異なること)。差分がクロック周波数だけならきっとmbed OSが動いてBLEで遊べるだろうと思い、ポッチてみた次第です。
ということで、mbed TY51822r3でmbed OSを動かしてみました。最初はNordic nRF51-DK をターゲットボードに指定して、ダウンロードしたSDKのSystemInit関数を書き換えて32MHzクロックを有効にすれば良いのかと思っていたのですが、スイッチサイエンスさんの @ytsuboi さんがご自身のGitHubでmbed TY51822r3用のターゲット定義情報や32MHzクロックに対応したSDKをすでに公開されていることを教えていただき、このリソースを活用させていただきました。
mbed OSで開発を行う際には、最初にターゲットにするボードを指定して定義ファイルをダウンロードする必要があります。ターゲットとするボードがmbed OSのオフィシャルサイトに登録されている場合は、そのボード名を指定すればよいのですが(例えば、Nordic nRF51-DK の場合はnrf51dk-gcc)、プライベートなGitHubに登録されている定義情報をurlやgitリポジトリーを指定してダウンロードする方法がわかりませんでした(色々と試したのですがうまくいかず)。そのため、mbed TY51822r3用の定義ファイルを一旦ローカルにダウンロードして、ローカルレボジトリとしてターゲット指定する方法でビルドしています。このあたりについては、もっとうまいやり方があればコメント下さい。
以下、mbed TY51822r3でmbed OS対応のアプリをビルドする手順を示します。
ビルドはOS Xで行っています。 mbed OSのフィルを格納するディレクトリを~/mbedOSとします。 $ cd ~/mbedOS # mbed TY51822r3用の定義ファイルをダウンロード $ git clone https://github.com/ytsuboi/target-ty51822r3-gcc # mbed TY51822r3用のSDKをダウンロード $ git clone https://github.com/ytsuboi/nrf51-sdk $ mkdir ty51822-blink # 作成するプロジェクトのフォルダーを作成 $ cd ty51822-blink $ yotta init # プロジェクトの初期化 $ cd ~/mbedOS/target-ty51822r3-gcc/ # DLしたターゲットファイルのフォルダーに移動 $ yotta link-target # ローカルリンクを設定 $ cd ~/mbedOS/ty51822-blink/ # プロジェクトフォルダーに戻る $ yotta link-target ty51822r3-gcc # ローカルリンクのターゲット名として、ty51822r3-gccを登録 $ yotta target ty51822r3-gcc # ローカルリンクty51822r3-gccをターゲトに指定 $ yotta target # 関連ファイルDL後にターゲットが設定されていることを確認 ty51822r3-gcc 1.0.0 -> /Users/kenshi/mbedOS/target-ty51822r3-gcc nordic-nrf51822-gcc 1.0.0 mbed-gcc 1.2.2 $ yotta install mbed-drivers # ドライバーのダウンロード $ cd ~/mbedOS/nrf51-sdk/script # ローカルにDLしたSDKファイルのフォルダーに移動 # スクリプトを実行してSDKをプロジェクトフォルダーにコピー # command line: pick_nrf51_files.py <SDKフォルダーのパス> <プロジェクトフォルダーのパス> $ python pick_nrf51_files.py ~/mbedOS/nrf51-sdk/ ~/mbedOS/ty51822-blink/ $ cd ~mbedOS/ty51822-blink/ # プロジェクフォルダーに移動 <add source/app.cpp> # ソースファイルを書く $ yotta build # ビルド # 出来上がったhexファイルをmbedにコピーして実行 $ cp build/ty51822r3-gcc/source/ty51822-blink.hex /Volumes/MBED/
サンプルーコード(普通のLチカです…)
#include "mbed-drivers/mbed.h" static void blinky1(void) { static DigitalOut led1(LED1); led1 = !led1; printf("LED1 = %d \r\n",led1.read()); } void app_start(int, char**) { minar::Scheduler::postCallback(blinky1).period(minar::milliseconds(100)); }
無事mbed OSでLチカが動きました。mbed TY51822r3はGPIOのドライブ能力が0.5mAと小さく、LEDを直接ドライブすることができないため、FETを使ってスイッチングする必要があります。
最近のコメント