BlueNinjaソフトウェア担当の奥原です。
「Ninjaの試練」第2回は、検査時にBlueNinjaで動作するテストプログラムについて紹介します。
テストプログラムの概要
テストプログラムは、シリアルポート(UART0)で受信したコマンドに従いBlueNinjaの機能をチェックしJSONで結果を返します。
以下の写真のようにブレイクアウトボードと組み、検査治具のコネクタに接続した状態で動作させることを想定していますが、ブレイクアウトボードでUSBシリアル(3.3V TTL)変換ケーブル(FTDI USB・シリアル変換ケーブル(3.3V)動作実績あり)を接続しコマンドを直接送信することで動作させられます。
テストプログラムのソースコードはGitHubで公開しています。
対象のペリフェラル
テストプログラムでは、以下のペリフェラルを使用しています。
- GPIO(LED, Switch, 汎用入力)
- 12bit A/Dコンバーター(ADC12)
- 24bit A/Dコンバーター(ADC24)
- UART(コマンド送受信(UART0)、コンソール(UART1))
- I2C
- 9軸モーションセンサー(SPI)
- 気圧センサー(I2C)
- 充電IC(I2C)
- RTC
- USBデバイス
- BLE
実際に9月以降製造のBlueNinjaの検査で動作させたプログラムですので、実動のサンプルとして参考にしていただけると思います。
状態遷移
テストプログラムは以下の状態を持っています。
「MODE SELECT」を中心にm***コマンドで以下の各モードへ遷移します。
- GPIOやADC、センサー等のチェックを行う「I/O」モード
- BlueNinjaをHIDデバイスとして振る舞わせる「USB」モード
- LE Scanを実行しBLEセントラルから発見できるようにする「BLE」モード
- テストプログラムを終了する「TERM」モード
各モードで実行する処理等は、仕様書の抜粋を参照ください。
コマンド
テストプログラムは以下のコマンドに従い各機能を実行します。
機能 | コマンド | パラメータ | 受信できる状態 |
モード変更 | m | 000: モード選択 001: I/O 002: USB 003: BLE 999: テスト終了 |
MODE SELECT I/O USB BLE ※詳細は遷移図参照 |
DIチェック | g | 000: DIチェック | I/O |
ADCチェック | a | 000: ADC12 Ch0 001: ADC12 Ch1 002: ADC12 Ch2 003: ADC12 Ch3 102: ADC24 Ch2 |
I/O |
I2C PingPong | i | 000: PingPong実行 | I/O |
9軸センサ | 9 | 000: 9軸センサ計測 | I/O |
気圧センサ | p | 000: 気圧センサ計測 | I/O |
充電IC | c | 000: 充電ICステータス取得 | I/O |
RTC取得 | r | 000: 現在のRTC時刻を取得 | MODE SELECT |
全てのコマンドが固定長で終端はCRです。
パラメータの省略を許さないようにすることでコマンドのパースを簡単済ませるようにしました。
次回は…
次回の「Ninjaの試練」は、検査治具基板のファームウェアを紹介する予定です。
mbedライブラリをオフラインの開発環境で使う実例、汎用のLPC1768で使用する実例として参考にしていただけると思います。
著者プロフィール
-
組み込みソフトウェアエンジニアです。
主にBlueNinjaを担当しています。