RAファミリ最新情報とFSP

ルネサスは、最近元気です。特にRAファミリMCUにその傾向が顕著です。RAファミリ最新情報を2件ピックアップし、ルネサスRAファミリソフトウェア開発の鍵:FSP習得の重要性を示します。

Cortex-M85搭載AI処理実装RAファミリ

Cortex-M85搭載RAファミリによるAI人物検出デモ(出展:ルネサス)
Cortex-M85搭載RAファミリによるAI人物検出デモ(出展:ルネサス)

2023年3月14日~16日、ドイツ開催embedded world 2023で、ルネサスは、Cortex-M85コア搭載のRAファミリへAI処理を実装し、人物検出へ適用したデモを行いました。

従来、人物検出アルゴリズム実行には、Cortex-M7クラスMPU(Micro Processor Unit)が必要でした。このCortex-M85搭載RAファミリにより初めてMCUでもAI処理可能となり、MPU比、低コストで低消費電力動作など革命が起こるそうです。

このCortex-M85搭載RA MCUは、2023年中にリリース予定です。

SDR搭載RAファミリサンプル出荷

SDR(Software Defined Radio)は、ソフトウェアにより無線機能の変更が可能なハードウェアのことです。Cortex-M33コアRAファミリに搭載するSDRは、Bluetooth 5.3 Low Energyまでの各種Bluetooth仕様に対応しました。

つまり、ソフトウェアを更新すれば、常に最新バージョンBluetooth準拠のMCUになる訳です。2023年4月11日、このRA MCUのサンプル出荷が始まりました。

SDR搭載RA MCUは、ルネサス初の22nm製造プロセスMCUです。但し、22nmロジックとは異なる製造プロセスの不揮発性メモリを混載封止したSIP(System In Package)版MCUです。

不揮発性メモリまで同一の22nmで製造し、さらに高速で製造原価を下げたMCUの提供時期は、未定です。SIP版で機能優先のサンプル出荷を開始したのでしょう。

RAファミリへ最新技術を適用する理由

これら最新技術は、従来のMCUファミリには搭載しづらいです。その理由が以下です。

先ずハードウェア的には、最新技術が22nmなど先端MCU製造プロセスをベースにしていること、また、IoT向きCortex-M33/M85コアのRAファミリの方が、従来コアへ最新技術を追加するより性能的にも導入し易いこと、などです。

次にソフトウェア的には、RAファミリが、新しいFSP(Flexible Software Package)で開発することも一因です。簡単に言うと、FSPはAPI生成ツールです(関連投稿:MCUベンダAPI生成ツール比較2020年版)。

FSPは、HALやBSPなどハードウェア依存部分を隠ぺいしつつ効率的MCUソフトウェア開発ができる
FSPは、HALやBSPなどハードウェア依存部分を隠ぺいしつつ効率的MCUソフトウェア開発ができる

IoT MCU製品は、従来のベアメタルソフトウェア開発へ、RTOSや通信、セキュリティなど様々な機能が追加されます。

これら追加機能は、製品毎に適用が大きく変わる可能性が高く、その変更に対し開発ソフトウェア流用性や、柔軟かつ素早い対応も求められます(前章SDR搭載RA MCUが一例)。

FSPは、BSP(Board Support Package)やHAL(Hardware Abstraction Layer)を利用しMCU個別ハードウェア依存部分を隠ぺいしつつ、効率的かつ柔軟にソフトウェアの早期開発ができるよう工夫されています。

最新ルネサスMCUファミリソフトウェア開発の鍵FSP

つまり、ルネサス最新技術を活用したIoT MCU製品の早期開発には、FSPを上手く使えることが重要です。

FSPが扱うソフトウェアは、従来のベアメタル開発だけでなく、RTOS(Azure RTOS/FreeRTOS)や通信、各種USB、TrustZoneセキュリティなどと広範囲に及ぶため、FSP活用にはコツや慣れも必要です。

逆に、この鍵となるFSPを開発者が習得すれば、RAファミリに限らずルネサス最新IoT MCU製品化に、大きく貢献できる訳です。FSPは、RAファミリ以外のルネサスMCU開発へも適用されています。

まとめ

最新RAファミリソフトウェア開発の鍵:FSP
最新RAファミリソフトウェア開発の鍵:FSP

最新技術搭載のルネサスRAファミリMCUは、今後急速に増えます。最新RAソフトウェア開発の鍵:FSPを習得し、ベアメタル/IoT MCUソフトウェア開発に貢献できるようスキルを磨きましょう。

FSP習得方法

弊社RAベアメタルテンプレート(1000円税込)は、効率的かつ効果的にFSP習得ができます。将来的には、RTOSへも対応したRA RTOSテンプレート(仮名)も開発予定です。

判り易い添付資料と低価格で入手性が良いFPB-RA6E1、または、FPB-RA4E1評価ボードと、Baseboardを利用すれば、どなたでもFSP提供サンプルコードを活用、流用したRAベアメタル開発が可能で、FSP利用のコツも掴めます。是非、ご活用ください。




Tips)最新FSP v4.3.0でも、RTOS開発に100%対応はしていません。例えば、Developer Assistanceは、ベアメタルHAL callback関数定義はできますが、FreeRTOS callback関数定義はできません。
今後のFSP改版で、RTOSへの対応も広がるでしょう。但し、FSP習得タイミングとしては、ベアメタル開発に完全対応済みの「今がチャンス」と言えます。



MCUXpresso IDE v11をLPC845 Breakout boardで試す

まとめ

NXPのMCUXpresso IDE v11.0.0 [Build 2516] [2019-06-05]を使い、LPC845の評価ボードLPC845 Breakout boardの動作を確認し、サンプルプロジェクト赤LED点滅を緑LEDへ簡単に変更できる、SDK:Software Development Kitメリットを示しました。

LPCOpenライブラリなどを使った旧IDEに比べ、SDKを使うMCUXpresso IDE v11は、より早く簡単にソフトウェア開発が可能です。また、IDE更新とSDK更新が別々なため、常に最新ドライバ、BSP:Board Support Packageでの開発ができます。これもSDKメリットの1つです。

SDKは、ソフトウェア開発速度を上げる専用ライブラリ集です。MCUXpresso IDE v11のSDKを習得し、効率的なソフトウェア開発に慣れる必要があります。
これには、実際に評価ボード専用SDKを作成し、サンプルプロジェクトへ変更/修正を加え、SDKメリットを実感するのが早道です。本稿で用いたLPC845 Breakout boardは、SDK習得に好適です。

LPC8xxをアップグレートしたLPC845(64KB Flash、16KB RAM)評価ボード:LPC845 Breakout boardは、タッチパッド+デバッガ付きで低価格(¥697)、少サイズ(65x18mm)です。このサイズならそのまま装置へ実装も容易です。現場での短時間制御系アップデートや修理交換などに応用できます。

LPC845 Breakout board

LPC845 Breakout board
LPC845 Breakout board(出典:LPC84X MCU TECHNICAL OVERVIEWへ加筆)

LPC8xxシリーズは、アップグレートしたLPC84xとコストダウンしたLPC80xの2方向へ発展しました(関連投稿:NFCを使うLPC8N04のOTA)。LPC845評価ボード:LPC845 Breakout board (Cortex-M0+/30MHz)を入手しましたので、最新のLPCXpresso IDE v11を使って動作確認します。

LPCXpresso IDE v11.0.0 [2019-06-05]

最新LPCXpresso IDEは、v11.0.0 [2019-06-05]です。旧IDEからSDK:Software Develipment Kit追加、Pin設定方法が変わりました。既に旧IDEを使い慣れた方は、SDK活用の新LPCXpresso IDE v11に少し驚きを感じると思います。

LPCXpresso IDE v11ダウンロードとインストール

LPCXpresso IDE v11のダウンロードとインストールは、普通のPCアプリケーションと同じです。旧IDEではインストール後、アクティベーション手順が必要でしたが、v11は不要です。

また、デフォルトではプログラム/workspace共に専用フォルダ:MCUXpressoIDE_11.0.0_2516へ展開されます。つまり、旧IDEと共存します。ストレージ使用量は多くなりますが、共存するので安心して新旧IDEを試すことができます。

インストール後、Help>Check for Updatesを実行しIDEの更新有無を確認します。

また、最初のMCUXpresso IDE v11起動時にセキュリティソフトが警告を出すことがあります。お使いのセキュリティソフトに応じて対応してください(筆者Windows 10 Pro 1903のAvastは警告を出しましたので、例外追加で対応しました)。

LPCXprsso IDE v11インストール起動画面
LPCXprsso IDE v11インストール後、最初の起動画面

SDK Builder

SDKは、周辺回路ドライバ、サンプルプロジェクト、評価ボードサポートパッケージ:BSPなどを含む開発支援ツールです(SDKユーザガイドはコチラ)。インストールしたMCUXpresso IDEとは別に、ネット上のSDK BuilderでLPC845 Breakout board専用SDKを作成します(要ログイン)。

SDK BuilderのSelect Development Boardをクリックし、LPC845BREKOUTを選択します。後は、Build MCUXpresso SDKをクリックすると、作成したSDKの圧縮ファイル:SDK_2.6.0_LPC845BREAKOUT.zipがダウンロードされます(2.6.0は版数)。
※評価ボードによっては、Amazon-FreeRTOS、Azure IoTなどのミドルウェアもSDKへ追加可能です。

SDK設定

ダウンロードしたSDK圧縮ファイルを、LPCXpresso IDEのInstalled SDKsビューへドラッグ&ドロップするだけでSDK設定は完了です。

LPC845 Breakout boardの赤LED点滅動作

SDKにはLPC845 Breakout boardの赤LED点滅させる、いわゆるLチカサンプルプロジェクトがあります。このLチカソフトで評価ボードの動作確認をします。

IDEのQuickstart Panelビュー、Import SDK example(s)…をクリックします。Lpc845breakoutを選択後Nextをクリックします。Examplesのdemo_appsを開くとled_blinkyが現れます。これがLチカサンプルです。

Led_blinkyに☑を入れFinishをクリックすると、workspace内にlpc845breakouty_led_blinkyプロジェクトが展開されます。

LPC845 Breakout boardのLED点滅サンプルプロジェクトのインポート
LPC845 Breakout boardのLED点滅サンプルプロジェクトのインポート

何も変更せずに、Quickstart PanelビューのBuildをクリックするとコンパイルが成功します。評価ボードをPCと接続しDebugのクリックでCMSIS-DAPプローブを自動認識し、デバッグモード画面へ変わります。

後は実行などで赤LEDが1秒毎に点滅する動作が確認できます。

SDKサンプルプロジェクトそのものの動作確認は、以上のように簡単です。SDKのメリットは、プロジェクト変更や機能追加が簡単にできることです。例を次に示します。

LPC845 Breakout boardの赤→緑LED点滅の変更

赤LEDへの制御を緑LEDへ変更するには、IDEをDevelop画面からPin画面へ切替えます。切替は、Open Pinsクリック、またはIDE右上のデバイスアイコンのクリックどちらでもOKです。

LED_LED点滅からGREEN_LED点滅変更のPin画面
LED_LED点滅からGREEN_LED点滅変更のPin画面

Pin画面は、プロジェクト使用中のピン名、周辺回路などがハイライト表示されます。

lpc845breakouty_led_blinkyプロジェクトの場合は、PIO1_2とGPIOで、IdentifierにLED_REDとあります。Identifireは、ソースコード中で使えるマクロです。LED_GREENやLED_BLUEが既にあるのも解ります。このように評価ボード実装済みのハードウエアが、あらかじめSDKで定義済みです。

赤LED→緑LED変更は、Pin11のLED_GREENに☑を入れ、表示されるPIO1_0選択肢からデフォルトのGPIO,PIO_1_0を選びます。次にUpdate CodeをクリックすればPin画面の変更がソースコードへ反映されます。

LED_RED点滅からLED_GREEN点滅へのピン変更
LED_RED点滅からLED_GREEN点滅へのピン変更

ソースコード表示のDevelop画面へ切替えるには、右上のDevelopアイコンをクリックし、L16をコメントアウト、代わりにL17の追記で赤→緑LED点滅への変更完了です。ビルドして緑LED点滅動作を確認してください。

LED_RED点滅からLED_GREEN点滅へのソースコード変更
LED_RED点滅からLED_GREEN点滅へのソースコード変更

このようにサンプルプロジェクトの変更は、SDKに評価ボード実装ハードウエアが定義済みなので、ボード回路図を確認せずにすぐにできます(回路図を確認すれば万全ですが…😅)。

さて、緑LED点滅動作が確認できた後にソースコードへ下記3か所の変更を加えてください。

BSPを使った赤LEDの点滅
BSPを使った赤LEDの点滅

これは、board.hで定義済みのBSPを使った赤LED点滅へのソースコード変更です。追記したLED_RED_INIT(0)とLED_RED_TOGGLE()は、board.hに記述があります。L80:GPIO_PortToggle()よりもL81:LED_RED_TOGGLE()の方が、ソースコード可読性が高いことが解ります。

BSPは、評価ボードで使用頻度が高い関数やマクロを定義します。BSP活用でソースコード可読性が高まりケアレスミスも減ります。BSPは、SDK作成時に生成されます。

LPC845 Breakout boardのSDK活用例を示しました。SDKメリットも実感できたと思います。

LPCOpenライブラリを使ったLPC8xxテンプレートも、新しいSDK対応へUpgradeする必要があるかもしれません。SDKは、新しい評価ボードから対応中なので、残念ながら少し待つ必要があるかもしれませんが…😅。

STM32CubeMXの使い方Tips

STM32CubeMXは、STM32Fxマイコンのコード生成ツールとして良く出来ています。但し、現状1つ残念なことがあります。HAL:Hardware Abstraction Layerに加え、BSP:Board Support Packagesをドライバとして出力しないことです。そこで、現状のHALドライバのみ出力に対策を加えます。

STM32CubeMX
STM32CubeMX

STM32Fxファームウエア構成

STM32Fx Software Structure
STM32Fx Software Structure

STM32Fxファームウエア構成が上図緑線の個所です。STM32Fxマイコンサンプルソフトは、使用するファームウエアライブラリに応じて、Low Layer examples、Mixed HAL & Low Layer examples、HAL examplesの3種類あります。

各ファームウエアの差や、サンプルソフトの場所は、以前記事で解説しました。ここでは、STM32F0からSTM32F1へのポータビリティが最も高いHALライブラリ(=ドライバ)を使うサンプルソフト:HAL examplesに的を絞って解説します。

HAL Examples

このサンプルソフトの優れた点は、評価ボード実装済みの青SW(USER Blue)と緑LED(LD2)のみで全てのサンプルソフト動作を確認できることです。SW入力と、LED点滅間隔を変えることで、正常/NG/入力待ちなど様々なサンプルソフトの動作状態を表現します。

この青SWと緑LEDを制御するには、GPIO定義とHALライブラリを組合せた一種のサブルーティンがあると便利です。このサブルーティンが、BPS:Board Support Packagesです。例えば、下記などです。

BSP_LED_On()、BSP_LED_Off()、BPS_LED_Toggle()、BPS_PB_GetState()

BSP_が先頭に付いているので、一目で評価ボード実装済みの青SWや緑LEDを制御していることが判りますし、HALライブラリを使って表現するよりも、可読性もより高まります。BPSの中身は、HAL自身ですので、Drivers層のBSP、HALともに同じ黄緑色で表示しています。

HAL exampleは、これらBSPとHAL両方を使って記述されています。

STM32CubeMX

STM32CubeMXは、最初に使用する評価ボードを選択後、コード生成が行えます。

STM32CubeMX Board Selector
STM32CubeMX Board Selector

但し、生成コードに含まれるのは、HALドライバのみです。BSPは、HALサブルーティンですので、自作もできますが、評価ボードを選択するのですから、せめてHALのみか、それともHALとBSPの両方をドライバとして出力するかの選択ができるように改善してほしい、というのが私の希望(最初に言った現状の残念なこと)です。

もしHALとBPSドライバ両方がSTM32CubeMXで出力されると、多くのHAL Examplesを殆どそのまま流用できるメリットが生じます。HAL Examplesは、残念ながらエキスパートの人手で開発したソースですが、これを自動コード生成の出力へ、より簡単に流用できる訳です。

STM32CubeMX出力ファイルへのBSP追加方法

BSPドライバを自動出力しない現状のSTM32CubeMXで、上記希望をかなえる方法は、簡単です。

STM32CubeMX出力ファイルへのBSP追加
STM32CubeMX出力ファイルへのBSP追加

手動でBSPのstm32f0xx_nucleo.cとstm32f0xx_nucleo.hをSTM32CubeMX生成プロジェクトのSrcとIncフォルダへコピーし、main.cのL43へ、#include “stm32f0xx_nucleo.h”を追記すればOKです。
※stm32f0xx_nucleo.c/hは、\STM32Cube\Repository\STM32Cube_FW_F0_V1.8.0\Driversにあります。

たとえSTM32CubeMXで再コード生成しても、stm32f0xx_nucleo.c/hはそのままですし、追記した部分もそのまま転記されます。この方法で、HAL Examplesの流用性が向上します。

HAL Examplesを読むと、周辺回路の細かい設定内容が解ります。この設定をそのままSTM32CubeMXに用いれば、周辺回路の動作理解が進み、さらに自動コード生成ソースへ、Examplesソースをそのまま流用できるので、評価ボードでの動作確認も容易です。

まとめ

現状のSTM32CubeMXは、BSPドライバを出力しません。対策に、手動でBSPドライバを追加する方法を示しました。これによりエキスパートが開発したサンプルソフトを、より簡単に自動生成ソフトへ組込むことができます。

開発中の弊社STM32Fxテンプレートも、サンプルソフトを流用/活用が使いこなしのポイントです。そこで、このBPSを組込む方法をSTM32Fxテンプレートへも適用し、サンプルソフト流用性向上を図っています。