【SensorTile kit】FP-AI-SENSING1の開発環境構築

FP-AI-SENSING1の開発環境の構築を行います。

1.FP-AI-SENSING1のダウンロード

FP-AI-SENSING1のダウンロードは前回の記事でご紹介しました。

【SensorTile kit】FP-AI-SENSING1でA.I.推論デモ

 

2.STM32CubeIDEのインストール

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>ボタンをクリック

SW4STM32からインポート

 

  • Directory…ボタンをクリック

FP-AI-SENSING1のプロジェクトディレクトリを選択

 

  • 下記のフォルダを選択してFinishボタンをクリック
    (バージョンによってディレクトリ構造が違うようなので注意します)
STM32CubeFunctionPack_SENSING1_V3.0.0\Projects\STM32L476RG-SensorTile\Applications\SENSING1\SW4STM32\STM32L4xx-SensorTile

 

下記のプロジェクト構成でインポートされます。

FP-AI-SENSING1のプロジェクト

 

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を選択

 

FP-AI-SENSING1のデバッグ設定

 

ここで注意点が1つあります。なぜかブレイクポイントをデバッグ実行前に設定しておかないと、ブレイクが効きません。自分で作ったプロジェクトなら問題なくできるのですが不思議です。原因は調査中です。

 

8.次回予告

本記事では、まずFP-AI-SENSING1の開発環境の構築を行いました。次回はFP-AI-SENSING1のリバースエンジニアリングを行い、プログラムの構造を理解したいと思います。

 

続き:【SensorTile kit】FP-AI-SENSING1をリバースエンジニアリング