MCUとMPU二刀流開発#2

Visual Studio Codeを使ったRaspberry Pi Pico 2 MPU開発
Visual Studio Codeを使ったRaspberry Pi Pico 2 MPU開発

TrustZone対応Cortex-M33コアに変わったRaspberry Pi Pico 2のMCU開発者向けPico 2開発の2回目は、Visual Studio Code(VSC)でソフトウェア開発環境を構築し、最初のプロジェクトを作成します(二刀流開発背景やハードウェアは投稿#1参照)。

※MCU開発者向けPico 2開発とは、MCU開発者の視点でRaspberry Pi Pico 2 MPU開発を記述。
※本稿はMCU開発で使うEclipse IDEとVSCを比較。
※MCUは価格追及型、MPU/SBCは機能拡張型。

Visual Studio Code(VSC)

Visual Studio Codeインストール直後
Visual Studio Codeインストール直後

VSCは、Microsoftが開発したマルチプラットフォーム・多言語対応の新しいコードエディタです。上図英語版エディタへ、拡張機能をインストールして使います。

カスタマイズ性が高く人気の開発ツールです。MCU開発デファクトスタンダードのEclipse IDE代替としても普及し始めています。

MCUとMPUの二刀流開発者は、Eclipse IDEとVSCの2つの統合開発環境を使えることが必要です。そこで、Pico 2 MPU開発環境のVSCを構築します。

先に結論を言うと、見た目は違いますがVSCはMCU統合開発環境Eclipse IDEと殆ど同じ操作です。Eclipse IDEコマンドやViewがVSCにもありますので同じ感覚で操作できます。

※本稿のEclipse IDEとは、例えばブログ掲載中のNXP)MCUXpresso、ST)STM32CubeIDE、ルネサス)e2 studioなどのこと。どれもEclipse IDEをベースにAPI生成ツールが実装済みのMCU開発環境。

Pico 2 MPU開発環境のVSC構築

1. PC(Win/Mac/Linux)へVSCインストール(デフォルト設定でOK)
2. 拡張機能:Japanese Language Packのインストール(お好み言語インストール可能)
3. 拡張機能:Raspberry Pi Picoのインストール(Pico 1/2/W全て共通)

拡張機能のJapanese Language PackとRaspberry Pi Picoのインストール
拡張機能のJapanese Language PackとRaspberry Pi Picoのインストール

拡張機能は、左ツールバー上から5番目の拡張機能アイコンをクリックし、検索窓にキーワード、例えばJapaneseやPicoを入力して選びます。様々な拡張機能候補が表示されますので、概要などを見て適す機能を選びます。インストールをクリックすればVSCへのインストール完了です。

VSCは、結構な頻度で更新されます。左ツールバー一番下の歯車アイコンクリックで更新確認ができます。インストール済みの拡張機能も、歯車アイコンで様々な設定ができますが、デフォルト設定で問題は無いと思います。

このようにVSCは、英語版汎用エディタを開発者がカスタマイズして使います。一方、MCU開発は、デファクトスタンダードEclipse IDEをMCUベンダがカスタマイズし専用化したものを使います。一長一短がありますが、Pico 2 MPUだけでなく幅広い開発にも使えるVSCは人気上昇中です。

Pico 2 MPUのVSC開発準備

拡張機能の日本語表示は、VSC再起動後に有効になります。日本語に変わらない時は、View>Command Palletをクリックし、検索窓にJapaneseなどを入力すると、表示切替えコマンドが判りますので手動切替えができます。

Pico拡張機能インストール後、左ツールバーにMPUアイコンが現れます。これをクリックし、New C/C++ Projectをクリックした画面が、下図です。

拡張機能Raspberry Pi Picoインスト後、New C/C++プロジェクトクリック画面
拡張機能Raspberry Pi Picoインスト後、New C/C++プロジェクトクリック画面

MCU開発者にはお馴染みの開発プロジェクト名やデバッガ設定ができます。面白いのが、RISC-Vコアが選択できる点です。実はPico 2は、Cortex-M33とRISC-Vのディアルコア(!) MPUです。しかし、どちらか一方のみが開発に使えます。本稿は、Cortex-M33を使います。

Featuresは、追加ライブラリです。Pico 2は、機能拡張型MPUですので、SPI/I2Cなどのインタフェース経由でボード機能を拡張するためのライブラリです。

Pico 2サンプルプロジェクト作成

前章のNew C/C++ Project画面で、プロジェクト名や標準入出力(printf)の接続先UART0/USBを選択後、Createクリックで新規プロジェクトが作成できます。しかし本稿は、MCU開発者にお馴染みのサンプルコードから最初のプロジェクトを作成します。

New Project From Exampleでblink_simpleを選択
New Project From Exampleでblink_simpleを選択

New C/C++ Projectの3つ下New Project From Exampleをクリックし、Name欄にblink_simple、Board typeはPico 2を選択します。Locationに適当な保存先を入力し、これ以外はデフォルトでCreateをクリックするとサンプルコード:blink_simple.cが作成されます。

※Name右横▼から様々なサンプルコード選択可能。

最初はDownloading SDK and Toolchainなどがあるため、作成時間がかなりかかります。画面右下のステータスで状況が判ります。また、「作成者を信頼しますか」などの質問が来ることもあります。暫く待っていると、下記blink_simple.cが現れます。

Pico2サンプルプロジェクトblink_simple
Pico2サンプルプロジェクトblink_simple

gpio初期設定後に無限ループを実行し、この中でgpio出力のledを点滅します。MCUのLチカサンプルと同じ構成です。

Pico 2サンプルプロジェクトビルド&デバッグ

下段Compileクリックでビルドされ、サンプルなので成功結果がターミナルViewに示されます。Eclipse IDEと同じ画面構成です。

この後、#1投稿で購入したRaspberry Pi Pico 2、DebugProbeを下図のようにPCとUSB接続します。本サンプルは、UART0は使いませんが接続していても問題ありません。

Rapsberry Pi Pico 2とDebugProbeのPC接続
Rapsberry Pi Pico 2とDebugProbeのPC接続

左ツールバー上から4番目の実行とデバッグ(Ctrl+Shift+D)アイコンをクリックすると、オブジェクトがPico 2へダウンロードされ、変数などが確認できるデバッグ画面に変わります。また、Eclipse IDEデバッグでよく使う続行(F5)やステップインなどのデバッグツールバーも表示されます。これらを使ってデバッグします。

blink_simple以外にも、様々なサンプルプロジェクトがあります。これらでPico 2 MPU理解が進みます。

Summary:MCU開発者のPico 2開発#2

最新MPU Cortex-M33コアRaspberry Pi Pico 2を使い、MCU開発者案件をMPUへも広げること、Eclipse IDE代替可能性のあるVisual Studio Code(VSC)習得を狙った投稿2回目は、以下VSC基本操作を示しました。

  • Pico 2 MPU開発環境VSC構築と開発準備
  • Pico 2サンプルプロジェクトビルドとデバッグ

統合開発環境としてのVSC操作やプロジェクト作成手順は、当然ですがMCU開発環境Eclipse IDEと殆ど同じです。但し、コマンド配置やファイル操作は、専用Eclipse IDEに一日の長があると思います。

VSCメリットは、今後期待されるAI活用プログラミングとの連携が良いことです。生成AI牽引GOMAの一角を占めるMicrosoft製だからです。

VSC基本操作を文章で書いたので長文になりました。端的に言えば、VSC操作は、MCU開発で使うEclipse IDEと同じです。Eclipse IDEで使うアイコンやコマンドはVSC画面内にあります。Pico 2サンプルを数個試せば、VSCにも慣れると思います。

Afterword:Pico 2ピン配置

サンプルコード利用時に役立つRaspberry Pi Pico 2:RP2350ピン配置を示します。本稿blink_simpleサンプルledは、GP25と判ります。また、豊富なSPI/I2Cインタフェースを使ってPico 2 MPUの機能拡張を行うのも判ります。

Rapsberry Pi Pico 2(RP2350)のピン配置
Rapsberry Pi Pico 2(RP2350)のピン配置



 

MCUとMPU二刀流開発#1

Rapsberry Pi Pico2開発環境
Rapsberry Pi Pico2開発環境

今年8月9日、英国ラズパイ財団が新しいRaspberry Pi Pico 2(以下Pico 2)を発表しました。Pico 2は、MCU開発者向けMPUです。従来MPU/SBCが採用していたCortex-Aなどの定番MPUコアから、セキュリティTrustZone対応Cortex-M33コアに変わったからです。そこで、MCU開発者向けPico 2開発の連載を始めます。

この連載で筆者を含めたMCU開発者は、最新MPU(Pico 2)のMCU的開発とVisual Studio Code(VSC)習得ができます。狙いは、開発の幅をMCUからMPUへも広げること、Eclipse IDE代替可能性もあるVSC習得の2つです。

※MCU的開発とは、例えばPico 2(RP2350、Cortex-M33 or RISC-V/150MHz、Flash/4MB、RAM/520KB)とMCUでお馴染みの表記をするなど「MCU開発者の視点でMPUを開発」ということです。

Summary:MCU開発者のPico 2開発#1

最新MPU Cortex-M33コアRaspberry Pi Pico 2を使い、MCU開発者案件のMPUへの拡幅、Eclipse IDE代替VSC習得を狙った投稿の1回目を示しました。

投稿#1内容が以下で、投稿背景とPico 2開発ハードウェアを示しています。

・MCU側からみたMPU開発の差
・MCU開発者が最新Raspberry Pi Pico 2 MPUを使うメリット
・Pico 2 MPU開発ハードウェア入手先情報
・TrustZone Cortex-M33 MCU/MPU二刀流開発の勧め

次回は、Pico 2開発ソフトウェアのVSC構築を投稿予定です。本投稿は、今後不定期に続けます。

※MCU(Micro Controller Unit)とMPU/SBC(Micro Processor Unit/Single Board Computer)の差を極簡単に言うと、MCUは価格追及型、一方、MPU/SBCは機能拡張型です(詳細は関連投稿参照)。

MPUとMCU開発差

同じCortex-M33コアでもMCU開発者とMPU開発者は異なるアプローチ
同じCortex-M33コアでもMCU開発者とMPU開発者は異なるアプローチ

MCU開発者なら当たり前の事でも、MPU側から見ると違う事柄が、コチラの記事前半で良く判ります。記事からピックアップした具体例が下記です。

・MPUは、ネイティブコード以外の開発もある
・サンプルコードは、全MPUペリフェラルをカバーしていない
・オンチップデバッグ無しのMPUボードもありJTAG/SWDの馴染みが薄い

一方、新しいPico 2が、MCU開発者に向いている理由が下記です。

・MCU開発者に馴染みがあるTrustZone対応Cortex-M33コアMPU
・MCU標準開発環境Eclipse IDE代替可能性のあるVSCが開発環境
・Windows/Macで開発できPico 2ボードとDebug Probe価格も低い
・Cortex-M33とRISC-Vのコア切替えもでき発展性に優れる
・Pico 2でオープンソースソフト/ハード開発を体験できる

つまり、MCU開発者の知識や経験を活かし、新しいPico 2 MPU開発ができます。その結果、低い障壁でMPU開発が始められます。

また、業務とは別の自分のキャリアアップにも役立つと思います(二刀流開発の勧め章参)。

Pico 2 MPU開発ハードウェア入手先

最初の図のPico 2とDebugProbeの2つが、購入するハードウェアです。

新しいPico 2は、従来比、1.5~2倍の高性能と省電力性が特徴です。DebugProbeは、専用ケースに入っており接続ケーブルも付属で使い易いです。

秋月電子通商やスイッチサイエンスなどから購入できます。秋月の方が低価格ですが、取扱数量が少ないとサイト記述があります。

・Raspberry Pi Pico 2:秋月電子スイッチサイエンス
・Raspberry Pi DebugProbe:秋月電子スイッチサイエンス

Pico 2開発環境Visual Studio Code

前述の記事後半に、Pico 2開発環境のVSC構築方法と、従来MPUで自作したデバッガー(Picoprobe)を使ったLチカプログラミングが記述されています。

但し、本連載は市販DebugProbeを使います。また、VSC構築は、次回投稿します。先行してPico 2開発環境を構築したい方は、記事を参考にしてください。

Cortex-M33 MCU/MPU二刀流開発の勧め

MCUとMPUの二刀流でTrustZone Cortex-M33を開発
MCUとMPUの二刀流でTrustZone Cortex-M33を開発

今から10年後、2034年の日本とエンジニアの記事は興味深いです。

日本の人口減少と共にエンジニアに求められるスキルも変わり、「高度なスキルに加え、より早く開発業務をこなす能力も求められる」という趣旨です。

本稿のPico 2 MPU開発もこの記事の趣旨がベースになっています。つまり、MCU比、MPU開発は、オープンソースソフト/ハードへの対応が良く、早い業務開発に向いています。

IoTに必須のセキュリティ機能を持つTrustZone Cortex-M33を、高度スキルを活かしたMCU、オープンソースソフト/ハードを活かしたMPU、どちらでも開発できれば、顧客要求を満たすエンジニアになれます。

顧客にとって実現手段はMCUでもMPUでも構わない、開発期間とトータルコストが問題です。この問題を解ける開発者、TrustZone対応Cortex-M33のMCUとMPU二刀流開発者が目標です(ワールドチャンピオンドジャースの大谷翔平氏のように)。

Afterword:Pico 2オープンソースハード/ソフト例

MPU/SBC(小さいコンピュータ)の拡張性を支えるオープンソースハード/ソフトは、市場に数多くあります。これらを上手く使えば、MCU比、早く大規模な開発に役立ちます。ここでは、3例を挙げます。

・AI強化:Raspberry Pi AI Kit、13TOPS NPU追加。
・表示デバイス追加:Tiny2350、カラー液晶追加。
・SSD追加:Raspberry Pi SSD Kit、256GB/512GB追加。

極簡単に言うと、機能を拡張したい時は、これらRaspberry対応のオープンソースハード/ソフトを探し、それをPico 2へ組込めばOKです。正にコンピュータへボード追加のイメージです。多くの機能ボードとボードを動かすソフトが、低コストで入手できますので、MCU比、短期間で簡単に機能拡張できるのが、MPUのPico 2です。


2つのTrustZone開発方法

セキュアマネジャ利用対2領域開発
セキュアマネジャ利用対2領域開発

STマイクロ)STM32H5とSTM32U5は、どちらもTrustZone対応Cortex-M33マイコンです。しかし、そのTrustZone開発方法は、STM32H5がSecure Manager利用、STM32U5がSecure/Non Secureの2領域開発など大きく異なります。

本稿は、これら2つのTrustZone開発方法の概要と特質を説明します。どちらが一般のMCU開発者向けかも示します。詳細は、STM32H5はコチラ、STM32U5はコチラのウェビナー資料を参照ください。

STM32H5とSTM32U5

STM32 TrustZome対応MCUポートフォリオ(STM32H5ウェビナー資料P3を編集)
STM32 TrustZome対応MCUポートフォリオ(STM32H5ウェビナー資料P3を編集)

STマイクロのTrustZone対応Cortex-M33コアマイコンファミリは、現在上図の4種類あります。最高動作周波数や内蔵周辺回路が想定アプリケーションにより異なりますが、どれもTrustZone対応のセキュアマイコンです。

※TrustZone基本は、コチラの投稿参照。

Cortex-M33マイコンのセキュリティ機能

STM32 Cortex-M33ハードウェアセキュリティ機能一覧(STM32U5ウェビナー資料P36を編集)
STM32 Cortex-M33ハードウェアセキュリティ機能一覧(STM32U5ウェビナー資料P36を編集)

4種セキュアマイコンのハードウェアセキュリティ機能一覧が上図です。基本機能のTrustZoneやSecure Memory利用セキュアブートは、4種マイコン共に持っています。

これらセキュリティ機能一覧から、必要性に応じて開発ユーザアプリへセキュリティ機能を追加することをセキュリティ開発、その中心がTrustZoneなのでTrustZone開発と言います。

※Secure Memory利用セキュアブートは、コチラの投稿参照。

STM32U5セキュリティ開発方法

マイコンセキュリティの目的は、ハッカー攻撃などによる開発ソフトウェアの改ざん防御です。従って、想定アプリにより多少の違いがあっても、基本となるセキュリティの開発方法は、マイコンにかかわらず同じと考えるのが普通です。

事実、STM32U5やSTM32L5、STM32WBAは、以下の同じセキュリティ開発方法です。

STM32U5セキュリティ開発方法(STM32U5ウェビナー資料P52を編集)
STM32U5セキュリティ開発方法(STM32U5ウェビナー資料P52を編集)

つまり、TrustZone基本投稿で示したように、マイコンハードウェアをSecure領域とNon Secure(Normalと図示)領域に分離、Non Secureソフトウェア(Firmwareと図示)のSecure領域直接アクセス禁止により改ざん防御を行います。

この方法は、Secure領域とNon Secure領域の2プロジェクト開発が必須です。

具体的な2領域分割や領域間アクセス方法などは、STM32U5ウェビナー資料3章に記載されています。

筆者は、開発当初からの2プロジェクト開発は、困難と考えています。最初は領域を分けず一般的な1プロジェクトアプリを開発し、動作確認後にSecure/Non Secureの2プロジェクトへ分離する手順になると思います。

STM32H5セキュリティ開発方法

STM32H5のセキュリティ開発方法は、前章とかなり異なります。

STM32H5セキュリティ機能は、STマイクロがバイナリ形式でIPを提供し、これをセキュア領域へ保存します。MCU開発者は、このIPセキュリティ機能を、Arm PSA API互換のAPI経由で、Non Secure領域のユーザアプリから利用します。

STM32H5セキュリティ開発方法(STM32H5ウェビナー資料P9を編集)
STM32H5セキュリティ開発方法(STM32H5ウェビナー資料P9を編集)

簡単に言うと、Non Secure領域の動作アプリに、必要に応じてセキュリティ機能APIを追加すればセキュリティ開発ができます。セキュア領域のセキュリティ機能は、ST提供IPのためユーザ開発不要です。

このSTM32Trust TEE Secure Managerが使えるのは、現在STM32H5のみです。しかし、今後増えるそうです。

具体的なSecure Manager利用方法や評価ボードなどが、STM32H5ウェビナー資料3章に記載されています。

筆者は、このSecure Manager利用の方が、前章の2プロジェクト開発方法よりもシンプル、かつ、セキュリティ本体コーディングも不要なため優れていると思います。PSA API利用ソフトのSTマイコン横展開が、現在STM32H5に限られるのは残念です。逆に、他ベンダマイコンへの流用は、Arm PAS API互換のため容易かもしれません。

Summary:2つのTrustZone開発方法

セキュアマネジャ利用対2領域開発
セキュアマネジャ利用対2領域開発

STマイクロのTrustZone対応Cortex-M33マイコンSTM32H5とSTM32U5の2セキュリティ開発方法と特質を示しました。

セキュリティ開発は、その用語や費用対効果などが、一般のMCU開発者に判り難い領域です。また、Cortex-M33のTrustZone理解も必要です。

このTrustZoneに対し正攻法のセキュリティ開発方法は、STM32U5ウェビナー資料方法です。STM32L5やSTM32WBAへの開発セキュリティソフト横展開も可能です。

STM32H5ウェビナー資料方法は、Arm PAS API互換APIを利用し、かつ、セキュリティソフト開発を簡素化できるなど、正攻法比、優れた方法だと思います。

Afterword:どちらが一般MCU開発者向けか?

Secure Managerは、無償利用できます。また、RTOS以外のベアメタル開発にも使えます。さらに、STM32H5ウェビナー資料P6右側の暗号化エンジンなど全12セキュリティ機能も提供します。左側が、このセキュリティ開発方法の優位性を示しています。

最適STM32セキュリティ開発を実現するセキュアマネジャ(STM32H5ウェビナー資料P6を編集)
最適STM32セキュリティ開発を実現するセキュアマネジャ(STM32H5ウェビナー資料P6を編集)

STマイクロ以外のベンダでも、無償IPとArm PAS API互換のセキュリティ開発が多くなるかもしれません。一般のMCU開発者にとって、正攻法のセキュリティ開発は、障壁がかなり高いからです。


Arm TrustZone【組込み開発 基本のキ】

MCUセキュリティの2回目は、Arm TrustZoneについて解説します。前稿解説のセキュアブートは、MCU起動ソフトウェアの信頼検証を行います。Arm TrustZoneは、MCU実行中ソフトウェアの改ざん防御技術です。

TrustZoneもベンダやMCU毎にその実装が大きく異なりますので、TrustZone基本知識を解り易く説明後、実装例を示します。

※TrustZoneはセキュアブートも包含します。本稿はセキュアブート以外の内容を解説し、Summaryでまとめます。

Arm TrustZone基本

Arm TrustZone基本
Arm TrustZone基本

セキュアブート同様、Arm TrustZone(以下TrustZone)も専用ハードウェアで実行中MCUソフトウェアの改ざん防御やセキュリティ確保を行います。

TrustZoneは、気密性の高いデータ保存や重要周辺回路、処理ソフトウェアを保存する「セキュア領域」と、それ以外の「ノンセキュア領域」にMCUハードウェアを分離します。そして、ノンセキュア領域のソフトウェアは、予め決めた手続きに従わないと、セキュア領域へのアクセスができません。

つまり、ノンセキュアソフトウェアのセキュア領域直接アクセスが禁止です。これにより、セキュア領域の改ざん防御とセキュリティを確保します。

セキュア領域は、暗号鍵や機密データ、割込みハンドラなどの重要ソフトウェアを保存します。
ノンセキュア領域は、通常の周辺回路やアプリケーションソフトウェアを保存します。

TrustZoneセキュリティ違反検出時は、セキュリティ例外処理を実行します。この処理内容は、システム設計や実装により大きく異なります。例えば、MCU動作停止やセーフモードでの最小機能動作、ネットワーク経由での違反内容通知などがあります。

このようにTrustZoneは、様々なセキュリティレベルに柔軟に対応可能です。TrustZone対応Arm Cortex-Mコア一覧が下記です。Cortex-M33など新しい設計のArmv8-M MCUコアは、TrustZone内蔵です。

TrustZone対応Arm Cortex-M_Processor_Comparison_Tableに加筆(出典:ARM)
TrustZone対応Arm Cortex-M_Processor_Comparison_Tableに加筆(出典:ARM)

※Cortex-M7は、MPUで設計も古いためTrustZoneなし。TrustZone MPUは、Cortex-A35など。

TrustZone実装例

前章でTrustZoneの基本を解説しました。しかし、実際のTrustZoneは、もっと複雑です。

例えば、STマイクロ)STM32L5/U5 MCU(Cortex-M33コア)のTrustZoneウェビナー資料が、コチラからダウンロードできます。

I2C/SPIへのハッカー攻撃例(P10)とその防御(P11)、TrustZone分離例(P20)、セキュリティ違反検出方法(P21~23)、TrustZone初期設定フロー(P29)などが示されています。

また、TrustZoneにJTAGポート無効化やMCUパッケージ開封検出(タンパ検出)などの複数セキュリティ機能を重ね、セキュリティレベルを上げていることも判ります(P17)。

複数セキュリティを重ねセキュリティレベルを上げる(出典:STマイクロSTM32L5/U5 MCU TrustZoneウェビナー資料)
複数セキュリティを重ねセキュリティレベルを上げる(出典:STマイクロSTM32L5/U5 MCU TrustZoneウェビナー資料)

この実装例は、Secure User Memory(P15)格納の暗号鍵を使ってセキュアブート後、I2Cデバイス制御とSPI無線通信制御を重要ソフトウェアセキュア領域へ格納、ハッカー攻撃などセキュリティ違反検出時でも、これらセキュアソフトウェア処理は継続、かつ、セキュリティ違反検出内容を外部無線通知するMCUアプリだと推測します。

※ウェビナー資料でファームウェアと記述の箇所は、本稿のソフトウェアと解釈してください。

TrustZone開発の難しさ

TrustZoneを使うMCU開発は、通常開発に加え、

  • 想定攻撃、脅威は何か
  • セキュリティ違反の例外処理をどうするか
  • 例外処理デバッグはどう行うか
  • セキュア領域の重要ソフトウェア、周辺回路は何か
  • セキュア/ノンセキュア分離アプリの同時開発

など、多くの課題があります。また、セキュア/ノンセキュア分離前の通常アプリにバグが無いことも必要です。さらに、セキュリティ対策効果とリスク、開発コストに対し、費用対効果を顧客と相談する必要もあります。

TrustZone MCU開発は、高度なスキルが必要になると思います。

Summary:Arm TrustZone基本知識

組込み開発基本のキとして、MCUハードウェアをセキュア領域とノンセキュア領域に分離し、ノンセキュアソフトウェアのセキュア領域直接アクセスを禁止することで、実行中のセキュア領域ソフトウェア改ざん防御とセキュリティ確保を行うArm TrustZoneの基本を示しました。

TrustZoneセキュリティ違反検出時は、セキュリティ例外処理を実行します。この例外処理内容は、システム設計や実装により大きく異なります。このセキュリティレベル多様性理解には、TrustZone基本知識が重要です。

前稿解説セキュアブートは、MCU起動ソフトウェア信頼性の検証を行います。セキュアブートとTrustZoneの併用で、起動/実行中のソフトウェア改ざん防御とセキュリティ確保ができます。TrustZoneが、セキュアブートを包含する理由がこれです。

Arm TrsutZomeまとめ
Arm TrsutZomeまとめ

Afterword1:自転車ロードレース競技中のハッキング

ワイヤレス技術利用制御系の潜在的脆弱性攻撃例が、コチラにあります。350ドル程度のソフトウェア無線機HackRFやRaspberry Piなどでも攻撃可能だそうです。本稿のTrustZone実装例が対策に使われたのかもしれません。ハッキング検出時でも、簡単に動作停止できない(しない)事例です。

Afterword2:MCUセキュリティまとめ

セキュアブートとTrustZoneから、MCUセキュリティを俯瞰したのが下記です。

  • 攻撃対象ソフトをRoot of Trust(RoT)ハードで守るのがMCUセキュリティ
  • RoTハードでセキュリティ違反検出、例外処理ソフトで違反処理
  • セキュリティ実装はアプリや運用で大きく変わる。開発費用対効果の検討必須
  • Armv8-M以後の新しいMCUコアにRoT TrustZone内蔵

費用対効果には、セキュリティ全般知識も必要です。これは、セキュリティ実装開発とは別次元の難しい課題です。対策は、AI PCを使ったセキュリティコンサルタント育成などでしょうか?

ブログ右上検索窓へ「基本のキ」と入力し検索すると、様々なMCU開発者向け基本知識が得られます。ご活用ください。


MCUセキュアブート【組込み開発 基本のキ】

ランサムウェア攻撃による企業活動停止やWindowsブルースクリーン大規模障害など、重大セキュリティインシデントが急増中です。MCU開発者にとっても、他人事ではありません。

そこで、MCUセキュリティの基礎、MCUセキュアブートとArm TrustZoneを2回に分けて解説します。セキュアブート編が本稿です。

MCUセキュリティが判り難い原因は、ベンダ、MCU毎にセキュリティレベルや実装が大きく異なるからです。そこで、個別セキュリティの前に、基本知識としてMCUセキュアブート(本稿)とArm TrustZone(次稿)を解り易く示し、その後、実装例を示す2段構えの方法で解説します。

MCUセキュリティ背景

MCUソフトウェアは、悪意を持つ第3者による改ざんやウイルス感染などで書き換わる可能性があります。一方、改ざんの可能性が無く安全なのは、MCUハードウェアです。

従来のMCU開発は、サイバー攻撃などのソフトウェア書き換えは、想定外でした。

しかし、PCセキュリティトラブルやランサムウェア被害などが増え、MCUも攻撃対象となりました。特にIoT MCUは、ネットにつながるため防御が必須です。この防御全般がIoT MCUセキュリティ(以下MCUセキュリティ)です。

セキュリティリスクを下げるには、開発コストが上がる。MCU開発者は、費用対効果バランスも考える必要がある。
セキュリティリスクを下げるには、開発コストが上がる。MCU開発者は、費用対効果バランスも考える必要がある。

今後のMCU開発では、MCUセキュリティ対策が望まれます。しかし、ソフトウェアのみでは対処できないため、セキュリティレベルに応じた追加ハードウェアが必要です。また、セキュリティオーバーヘッドのため、通常のセキュリティ無しソフトウェアに比べ処理能力も低下します。

MCUセキュリティ開発は費用対効果、つまり、これら追加効果とセキュリティリスク、セキュリティ開発コストのバランスを、どう解決するかがポイントです。

実装セキュリティがベンダやMCU毎に異なるのは、このポイントにバラツキがあるためです。顧客が、起きるか起きないか判らないMCUセキュリティインシデントに対し、どの程度開発コストを負担するか不明なのと同じです。

MCUセキュアブート基本

セキュアブート解説の前に、通常のMCUブートを簡単に説明します。

通常のMCUブートは、リセット→動作クロック設定→RAMゼロクリア→RAM初期値設定などを経て、Flash格納ユーザアプリケーションを起動します。格納ソフトウェアに、ハッカー攻撃などの改ざんが無いことが大前提です。

関連投稿3章に通常ブート説明。

MCUセキュアブートと通常ブート
MCUセキュアブートと通常ブート

一方セキュアブートでは、最初にFlash格納ソフトウェアに改ざんが無いことを、暗号化技術を使って検証します。このため暗号化アクセラレータや暗号鍵の専用ストレージが必要になります。

検証失敗時は、動作停止、またはリカバリーモードへ移行し、検証成功時のみ通常ブートを行います。つまり、起動ソフトウェアの信頼検証をハードウェアのみで行うのが、MCUセキュアブートです。

通常ブートと比べると、事前に改ざんソフトウェアの実行が防げますが、検証時間が余分に掛かります。このセキュアブートハードウェアをRoot of Trustと呼び、専用ハードウェアとしてMCUに内蔵されます。例えば、Arm Cortex-M33コアMCUなどがこれに相当します。

Root of Trust(RoT)は、最も基本的なセキュリティ領域の保証概念。ここが信頼できることを前提にセキュリティが構築されるため、信頼根と呼ばれる。

高度車載セキュアブート実装例

前章でMCUセキュアブートの基本を解説しました。しかし、実際のセキュアブートは、もっと複雑です。

例えば、ルネサス車載MCU RH850セキュアブートが、コチラです。

高度なセキュリティレベルが求められる車載MCUのセキュアブート例で、豊富な図を使って解説しています。セキュリティ専門用語も多いため、用語や略称集も添付されています。

しかし、前章基本を理解していれば、高度車載MCUセキュアブートでも掲載図だけで概ね把握できると思います。

車載ソフトウェアイメージ検証(出典:ルネサスRH850セキュアブート)
車載ソフトウェアイメージ検証(出典:ルネサスRH850セキュアブート)

Summary:MCUセキュアブート基本知識

MCUセキュリティの実装は、セキュリティ対策効果とリスク、その開発コストにより大きく変わります。Root of Trustを持つCortex-M33コアの汎用MCUでさえ、アプリケーションや顧客要求に応じ実装セキュリティは変わります。

例えばセキュアブートは、MCU起動時処理のため常時運用など再起動が少ない場合は効果も期待薄です。

MCU開発者のセキュリティ実装を困難にする原因の1つが、この多様性です。

そこで、組込み開発基本のキを示す本稿は、MCUセキュリティ基本知識として、起動時ソフトウェア信頼検証をハードウェアのみで行うMCUセキュアブートと、そのセキュアブート実現基盤のRoot of Trustを解説しました。

基本知識があれば、様々なセキュリティ実装開発にも対応できるからです。

次回は、MCU運用中セキュリティを確保するArm TrustZoneを解説します。

Afterword:Windowsブルースクリーン記事

Windowsブルースクリーン記事や解説が、ITmediaにまとまっています。業務の合間などリフレッシュを兼ねて目を通してはいかがでしょうか?


Cortex-M85搭載RA8シリーズ説明

前投稿MCUとMPUの違いで紹介したルネサスRAファミリ最新MCUのRA8シリーズを説明します。
RA8は、従来Cortex-M7クラスの高性能MPUが必要なAI処理を、低コスト・低消費電力なAI MCUで実現します。

Cortex-M85コア

Cortex-M85特性比較(出典:ARM)
Cortex-M85特性比較(出典:ARM)

ARM Cortex-M系コアの比較表がコチラにあります。本ブログ関連を抽出したのが上表で、右側へ行くほど新しいコアになります。

Cortex-M85が、MPUのCortex-M7を超えるコア性能を持つことが判ります。

RA8シリーズ

RA8シリーズMCUポートフォリオとパーツ番号
RA8シリーズMCUポートフォリオとパーツ番号

Cortex-M85コア搭載のルネサスRAファミリMCUが、RA8シリーズです。今日現在、RA8シリーズは、RA8D1RA8M1RA8T1の3種類が発売中で、それぞれに評価ボードも提供中です。

RA8シリーズMCUポートフォリオとパーツ番号を示します。RA8xyのxが想定アプリケーション、yが改版数を示します。アプリケーションには、顔検出やモータ故障検出などのAI機能も含まれます。

AI顔検出が解りやすいので、以下、ディスプレイアプリケーションのRA8D1 MCU評価ボードを使ってAI MCU実例を示します。

評価ボード:EK-RA8D1

EK-RA8D1
EK-RA8D1

RA8D1(Cortex-M85/480MHz、ROM/2MB、RAM/1MB)評価ボードEK-RA8D1です。4.3インチカラー液晶と3MピクセルCMOSカメラも付属しています。RA8 Series Evaluation Kits Demo Overviewで解説動画を見ることができます。

クイックスタートガイドユーザーズマニュアルがダウンロードできます。

サンプルコード:EK-RA8D1 Example Project Bundle

EK-RA8D1のサンプルコードは、EK-RA8D1 Example Project Bundle(要ログイン)です。この中の_quickstartプロジェクトが、評価ボード実装済みサンプルコードです。

評価ボードと液晶、カメラ装着後、初めて電源投入すると_quickstart が動作します。この_quickstartサンプルコードが、Summaryで示すAI顔認証やオブジェクト検出を行います。

_quickstartのソースコード一覧です。FreeRTOSで開発されています。従って、ソースコードの移植性は高いと思います(関連投稿:FSP利用FreeRTOSアプリの作り方)。

_quickstart_ek_ra8d1_epのソースコード一覧
_quickstart_ek_ra8d1_epのソースコード一覧

Summary:Cortex-M85搭載RA8シリーズ説明

高性能MPUのAI処理を、低コスト・低消費電力MCUで実行するDSPやAI/ML性能強化Cortex-M85コアを説明し、同コア搭載RA8シリーズ最新MCUのRA8D1(Cortex-M85/480MHz、ROM/2MB、RAM/1MB)評価ボードEK-RA8D1と付属_quickstartサンプルコードを説明しました。

AI MCUアプリケーション例として、評価ボードへ液晶パネルとカメラを接続すれば、AIによるカメラ内顔検出、オブジェクト検出ができます。

AI MCUのカメラ内の顔検出とオブジェクト検出(出典:クイックスタートガイド )
AI MCUのカメラ内の顔検出とオブジェクト検出(出典:クイックスタートガイド )

Afterword:AI MCUアプリケーション開発方法

MCU開発能力に加え、幅広いAI知識もAI MCUアプリケーション開発に必要です。

AI MCUアプリケーションを開発する時は、本稿評価ボードとサンプルコードによる顔検出やオブジェクト検出AIサンプルコードをベースに、目的とする顧客AIアプリへ修正・変更を加えながらAIを習得することも効率的・効果的な方法だと思います。


評価ボード活用MCU製品開発

MCUの正常動作には、安定したクロック供給が最重要です。これは、ソフト/ハード、どちらの開発者も知っておくべき基本です。デジタルデバイスの動作保証は、安定クロックがあってこそだからです。

ルネサスRX、RAファミリで説明しますが、全ベンダの評価ボードでも同様です。ぜひ本稿を参考にしてください。

メイン/サブクロック回路基板設計要点

2024年2月発行のRX、RAファミリ向けアプリケーションノートを使って、製品開発にベンダ評価ボード活用メリット/デメリットを説明します。

メインクロック回路、サブクロック回路のデザインガイド Rev.1.00 (PDF) (日本語)
Design Guide for Main Clock Circuit and Sub-Clock Circuit Rev.1.00 (PDF) (英語)

※アクセス時、ログインが必要な場合があります。

メインクロックとサブクロックの基板例(出典:図26)
メインクロックとサブクロックの基板例(出典:図26)

RX、RAファミリのMCUを対象に、メイン/サブクロック発振回路基板パターンやルネサス推薦発振子メーカなど、特にMCUクロック関連回路の基板設計要点をまとめたのが、上記アプリケーションノートです。

MCUの動作を決めるのがメインクロック、サブクロックはRTC(時計機能)に使います。全てのデジタルデバイスは、正確なパルス幅の安定したクロックが供給されて初めて正常に動作します。MCUは、なおさらです。

クロックが不安定な場合は、原因不明のMCUトラブルが発生します。外来ノイズにも脆弱です。このような異常状態では、デバッグなどできません。

例えが悪いですが、人間で言えば「心不全」のようなものです。メインクロックの働きを具体的に知りたい方は、コチラを参照(正常クロック供給下の解説)。

従って、クロック回路基板設計要点を守った上でのMCU製品開発が最重要です。

基板設計理想解と現実解

前章の基板設計ガイドは、クロック関連部品だけの理想的な基板、つまり、「理想解」です。

しかし、実際の基板設計は、大きさやコスト、クロック以外の他部品の配置など様々な事柄を考慮する必要があります。そして、それらの総合判断結果が「現実解」であり、実際の製品基板です。

現実解は、ベンダMCU評価ボードでも同じです。

RAファミリRA6E1評価ボードのMCU回り基板を示します。理想解と違っても部品配置、クロック配線の太さ・短さ、そのシールドなど参考にすべき基板回路を持つ現実解です。

RAファミリRA6E1のMCU周り基板現実解
RAファミリRA6E1のMCU周り基板現実解

各ベンダMCU評価ボード目的

前章のMCU評価ボード現実解は、ルネサスRX、RAファミリに限った話ではありません。

つまり、クロック要点を満たし外来ノイズにも強く、かつ、Arduinoシールドコネクタなどで拡張機能も実装済みのデバイスが、各ベンダのMCU評価ボードです。これらは、MCUベンダ自身の開発ボードですので、極めて高い製品クオリティを持っています。

ベンダMCU評価ボードとは、MCUを評価するためのボードです。しかし、同時に、MCUが正常に動作するベンダ推薦発信器や基板パターンの製品ハードウェア手本も示していると言えます。

プロトタイプ時、各ベンダ評価ボードをそのまま制御系に流用するのは、原因不明MCUトラブル(心不全)を避ける手段として有効であることが判ると思います。

評価ボード活用得失

プロトタイプにMCU評価ボードを流用するメリット/デメリットをまとめます。構成は、下記とします。

プロトタイプ構成=評価ボード+ユーザ機能ボード+ユーザソフトウェア
ボード間接続=Arduinoコネクタ

メリット

  • 高信頼制御ハードウェアが、評価ボードにより簡単に得られる
  • 制御能力過不足時、Arduinoコネクタを持つ別評価ボード交換可能
  • ユーザ機能デバッグに集中できる

デメリット

  • 製品の大きさ、コストを上げる要因になる

簡単に言うと、高信頼で載せ替え可能な制御系と引き換えに、大きさやコスト面の犠牲が生じる構成です。
しかし、筆者は、早期プロトタイプ開発に最適な方法だと思います。

製品改善アプローチ

最終製品時の大きさ、コストを改善するには、評価ボードとユーザ機能ボードを一体基板化するのがBetterです。この時も、プロトタイプに使った評価ボードMCU周りの発振子配置や配線は、手本としてそのまま製品基板へ流用可能です。

また、一体化最終製品のトラブル発生時、ユーザ機能ハードウェア起因か、または、ユーザソフトウェア起因かの切り分けも、評価ボード流用プロトタイプは容易にします。なぜなら、評価ボードは、信頼性が高いベンダ開発品だからです。

つまり、最終製品とプロトタイプの差分が原因と考えられ、一体化基板ハード、または、ユーザソフトの2つに1つとなります。同一ユーザソフトでのトラブルなら、ハード起因が疑われます。

評価ボード活用プロトタイプは、早期製品化だけでなく、様々な用途やメリットを生みます。

Summary:評価ボード活用MCU製品開発

ベンダ評価ボード活用MCU製品開発
ベンダ評価ボード活用MCU製品開発

ルネサスRX/RAファミリのメイン/サブクロック回路デザインガイドから、MCU製品開発にベンダ評価ボードをそのまま流用する早期プロトタイプ開発方法を示し、得失を明らかにしました。

評価ボード活用プロトタイプは、大きさ、コストを改善する基板パターンの手本となるだけでなく、最終MCU製品トラブル原因が、ハードウェア起因かソフトウェア起因かを切り分ける手段にも使えるなど、メリットが大きいことを示しました。

Afterword:プロトタイプソフトウェア開発に弊社テンプレート

評価ボードがハードウェア手本なら、ベンダ開発サンプルコードは、ソフトウェアの手本です。

弊社テンプレートは、各ベンダの代表的MCU評価ボードに対応済みです。テンプレートは、ベンダサンプルコードを流用・活用し、プロトタイプ向けソフトウェアの早期開発が可能です。

弊社テンプレートと評価ボードを使って早期プロトタイプ開発を行い、MCU製品開発に役立ててください。


効果的MCU学習と開発方法

MCU開発者は、常に新しい事柄を学習しつつ、同時に開発成果の出力が求められます。MCU開発者の学習と開発の参考になる2記事を見つけたので紹介します。

  1. ソフトウェア開発者が「学習」について知っておくべき10のこと、2023年12月12日
  2. 時間外労働と生産性低下の意外な関係、2023年12月11日

※英語版は、参照。

MCU学習と開発の参考になる2記事
MCU学習と開発の参考になる2記事

AI要約が望ましいのですが、無いので筆者が要約します。是非、ご自身で読んでください。

参考記事1要約:学習10のこと

人間記憶の仕組み、学習の仕組み、初心者とエキスパートの違いを示し、ソフトウェア開発者が学習を改善するための10個の事柄(#1~#10)解説。

筆者が特に印象に残った内容が、下記。

  1. 多くのコードを読み「理解」が、プログラミング熟練度を向上(#3)
  2. 1日の学習時間は、90分が限度(#5)
  3. 問題・課題のトライ順序を変える(ランダム化)のは解決に効果的(#5)
  4. エキスパートが初心者の目で見られなくなる「エキスパート盲点」は多い(#8)
  5. 休憩や散歩でトライ戦略を再検後、やり直す(#10)

参考記事2要約:意外な関係

欧米と日本、13000従業員の労働時間と生産性の調査結果。開発作業と生産性の関係説明。

印象に残った内容が、下記。

  1. 休憩無し従業員は、燃え尽き症候群の可能性が1.7倍(休憩時間と生産性)
  2. 理想的集中時間は、1日4時間。最長会議時間は、2時間。(仕事に集中できる時間)

know-how をリビルド

英語の「know-how」から来た外来語、日本語カタカナ表記「ノウハウ」は、専門的な知識や技術、手法という意味です。

知的財産の1つのため、日本発の公開例は少ない気がします。しかし、海外発know-howは、有用情報が多数あります。和訳が無くても、Microsoft Word翻訳やブラウザ翻訳を使えば、英文know-howが手軽に日本語化できます。

MCU開発者は、これら know-how活用をお勧めします。

但し、自分なりの解釈や理解を加えることが重要だと思います。これは、参考記事1が示したプログラミング熟練度を向上させるには、多くのコードを読み、その「理解」が大切なことと全く同じです。

つまり、 万人向け know-howをガイドとし、自分の頭で考えて理解する、これが、本当の学習や習得になるからです。ソフトウェア開発者的に言うと、「リビルド」です。

Summary:効果的MCU学習と開発方法

効果的MCU学習と開発には集中と多様性が必要
効果的MCU学習と開発には集中と多様性が必要

know-howの2記事を参考に、筆者がお勧めする効果的なMCU学習と開発方法をまとめます。

MCU開発者には、集中と多様性が必要です。

限られた集中時間(90分~4時間)に最大開発成果を上げるには、回り道のようでも1日の作業時間を、プログラミングとその他作業に分離して作業すべきです。

プログラミングも課題を複数に分け、壁に遭遇した場合には、そこに拘らず別課題プログラミングへ変えるなどが効果的です。課題への集中と、拘らずに変えることができる多様性が、効果的MCU開発になります。

多様性具体例の1つに、MCUベンダのサンプルコードと評価ボード活用があります。

自社ハードウェアが手元にある場合でも、逆にない場合はなおさら、評価ボード上で類似サンプルコードを動かすと、柔軟で多様な開発視点が得られます。これにより、例えば、隠し製品機能などの実装などもありえるでしょう。

その他の作業には、MCU関連の新しい学習なども含みます。

これら作業も、休憩やコーヒーブレイク、散歩などを挟みつつ様々な内容に分割しましょう。気分転換効果が期待できます。隠し製品機能などのアイデアも生まれ易いでしょう。

Afterword:盲点解決:サンプルコードと評価ボード

紹介した2つのKnow-how記事は、ソフトウェア開発者作業時間の科学的分析結果に基づいています。

MCU技術資料は、エキスパート盲点だらけです。内容が判り難いのは、読者のせいではありません。紹介Know-howやAI Copilotなどが、効率的な盲点解決手段を与えるでしょう。

一方、自ら気づき難い開発者のソフトウェア盲点やバグ解決手段が、サンプルコードと評価ボードです。

サンプルコードと評価ボードは開発者自身のソフトウェア盲点を浮き彫りにする
サンプルコードと評価ボードは開発者自身のソフトウェア盲点を浮き彫りにする

確実に動作するサンプルコードと評価ボードは、自分のソフトウェア盲点を浮き彫りにします。また、頭の中だけでなく、具体的なソフトウェア動作を目視することで、楽しく開発が続けられます。

MCU攻略の秘訣は、多様性を忘れず、楽しく、面白く開発に集中(集中時間はタイマ等で管理)、学習することだと思います。


RTOSアプリケーションIoT MCU能力推定

RTOSアプリケーションのIoT MCUにはどの程度のハードウェア能力が必要か?
この答を IEEE標準RTOS のμT-Kernelプログラミングコンテスト対象評価ボードから考察しました。

RTOSコンテスト評価ボード
RTOSコンテスト評価ボード

RTOSコンテスト対象評価ボード

MCUベンダ大手4社:インフィニティ、STマイクロ、NXP、ルネサス協賛のRTOSプログラミングコンテストが開催中です。RTOSは、IoT MCU世界標準のμT-Kernel 3.0利用がコンテスト条件です(関連投稿:前投稿)。

但し4社評価ボードは、μT-Kernel以外にもFreeRTOSやAzure RTOSでも動作可能です。そこで、これら評価ボードスペックを分析すると、RTOSアプリケーションのIoT MCUに、どの程度のMCUハードウェア能力が必要か、その目安が判ると思います。

コンテスト対象評価ボードは、ベンダ4社評価ボードと英BBC開発micro:bit、合わせて5種です。

インフィニティ:KIT_XMC72_EVK
STマイクロ:Nucleo_H723ZG
NXP:MCX N94x評価ボード(1月4日現在Coming Soon)
ルネサス:EK-RA8M1
BBC:micro:bit

評価ボードMCUコアとROM/RAM量

各評価ボードは、どれもARM Cortex-M系コアを用いています。

インフィニティとSTマイクロは、ハイパフォーマンスMCU Cortex-M7、NXPは、Trust Zone搭載MCU Cortex-M33、ルネサスは、AI/ML性能向上のArm Helium搭載MCU Cortex-M85、BBC開発micro:bitは、ベーシックなMCU Cortex-M4です。

評価ボードのCortex-Mコアと最高動作速度、ROM/RAM量が下表です。

ベンダ Cortex-Mコア/速度 ROM(KB) RAM(KB)
インフィニティ M7/350MHz 8192 1024
STマイクロ M7/550MHz 1024 564
NXP M33/150MHz 1024 1024
ルネサス M85/480MHz 2049 1024
BBC M4/64MHz 512 128

BBC開発micro:bitは、他に比べスペックが劣っています。
これは、μT-Kernel 3.0学習教材用でコスト最優先のためと思います。

ベンダ4社評価ボードは、RTOSコンテスト参加ハードウェアなので、どれも汎用RTOSアプリケーション開発ができるハズです。コンテストエントリー時に、応募者が第3希望まで評価ボードを選べます。

IDEはRTOSもベアメタルも同じ

ベンダ4社は、ベアメタル開発用の統合開発環境:IDEを利用し、FreeRTOSやAzure RTOS開発環境を提供中です。

例えば、STマイクロは、ベアメタル開発で使うSTM32CubeIDEに、ミドルウェアのAzure RTOS開発ツールを追加し、Azure RTOS開発環境を、ユーザ自身で構築します(関連投稿:STM32 Azure RTOS開発ツール拡充

現代的ユーザMCU開発の例(出展:The ST blog)
現代的ユーザMCU開発の例(出展:The ST blog)

コンテストは、μT-Kernel 3.0 RTOS開発です。筆者は、μT-Kernel 3.0をベンダ4社評価ボード上で動作させる作業、いわゆるポーティング処理は、把握していません。

しかし、本稿主題は、RTOS IoT MCUに必要なハードウェア能力の推定です。従って、評価ボードへのμT-Kernel 3.0ポーティングは、無視します。

一方、micro:bitは、μT-Kernel 3.0で動作するEclipse IDEが提供されます。従って、どなたでも直ぐにmicro:bit上でμT-Kernelを動かすことができます。この点も、教育用に適しています。

RTOS IoT MCUハードウェア能力推定

最初の表に戻り、RTOS IoT MCUに必要なハードウェア能力を推定します。

ベンダ Cortex-Mコア/速度 ROM(KB) RAM(KB)
インフィニティ M7/350MHz 8192 1024
STマイクロ M7/550MHz 1024 564
NXP M33/150MHz 1024 1024
ルネサス M85/480MHz 2049 1024
BBC M4/64MHz 512 128

先ず、MCUコア能力は、micro:bitスペックから最低でもCortex-M4以上、RTOSアプリケーションを実用的に開発するには、Flash ROMは1024KB以上が必要そうです。教育用micro:bitの512KBは、排除しました。

また、RTOSは、動作タスク数に比例し使用スタック量が急増します。これは、RTOSが実行タスクを別タスクへ切替える毎に、実行タスク変数やレジスタ等の状態をスタックにプッシュするためです。タスク再実行の際には、RTOSがスタックからポップし、実行前タスク状態へ戻します。

RTOSスタック動作(出展:ウィキペディア)
RTOSスタック動作(出展:ウィキペディア)

仮に、このRTOSポップ/プッシュに対してスタック量が不足した場合は、再現し難いバグになります。このバグを避けるには、必要十分な量のスタック領域が、RAM上に必要となります。スタック量を見積もるツールは、各社のIDEに付属しています。

表から、RTOSアプリケーション開発には、RAMは、最低でも512KB、安全側評価なら1024KB程度が必要そうです。

Summary:RTOS IoT MCUハードウェア能力

RTOSアプリケーションが動作するIoT MCUに必要なハードウェア能力を、μT-Kernelプログラミングコンテスト対象評価ボードから考察した目安が下記です。

MCUコア:ARM Cortex-M4以上、Flash ROM 1024KB以上、RAM 512KB以上

RTOSアプリケーション開発時には、MCUデバイスコストと発展性の検討が必要です。

機能拡張や横展開が期待できるRTOSアプリケーションなら、IDE付属スタック見積ツールを活用し、RAMに余裕があるデバイスが、効率的で安全な開発ができそうです。

Afterword:2024年もよろしくお願いします

日本時間の毎週金曜日、MCU話題を中心に、その開発環境のWindowsや比較対象にMPU/SBCなども混ぜながら、IoT MCU開発お役立ち情報を投稿します。

「開発スピードと成果」この2つを強く求められるのが、MCUに限らず開発者の宿命です。

激変MCU環境で背反するこの2つを両立する手段の1つが、MCUテンプレートだと筆者は考えています。開発初期立上げをスムースにし、全体像の視点を持ちつつ個々の機能追加もできるからです。
RTOS MCU開発も同様だと思います。

但し、全て自作するベアメタル開発と異なり、RTOSと協調動作するのがRTOS MCU開発です。RTOSを活かすMCUタスク作成や本稿のMCUハードウェア能力を、弊社RTOSテンプレートへ反映したいと考えております。

本年もどうぞよろしくお願いいたします。

FreeRTOS version 11.0.0は、マルチコアMCU動作が可能になりました。


RA用FSP v5.0.0 e2 studio 2023-10リリース

2023年10月28日、RA用FSP v5.0.0同梱e2 studio 2023-10がGitHubからリリースされました。FSP、e2 studioどちらも最新版です。また、10月16日に18年ぶりにバージョン5となったMCU開発必須ツール:Tera Term 5.0も、GitHubにあります。

本稿は、これらソフトウェアダウンロード先(=repository)のGitHubについて説明します。

また、GitHub公開の最新FSP v5.0.0、e2 studio 2023-10、Tera Term 5.0を使った評価ボード動作例も示します。

※今週金曜は、休日(文化の日)のため、木曜に先行投稿しています。

GitHub主要3機能

GitのWebサービス版がGitHubです。※Hubは、集約点という意味。

Gitは、Linux上で「複数ソフトウェア開発者」向けの支援ツールです。複数開発者が、1つのプロジェクトを、別々の場所・作業時間で共同開発する時に便利な機能を提供します。

Gitの主要機能が、フォーク、プルリクエスト、マージの3つです。

フォーク(=派生)は、レポジトリソースコードを派生利用し、別ソフトウェアを開発する際に、オリジナルコード所有者へ通知する機能です。

プルリクエストは、レポジトリソースコードの変更を、プロジェクト開発者へ通知、マージは、プルリクエストを受けた開発者が、変更を承認するか否かの通知機能です。承認時は、変更コードがプロジェクトへマージ(=統合)されます。

Linuxツールですので、CUI(キャラクタ ユーザ インタフェース)です。複数開発者が、地球上の離れた場所・作業時間であっても、ソフトウェア開発が上手くできる仕組みをGitが持つことが判ります。

また、ソースコードをレビューするコミュニティもあります。質の高いコード作成に役立つそうです。このコミュニティに、AI活用が最近話題です。AIを使わない時と比べ、開発速度57%、タスク完遂率27%上昇など驚きの効果が報告されています。

これらGit機能を、クラウドで提供するのが、GitHubです。2023年のユーザ数は、1億人突破だそうです(Wikipediaより)。

参考資料:GitHubとは? Digital Business Sherpa (2023-08-02)

GitHubソフトウェア公開機能

GitHubのもう1つの機能が、ソフトウェア公開です。この例が、最初に示したRA用FSP v5.0.0同梱e2 studio 2023-10やTera Term 5のリリースです。

exeファイルが直接ダウンロードできます。zipファイルダウンロードが主流のWindowsと異なる点です。

最新版RA用FSP 5.0.0 with e2 studio 2023-10のGitHubレポジトリ
最新版RA用FSP 5.0.0 with e2 studio 2023-10のGitHubレポジトリ

Latestアイコンが最新版を示します。Release Notes内にダウンロードリンク、下方にあるAssetsが、実際の公開ファイルを示します。

Summary:ワールドワイド開発標準ツールGitHub

筆者は、 パーティションもない大部屋で近隣同僚と、または、1人でソフトウェア開発をしてきました。Git主要3機能は、口頭で同僚へ伝えるか、1人開発時は不要でしたので、実際にGitHub活用経験はありません。

しかし、ワールドワイドやリモートワークでの複数人ソフトウェア開発時は、GitHubが標準ツールです。普段はソフトウェアダウンロード先としてGitHubを利用している開発者も、その仕組みを知っていると今後役立つと思います。

Afterword:RA用FSP 5.0.0 with e2 studio 2023-10 & Tera Term 5動作

GitHub公開のRA用FSP v5.0.0、e2 studio 2023-10とTera Term 5を使ったFPB-RA6E1評価ボード動作例です。接続は、コチラの投稿と同じです。

RA用FSP 5.0.0 with e2 studio 2023-10とTera Term 5.0動作例
RA用FSP 5.0.0 with e2 studio 2023-10とTera Term 5.0動作例

インストールダイアログに従っていれば、従来版からのアップグレードも問題ありません。

RA用FSP v5.0.0同梱e2 studio 2023-10リリースが、他のルネサスMCUファミリのFSP v5.0.0やe2 studio 2023-10リリースより遅れるのは、 RA専用FSP同梱e2 studioのGitHubマージ作業のためと思います。

※ルネサス他MCUファミリは、FSP、e2 studioそれぞれ個別リリース。

リリースが遅れても、RAファミリ統合開発環境を、だれでも簡単に構築できるメリットを優先したためでしょう。