FP-AI-SENSING1の開発環境の構築を行います。
目次
1.FP-AI-SENSING1のダウンロード
FP-AI-SENSING1のダウンロードは前回の記事でご紹介しました。
【SensorTile kit】FP-AI-SENSING1でA.I.推論デモ
2.STM32CubeIDEのインストール
STM32CubeIDEのインストールは下記の記事をご参照ください。
3.FP-AI-SENSING1のプロジェクトをインポート
FP-AI-SENSING1のプロジェクトは下記の3種類のIDEに対応しています。
- EWARM
- MDK-ARM
- SW4STM32
STM32CubeIDEのプロジェクトはありませんが、インポート機能があるのでこれを使います。
- Project Explorerの中で右クリック→Import…をクリック
- General→Import ac2 System Workbench for STM32 Projectを選択して、Next>ボタンをクリック
- Directory…ボタンをクリック
- 下記のフォルダを選択してFinishボタンをクリック
(バージョンによってディレクトリ構造が違うようなので注意します)
下記のプロジェクト構成でインポートされます。
4.プロジェクトの構造を確認
4-1.ツリー構造
STM32F4xx-SensorTile | ||||
Doc | readme | |||
Drivers | ||||
BSP | Board Support Package | |||
CMSIS | CMSISライブラリ | |||
STM32F4xx_HAL_Driver | HALライブラリ | |||
Middlewares | ||||
FatFs | FAT File Systemモジュール | |||
FreeRTOS | FreeRTOS | |||
MetaDataManager | メタデータマネージャー | |||
STM32_AI_AudioPreprocessing_Library | A.I.で使用するオーディオの前処理ライブラリ | |||
STM32_BlueNRG | Bluetoothライブラリ | |||
STM32_USBD_Library | USBデバイスライブラリ | |||
Multi | ビルド出力先 | |||
SENSING1 | ||||
SW4STM32 | スタートアップルーチンとsyscall.c | |||
User | ユーザプログラム | |||
Asc | Audio ClassificationのA.I.コード | |||
HAR | Activity RecognitionのA.I.コード |
SENSING1/Userフォルダの中にユーザプログラムが入っているので、この中を見れば、どういう作りになっているかわかりそうです。
4-2.CubeMX(.ioc)ファイルがない
プロジェクトをインポートして気付いたのですが、CubeMX(Device Configuration Tool)の.iocファイルがありませんでした。コミュニティで調べたところ、下記の投稿を見つけました。
https://community.st.com/s/question/0D50X0000AFrhkOSQR/sensortile-and-cubemx-integration
結論から言うとCubeMXは使っていません。その理由は、SensorTileのいくつかのセンサーを操作するために、BSP(Board Support Package)ドライバを利用しているのですが、CubeMXはBSPドライバに対応していないためです。
ちなみに対象のセンサーは下記の3つです。
- LSM6DSM
- 加速度センサー、ジャイロセンサー
- LSM303AGR
- 加速度センサー、電子コンパス
- LPS22HB
- 大気圧センサー
各種ボードの操作を簡単にしてくれるBSPですが、CubeMXが対応していないのは残念ですね。将来に期待します。
4-3.リンカスクリプトの中身を確認
SensorTileにはデフォルトでブートローダが入っているので、アプリケーションの開始位置を間違えないように確認しておきたいと思います。リンカースクリプトLinkerScript.ldを見てみます。
/* Specify the memory areas */ MEMORY { FLASH (rx) : ORIGIN = 0x8004000, LENGTH = 496K RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 96K SRAM2 (xrw) : ORIGIN = 0x10000000, LENGTH = 32K }
0x8000000ではなくて、0x8004000になっていますね。当然といえば当然ですが、ブートローダに配慮した設定になっていますね。とりあえずデフォルトのブートローダーを使おうと思うので、このままにしておきます。
5.FP-AI-SENSING1のビルド
ビルドはいつも通りの手順でビルドできます。
- プロジェクトを右クリック→Build Project
- Multiフォルダの下に実行ファイルが作成されます
6.FP-AI-SENSING1の書き込み
ビルドした実行ファイルをST-Link Utilityを使って書き込みます。
また、私は試してないのですが、スマホアプリのST BLE SensorからBluetooth経由で書込みもできるようです。
なお、STM32CubeProgrammerだと”Error: failed to download Segment[0]”というメッセージと共に書込みに失敗します。プログラムの開始アドレスを0x8004000にしているのに、セグメント0(0x8000000)に書き込みしようとしているのも変です。気持ち悪いのですが、この件は保留中です。
7.FP-AI-SENSING1のデバッグモード
STM32CubeIDEのデフォルトのデバッグモードは、内部にSTM32CubeProgrammerを使用しているため、先ほどと同じ問題で失敗してしまいます。
この件に関しては、私はJ-LINKを使うことで対応しました。J-LINKであればFreeRTOSサポートもあるので、よりデバッグが便利になります。
J-LINKのデバッグを行うには、Debug Configurationで下記の画像のように設定を行います。
- デバッグプローブで、SEGGER J-LINKを選択
- RTOSバリアントを選択で、RTOSPlugin_RTOSを選択
ここで注意点が1つあります。なぜかブレイクポイントをデバッグ実行前に設定しておかないと、ブレイクが効きません。自分で作ったプロジェクトなら問題なくできるのですが不思議です。原因は調査中です。
8.次回予告
本記事では、まずFP-AI-SENSING1の開発環境の構築を行いました。次回はFP-AI-SENSING1のリバースエンジニアリングを行い、プログラムの構造を理解したいと思います。