Cortex-M4評価ボードRTOSまとめ

低価格(4000円以下)、個人での入手性も良い32ビットARM Cortex-M4コア評価ボードのRTOS状況を示します。超低価格で最近話題の32ビット独自Xtensa LX6ディアルコアESP32も加えました。

Vendor NXP STマイクロ Cypress Espressif Systems
RTOS FreeRTOS
Azure RTOS
CMSIS-RTOS FreeRTOS
Mbed OS
FreeRTOS
Eva. Board LPCXpresso54114 NUCLEO-G474RE CY8CPROTO-063-BLE ESP32-DevKitC
Series LPC54110 STM32G4 PSoC 6 ESP32
Core Cortex-M4/150MHz Cortex-M4/170MHz Cortex-M4/150MHz
Cortex-M0+/100MHz
Xtensa LX6/240MHz
Xtensa LX6/240MHz
Flash 256KB 512KB 1024KB 480KB
RAM 192KB 96KB 288KB 520KB
弊社対応 テンプレート販売中 テンプレート開発中 テンプレート検討中 未着手

※8月31日、Cypress PSoC 6のRTOSへ、MbedOSを追加しました。

主流FreeRTOS

どのベンダも、FreeRTOSが使えます。NXPは、Azure接続用のAzure RTOSも選択できますが、現状はCortex-M33コアが対応します。ディアルコア採用CypressのRTOS動作はM4側で、M0+は、ベアメタル動作のBLE通信を担います。STマイクロのCMSIS-RTOSは、現状FreeRTOSをラップ関数で変換したもので実質は、FreeRTOSです(コチラの関連投稿3章を参照してください)。

同じくディアルコアのEspressifは、どちらもRTOS動作可能ですが、片方がメインアプリケーション、もう片方が通信処理を担当するのが標準的な使い方です。

価格が上がりますがルネサス独自32ビットコアRX65N Cloud Kitは、FreeRTOSとAzure RTOSの選択が可能です。但し、無償版コンパイラは容量制限があり、高価な有償版を使わなければ開発できないため、個人向けとは言えません。

※無償版でも容量分割と書込みエリア指定など無理やり開発するトリッキーな方法があるそうです。

クラウドサービスシェア1位のAWS(Amazon Web Services)接続用FreeRTOSが主流であること、通信関連は、ディアルコア化し分離処理する傾向があることが解ります。

ディアルコア

ディアルコアで通信関連を分離する方式は、接続クラウドや接続規格に応じて通信ライブラリやプロトコルを変えれば、メイン処理側へ影響を及ぼさないメリットがあります。

例えば、STマイクロのCortex-M4/M0+ディアルコアMCU:STM32WBは、通信処理を担うM0+コアにBLEやZigBee、OpenThreadのバイナリコードをSTが無償提供し、これらを入れ替えることでマルチプロトコルの無線通信に対応するMCUです。

メイン処理を担うM4コアは、ユーザインタフェースやセンサ対応の処理に加え、セキュティ機能、上位通信アプリケーション処理を行います。

通信処理は、クラウド接続用とセンサや末端デバイス接続用に大別できます。

STM32WBやCY8CPROTO-063-BLEが採用した末端接続用のBLE通信処理を担うディアルコアのCortex-M0+には、敢えてRTOSを使う必要は無く、むしろベアメタル動作の方が応答性や低消費電力性も良さそうです。

一方、クラウド接続用の通信処理は、暗号化処理などの高度なセキュティ実装や、アプリケーションの移植性・生産性を上げるため、Cortex-M4クラスのコア能力とRTOSが必要です。

デュアルコアPSoC 6のFreeRTOS LED点滅

デュアルコアPSoC 6対応FreeRTOSテンプレートは、現在検討中です。手始めに表中のCY8CPROTO-063-BLEのメイン処理Cortex-M4コアへ、FreeRTOSを使ってLED点滅を行います。

と言っても、少し高価なCY8CKIT-062-BLEを使ったFreeRTOS LED点滅プログラムは、コチラの動画で紹介済みですので、詳細は動画をご覧ください。本稿は、CY8CPROTO-063-BLEと動画の差分を示します。

CY8CPROTO-063-BLE のCortex-M4とM0+のmain_cm4.c、main_cm0p.cとFreeRTOSConfig.hが下図です。

PSoC 6 CY8CPROTO-063-BLE FreeRTOS LED点滅のmain_cm4.cとmain_cm0.c
PSoC 6 CY8CPROTO-063-BLE FreeRTOS LED点滅のmain_cm4.cとmain_cm0.c
PSoC 6 CY8CPROTO-063-BLEのFreeRTOSConfig.h
PSoC 6 CY8CPROTO-063-BLEのFreeRTOSConfig.h

日本語コメント追記部分が、オリジナル動画と異なる箇所です。

RED LEDは、P6[3]ポートへ割付けました。M0+が起動後、main_cm0p.cのL18でM4システムを起動していることが判ります。これらの変更を加えると、動画利用時のワーニングが消えCY8CPROTO-063-BLE でFreeRTOS LED点滅動作を確認できます。

PSoCの優れた点は、コンポーネント単位でプログラミングができることです(コチラの関連投稿:PSoCプログラミング要点章を参照してください)。

PSoCコンポーネント単位プログラミング特徴を示すCreator起動時の図
PSoCコンポーネント単位プログラミング特徴を示すCreator起動時の図

PSoC Creator起動時の上図が示すように、Cypressが想定したアプリケーション開発に必要なコンポーネントの集合体が、MCUデバイスと言い換えれば解り易いでしょう。つまり、評価ボードやMCUデバイスが異なっても、使用コンポーネントが同じなら、本稿のように殆ど同じ制御プログラムが使えます。

PSoC 6 FreeRTOSテンプレートも、単に設定はこうです…ではなく、様々な情報のCY8CPROTO-063-BLE利用時ポイントを中心に、開発・資料化したいと考えています。PSoCプログラミングの特徴やノウハウを説明することで、ご購入者様がテンプレートの応用範囲を広げることができるからです。

STM32U5発表と最新IoT MCU動向

STマイクロエレクトロニクス2021年2月25日発表の先端性能と超低消費電力動作両立のSTM32U5を紹介し、STのIoT MCU開発動向をセキュリティ、MCUコア、製造プロセスの観点から分析しました。

先端性能と超低消費電力動作のSTM32U5

STM32U5ベンチマーク(出典:公式ブログ)
STM32U5ベンチマーク(出典:公式ブログ)

公式ブログから抜粋したSTM32U5のベンチマークです。従来の超低消費電力MCU:STM32L0~L4+シリーズと、Cortex-M33コア搭載STM32L5、今回発表のSTM32U5をメモリサイズとパフォーマンスで比較しています。

STM32U5は、従来Cortex-M0+/M3/M4比、Cortex-M33搭載により後述のセキュリティ先端性能と、従来Cortex-M33搭載STM32L5比、230DMIPS/160MHzと大幅向上した超低消費電力動作の両立が判ります。STM32U5の詳細はリンク先を参照ください。

本稿はこの最新STM32U5情報を基に、STのIoT MCU開発動向を、セキュリティ、MCUコア、製造プロセスの3つの観点から分析します。

セキュリティ

STM32マイコンセキュリティ機能一覧(出典:ウェビナー資料)
STM32マイコンセキュリティ機能一覧(出典:ウェビナー資料)

昨年10月27日ウェビナー資料:ARM TrustZone対応マイコンによるIoTセキュリティのP17に示されたSTM32マイコンセキュリティ機能一覧です。セキュリティ先端性能のTrustZoneは、Cortex-M33コアに実装されています。

関連投稿:Cortex-M33とCortex-M0+/M4の差分

今回の超低消費電力STM32U5発表前なのでSTM32L5のみ掲載されていますが、STM32U5もL5と同じセキュリティ機能です。STM32WLは、後述するワイヤレス(LoRaWAN対応)機能強化MCUです。

この表から、後述する最新メインストリーム(汎用)STM32G0/G4も、STM32U5/L5と同じセキュリティ機能を実装済みで、STM32U5との差分はTrustZone、PKA、RSSなど一部であることも判ります。

STM32U5のSTM32L5比大幅に動作周波数向上と低消費電力化が進んだ背景は、セキュリティ機能に対するより高い処理能力と40nm製造プロセスにあることが2月25日発表内容から判ります。

STM32ファミリMCUコア

STM32ファミリMCUコア(出典:STサイトに加筆)
STM32ファミリMCUコア(出典:STサイトに加筆)

STM32ファミリMCUコアは、ハイパフォーマンス/メインストリーム(汎用)/超低消費電力/ワイヤレスの4つにカテゴライズされます。前章のSTM32WLがワイヤレス、STM32U5/L5は超低消費電力です(STM32U5は加筆)。

STM32WLとSTM32WBの詳細は、コチラの関連投稿をご覧ください。

STM32U5と同様、従来の120nmから70nmへ製造プロセスを微細化して性能向上した最新メインストリームが、STM32G0/G4です。

新しいSTM32G0/G4は、従来汎用STM32F0/F1/F3とソフトウェア互換性があり、設計年が新しいにも係わらずデバイス価格は同程度です。従来メインストリームのより高い処理能力と低電力動作の顧客ニーズが反映された結果が、最新メインストリームSTM32G0/G4と言えるでしょう。

製造プロセス

製造プロセスの微細化は、そのままの設計でも動作周波数向上と低電力消費、デバイス価格低減に大きく寄与します。そこで、微細化時には、急変するIoT顧客ニーズを満たす機能や性能を従来デバイスへ盛込んで新デバイスを再設計します。STM32U5やSTM32G0/G4がその例です。

MCU開発者は、従来デバイスで開発するよりも製造プロセスを微細化した最新デバイスで対応する方が、より簡単に顧客ニーズを満たせる訳です。

関連投稿:開発者向けMCU生産技術の現状

まとめ

セキュリティ、MCUコア、製造プロセスのそれぞれを進化させた最新のIoT MCUデバイスが、次々に発表されます。開発者には、使い慣れた従来デバイスに拘らず、顧客ニーズを反映した最新デバイスでの開発をお勧めします。

また、短時間で最新デバイスを活用し製品化する方法として、最新メインストリーム(汎用)デバイスSTM32G0/G4を使ったプロトタイプ開発もお勧めします。

最新メインストリーム(汎用)プロトタイプ開発イメージ
最新メインストリーム(汎用)プロトタイプ開発イメージ

前章までで示したように最新メインストリームSTM32G0/G4は、他カテゴリデバイスの機能・性能を広くカバーしています。メインストリームプロトタイプ開発資産は、そのまま最新の他カテゴリデバイスへも流用できます。

従って、他カテゴリデバイスの特徴部分(セキュリティ、超低消費電力動作やワイヤレス)のみに注力した差分開発ができ、結果として短期製品化ができる訳です。

ちなみに、プロトタイプ開発に適したSTM32G0テンプレートは、コチラで販売中、FreeRTOS対応のSTM32G4アプリケーションテンプレートは、6E目標に開発中です。

あとがき:文字伝達

ソフトウェア開発者ならソースコード、ハードウェア開発者なら回路図が、最も直接的・正確に技術内容を使える手段です。文字は、記述者の理解を変換して伝える間接的手段です。両者に違い(文字化ノイズ)が生じるのは、やむを得ないと思います。

報ステのTSMCのニュースに頭の抱えてしまった”、“TSMCは日本で何をしようとしているのか“からも分かるように、マスメディアは文字や画像で情報を伝えます。受けての我々開発者は、これらノイズを含むと思われるマスメディア情報を、自分の頭で分析・処理し、理解する必要があります。

と言うわけで本稿も、筆者が文字化ノイズを付けて分析した例です……、という言い訳でした😅。

無線STM32WBと汎用STM32G4比較

STマイクロエレクトロニクスの近距離無線通信機能付きSTM32WB(Cortex-M4/64MHz)と、汎用メインストリームSTM32G4(Cortex-M4/170MHz)を比較します。

Bluetoothなどの超省電力無線通信は、IoTデバイスに好適です。無線機能付きSTM32WBのIoTアプリケーション開発方法を調査し、汎用STM32G4を使ったSTM32WBのIoTアプリケーション開発の可能性とメリットを検討しました。

ディアルコアSTM32WBとシングルコアSTM32G4

STM32WBとSTM32G4、どちらもARM Cortex-M4コアを持つMCUです。違いは、STM32WBが、無線処理専用Cortex-M0+コア/32MHz内蔵のディアルコアMCUという点です。

Cortex-M4とM0+コア間のアプリケーションは、プロセス間通信コントローラ(IPCC)によりノンブロックイングで割込み利用のメッセージ交換が可能です。IPCCは、コアをSleep/StopモードからRunモードへ復帰させることもできますので、両コアは別々に低消費電力動作ができます。

STM32WBシリーズの紹介スライドP2から抜粋したSTM32WBとSTM32G4の位置づけが下記です。ワイヤレスマイコンのSTM32WLとSTM32WBの違いは、WLはLoRaWANなど、WBはBluetoothなどのサポート無線規格が異なる点ですが、Cortex-M4とM0+のディアルコア構成は同じです。

STM32WBとSTM32G4の位置づけ(出典:STM32WBの紹介)
STM32WBとSTM32G4の位置づけ(出典:STM32WBの紹介)

無線コプロセッサ:Cortex-M0+コア

STM32WBのCortex-M0+コアは、Bluetooth 5、ZigBee、OpenThreadなど2.4GHz帯無線通信処理専用です。ユーザ(開発者)は、利用する無線規格(BLE⇋ZigBeeなどのブリッジも可能)を選択し、STマイクロエレクトロニクス開発の無線専用ファームウェアをCortex-M0+へダウンロードします。但し、このファームウェアに手を加えることはできません。

言い換えれば、Cortex-M0+側の無線処理はSTの動作保証付きで、ファームウェアバージョンアップなどのメインテナンスは必要ですが、ユーザ変更などは不必要、ブラックボックスとして扱える訳です。

つまり、見た目はディアルコアですが、STM32WBのCortex-M0+は無線コプロセサで、外付け無線モジュールと同等です。従って、ユーザが開発するSTM32WBのIoTアプリケーションは、シングルコアのSTM32G4と同じ手法で開発が可能です。

Bluetooth 5(BLE含む)とサンプルプログラム

STM32WBの無線規格は、Bluetooth5やZigBeeなど複数プロトコルをサポートしています。このうち、IoTセンサの少量データ収集アプリケーションに好適なBluetooth5とBLEの詳細は、Bluetooth Low Energyプロトコルの基礎知識に説明があります。BLEを利用するIoTセンサ・アプリケーションを開発する場合には、最低限必要となる知識です。

STM32WBには、開発環境STM32CubeWBP-NUCLEO-WB55評価ボードで動作する様々なBLEサンプルプログラムがあります。サンプルプログラムの解析やこれらを応用したIoTアプリケーション開発時、BLE基礎知識が役立ちます。

また、P-NUCLEO-WB55評価ボードとスマートフォンをBLE接続し動作するサンプルプログラムもあります。

FSU: Firmware Upgrade Services

ディアルコアSTM32WBのCortex-M4アプリケーション開発時は、Cortex-M0+ファームウェアも同時にFlashへ書込みます。この点が、シングルコアSTM32G4開発と異なる部分です。

このFlash書込みには、STM32CubeProgrammmerのコマンドライトツール(CLI)で提供されるFSU:Firmware Upgrade Servicesを使います(動画説明はコチラを参照してください)。

簡単に言うと、Cortex-M4とCortex-M0+でメモリ共有中のFlashへ、ユーザ開発Cortex-M4アプリケーションを書込む時に、同時に通信Cortex-M0+ファームウェアも更新する仕組みで、手順さえ守れば通常のSTM32CubeIDEを使ったシングルコアSTM32G4のFlash書込み同様簡単です。

Flash書込み後は、STM32G4と同じ方法でアプリケーションデバッグを行います。

無線通信機能付きディアルコアSTM32WBと汎用シングルコアSTM32G4比較結果

P-NUCLEO-WB55とNUCLEO-G474RE
STM32WB評価ボードP-NUCLEO-WB55(左)とSTM32G4評価ボードNUCLEO-G474RE(右)

本稿で示したSTM32WB関連情報は、昨年末に行われたSTマイクロエレクトロニクス日本語ウェビナー資料から抜粋したもので、STM32マイコン体験実習(Bluetooth®編)でオリジナル動画とスライドが公開中です。また、STM32WBトレーニング資料Cortex-M4トレーニング資料も参考にしました。

前章までで、無線通信機能付きディアルコアSTM32WBと汎用シングルコアSTM32G4を比較し、下記を得ました。

  • ディアルコアSTM32WBのCortex-M0+側は、通信コプロセサでブラックボックとして扱える。
  • 例えば、IoTセンサデータ収集などのCortex-M4側IoTアプリケーションを、HAL(Hardware Abstraction Layer)APIで開発すれば、通信部分は異なるがデータ収集部分はSTM32WBとSTM32G4で共通開発できる。
  • STM32WBとSTM32G4で異なる点は、評価ボードへのFlashプログラミングだが、手順は簡単。
  • STM32WBのFlashプログラミングで用いたSTM32CubeProgrammerは、STM32G4のRoot of Trustで用いたもので、STM32WBでもSTM32G4と同様のRoot if Trustを実現できる。

HAL APIはコチラの関連投稿などを、STM32G4のRoot of Trustはコチラの関連投稿を参照してください。

STM32WBのIoTアプリケーションを汎用STM32G4で開発

最初の図に示したCortex-M4動作最高周波数の64MHzと170MHz、デバイスFlash/RAM容量差に注意すれば、STM32WBのIoTアプリケーションを汎用STM32G4で開発することは、可能でメリットもあると思います。

前提条件として、HAL API開発であること、STM32WBのIoTアプリケーション用Flash/RAM容量が、無線通信コプロセサCortex-M0+が使っても十分残ること、無線通信の代用としてUSARTなどの有線通信を使うこと、などです。FreeRTOS利用が良い場合があるかもしれません。

無線コプロセサCortex-M0+使用容量は、かなり少なく(ウェビナーでは使用量が公表されましたが数値未取得)Cortex-M4 IoTアプリケーション用空き容量は十分あります。また、汎用STM32G4の方が高速動作のため開発制約条件も緩いです。無線では、通信断時のエラー処理検討が必要ですが、有線ですのでエラー処理なしで本来の通信処理は開発可能です。

つまり、STM32WBの無線通信エラー処理以外は、ほぼ全て汎用STM32G4で代用開発が可能です。

Cortex-M4クラスMCUは、どれも高速で大容量Flash/RAMを実装し高いポテンシャルを持っています。つまり、IoTプロトタイプ開発とその評価には、最適なデバイスです。

汎用STM32G4で代用開発済みアプリケーションをSTM32WB/STM32WLへ移植し、IoTプロトタイプ開発をスピードアップするメリットは、差分開発、つまりIoT特有機能の差分を開発ができることです。

ある程度MCU開発経験を持つ開発者が、従来MCU開発では少なかった無線通信や高度なIoTセキュリティなどのIoTアプリケーション特有の重点ポイントに注力でき、即座にIoTプロトタイプ開発(代用開発含む)とそれを評価するツールとなること、これが弊社Cortex-M4テンプレートの目標です。

評価の結果、仮にMCUやIoTセンサ、無線機能の再選択が必要となっても、開発部分の多くが次に即座に流用できるソフトウェア資産となるには、汎用STM32G4によるIoTプロトタイプ開発が有効だと思います。

具体的には、従来テンプレートとは「対象者レベルと目的を変える」ことを検討中です。

  • 従来Cortex-M0/M0+/M3テンプレートは、対象者が初心者/中級レベル開発者で、MCU基本動作(Simpleテンプレート)とADC/LCD動作(IoT汎用Baseboardテンプレート)を提供し、基本的なMCU理解と開発が目的のテンプレート
  • Cortex-M4テンプレートは、対象者が中級レベル以上の開発者で、MCU基本動作などは省き、IoTプロトタイプ開発高速化が目的のテンプレート

本稿説明がすんなりとご理解頂ければ、中級レベル以上の開発者、Cortex-M4テンプレート対象者だと思います。

Cortex-M4テンプレートの対象レベルと目的
Cortex-M4テンプレートの対象レベルと目的

News

2021年1月12日、STM32CubeとMicrosoftのAzure RTOSが統合、STM32マイコン開発環境で協力というニュースが発表されました。STのCortex-M4テンプレートは、FreeRTOSとAzure RTOSの両方が必要かもしれません。

STブログに、上記の詳細情報があります。

Kinetis Lテンプレート発売

FRDM-KL25ZとIoT汎用Baseboardを使った、NXP Kinetis Lシリーズ向けテンプレートを1000円(税込)で発売します。

IoT Baseboardテンプレート
IoT Baseboardテンプレート
IoT BaseboardテンプレートのVCOM
IoT BaseboardテンプレートのVCOM
IoT Baseboardテンプレート右横から
IoT Baseboardテンプレート右横から

Kinetis LシリーズとFRDM-KL25Z

超低消費電力と高性能を特徴とするNXPのKinetis Lシリーズは、2013年旧Freescale発売のCortex-M0+コア汎用マイコンです。FRDM-KL25Z(Cortex-M0+:48MHz、Flash:128KB、RAM:16KB)は、このKinetis Lシリーズ汎用マイコン習得ができる低コスト評価ボードです。

FRDM-KL25Zは、MCUXpresso SDK内にFreeRTOSとUSBのサンプルプロジェクトもあり、またmbed開発も可能です。様々なMCUアプリケーション開発に汎用的に使え、初心者から中級レベル以上の方でも満足できる仕様を持っています。

今年で発売から8年経過したKinetis Lシリーズは、最新のNXP開発環境MCUXpresso IDE/SDK/CFGでサポートされており、弊社Kinetis Lテンプレートもこの最新開発環境で開発しました。

Kinetis Lテンプレート

FRDM-KL25Z評価ボードのVCOMGPIOタッチスライダなどの基本的な使い方は、本ブログで既に説明してきました。

問題は、これら使い方を複数組み合わせてアプリケーションを開発する段階になった時、具体的にどうすれば開発できるかがマイコン初心者には解りにくく、つまずき易い点です。

Kinetis Lテンプレートは、この問題に対して1つの解決策を示します。詳細は、Kinetis Lテンプレートサイトと、付属説明資料のもくじ(一部ダウンロード可能)を参照ください。

FRDM-KL25Zで動作確認済みのKinetis Lテンプレートには、FRDM-KL25Z単体動作のシンプルなテンプレート応用例(Simpleテンプレート:下図)と、LCDやポテンショメータが動作し、様々なArduinoシールド追加も簡単にできるIoT汎用Baseboardとを併用したテンプレート応用例(IoT Baseboardテンプレート:最初の図)の2種類を添付しています。

Simpleテンプレート
Simpleテンプレート
SimpleテンプレートのVCOM
SimpleテンプレートのVCOM

マイコン初心者や中級レベル開発者の方が、テンプレート付属説明資料とSimpleテンプレートを利用するとKinetis Lシリーズの効率的習得、IoT Baseboardテンプレートを利用するとLCD/ADC動作済みでシールド追加も容易な段階からアプリケーション開発やIoTプロトタイプ開発が直に着手できるツールです。

これらテンプレートに、もくじ内容の付属説明資料を付けて1000円(税込)で販売中です。購入方法は、コチラを参照ください。

FRDM-KL25ZのFreeRTOSとUSB

MCUXpresso SDKが提供するFRDM-KL25Z評価ボードFreeRTOSサンプルプロジェクトは、弊社MCU RTOS習得(2020年版)で解説したNXP LPCXpresso54114 (Cortex-M4:100MHz、Flash:256KB、RAM:192KB)と同じ内容です。このRTOS習得ページを参照すれば、FRDM-KL25ZによるFreeRTOS理解も容易です。

また、難易度は高くなりますがUSBサンプルプロジェクトも、参考になる情報満載です。これらFreeRTOS、USBサンプルプロジェクトは、中級レベル以上のマイコン開発者に適しています。

初心者、中級レベル向け弊社Kinetis Lテンプレート付属説明資料には、FreeRTOS、USB関連情報は情報過多になるため含んでおりません。

テンプレート付属説明資料の範囲
テンプレート付属説明資料の範囲

しかし、テンプレートを使ってKinetis Lシリーズマイコン開発を習得すれば、スキルを効率的にレベルアップでき、難易度が高いFreeRTOSやUSB開発へも挑戦できます。

つまり、Kinetis Lテンプレートは、初心者、中級レベルの上級マイコン開発者への近道とも言えます。

あとがき

年末年始休暇中に、Cortex-M0+コアのKinetis Lテンプレート発売に何とかたどり着きました。

2021年は、Cortex-M4コアテンプレート化、無線やセキュリティなどのIoT MCU重要課題に対してサイト/ブログを見直すか?とも考えております。皆様のご意見、ご要望などをinfo@happytech.jpへお寄せ頂くと参考になります。

本年も引き続き、弊社マイコンテンプレートサイトと金曜ブログ、よろしくお願いいたします。

2020マイコンテンプレート案件総括

COVID-19パンデミックの2020年も残すところ2週間になりました。2020年の金曜ブログ投稿は本日が最後、次回は2021年1月8日(金)とし休暇に入ります。

※既存マイコンテンプレートは、年中無休、24時間販売中です、いつでもご購入お持ちしております。

2020マイコンテンプレート案件総括

  1. 🔴:Cortex-M4コア利用のマイコンテンプレート開発(2020年内)
  2. 🟡:FRDM-KL25ZとIoT汎用Baseboard利用のKinetis Lテンプレート発売(12月)
  3. 🟢:IoT MCU向け汎用Baseboard開発(10月)
  4. 🟢:STM32FxテンプレートV2発売(5月)
  5. 🟢:STM32G0xテンプレートV2発売(5月)

1のCortex-M4テンプレート開発は、STM32G4のRoot of Trustと、NXP LPCXpresso54114のRTOSサンプル解説で、Cortex-M4テンプレート化には程遠い状況です(赤ステータス)。

2のKinetis Lテンプレート(FRDM-KL25Z、Cortex-M0+/48MHz、Flash:128KB、RAM:16KB)は、添付説明資料作成が未着手です(黄ステータス)。

3のArduinoプロトタイプシールド追加、IoT MCU汎用Baseboardは完成しました(緑ステータス)。

4と5のSTM32FxテンプレートSTM32G0xテンプレート発売までは、ほぼ順調に進みました(緑ステータス)。

対策としてブログ休暇中に、2のKinetis Lテンプレート完成と、これに伴うHappyTechサイト変更を目標にします。
1のCortex-M4テンプレート開発は、2021年内へ持越します。

ブログ記事高度検索機能(1月8日までの期間限定)

休暇中、ブログ更新はありません。そこで、読者の気になった過去の記事検索が、より高度にできる下記Googleカスタム検索機能を、1月8日までの期間限定で追加します。

上記検索は、WordPressのオリジナル検索(右上のSearch…窓)よりも、記事キーワード検索が高度にできます。少しでもキーワードが閃きましたら、入力してご活用ください。

あとがき

激変の2020年、テンプレート関連以外にも予定どおりに進まなかった案件や、新に発生した問題・課題も多数あります。例年より少し長めの休暇中、これらにも対処したいと考えております。今年のような環境変化に対し、柔軟に対応できる心身へ変えたいです(ヨガが良いかも? 3日坊主確実ですが…😅)。

本年も、弊社ブログ、HappyTechサイトをご覧いただき、ありがとうございました。
今後も、引き続きよろしくお願いいたします。よいお年をお迎えください。

Cortex-M33とCortex-M0+/M4の差分

STマイクロエレクトロニクスが、STM32マイコン体験実習(セキュリティ編①~⑤)という動画でCortex-M33 TrustZone解説とSTM32L5(Cortex-M33/110MHz、Flash/256/512KB、RAM/256KB)のセキュリティ実習を行っています。

このセキュリティ編①:31min17secから、IoT MCU向けセキュリティ強化Cortex-M33コアのARM TrustZoneマイコンと、通常Cortex-M0+/M4コアマイコンとの差分を抽出しました。TrustZoneマイコン基礎知識の習得が目的です。

Cortex-M33とCortex-M0+/M4差分

セキュリティ編動画①~⑤概要

①P3(動画①、スライドP3を示します)に、動画①~⑤の概要が示されています。動画①でCortex-M33コアの解説、②でSTM32L5開発環境の準備、後半③~⑤でSTM32L5評価ボード:NUCLEO-L552ZE-Q(¥2,303 Mouser)を使ったセキュリティ演習という構成です。

本稿は、動画①から、ARM TrustZone Cortex-M33コアと通常Cortex-M0+/M4コアとの差分を一覧表にしました。

※ARM公式差分情報を知りたい方は、①P48の参考文献が参考になります。

Cortex-M33とCortex-M0+/M4の差分

オンデマンド動画ですので、好きな個所で止める、再生読度を変えるなどが可能です。動画①は、筆者が経験したTrustZone解説の中で最も分かり易い動画です。

特にP36/P37/P39は、4段階に増えたステート処理内容が具体的に判りTrustZoneマイコン特徴理解に役立ちます。
また、P19は、様々なセキュリティレベルと対応STM32MCUのセキュリティ機能差が一目で判る重要な資料です。

要旨(ARM TrustZone Cortex-M33と通常Cortex-M0+/M4差分)
7 ソフトウェア攻撃防御策がTrustZone。物理攻撃対策はセキュアマイコン(≠汎用MCU)が有効。
12 Secure呼出し=予め決めた手順で内蔵周辺回路(I2C/SPI/RAMなど)へアクセスする技術
Security Isolation=Secure呼出しを使い通常アクセスと隔離・分離する技術
ARM TrustZone=Security Isolationを対象MCUで柔軟に構成する技術
16 タンパ=物理攻撃を検出→検出後バックアップレジスタやSRAM自動消去
JTAGピン無効化→設定後はGPIOなどで運用
WRP(WRite Protection):数KB単位設定可能
RDP(ReaD Protection):JTAG読出し禁止→読出検出でプログラム実行停止→PORで解除
Secure Memory=起動時のみ読出し可能な領域
17 MPU(Memory Protection Unit):最大16個メモリ領域の読書き、命令実行許可/禁止設定
18 セキュリティは単独では効果が薄く、複数重ね攻撃への敷居を上げ強化(暗号鍵保存例掲載)
19 STM32マイコン内蔵セキュリティ機能差一覧。TrustZone対応はSTM32L5のみ(2020/12時点)
STM32G0/G4(Cortex-M0+/M4)でもSRAM RDP機能などあり
22 TrustZoneは、アドレス空間とバス通信の両方をハードウェア監視しアクセス制御
23 アドレス空間監視=コア内蔵SAU IDAU、バス通信監視=TZ(TrustZone) ControllerとAHBバス
24 STM32L5は、内部FlashアクセスにST独自Flashレジスタとオプションバイトで保護
26 TrustZone-aware周辺回路=DMA1&2/GPIO…などAHB接続回路は個別セキュリティ設定要
上記以外がSecurable周辺回路=UART/SPI…などでAHB/APBブリッジがアクセス監視
29 従来MCUベアメタル開発は、mainループも割込みハンドラも常に特権モード動作の1段階
30 従来MCUのRTOS開発は、割込みハンドラ/RTOSが特権モード、ユーザタスクは非特権の2段階
32 Secureステート追加TrustZoneは、4段階化→各層の処理配置がTrustZoneソフト設計第一歩
35 Secureソフトと従来ソフトのプロジェクト差一覧
(セキュリティ関連設定はSecureソフトのみ可能でmain関数はあるがmainループなしなど)
36 TrustZoneマイコンベアメタル開発の4段階ステート処理配置例(TrustZoneソフト設計例1)
37 TrustZoneマイコンRTOS開発の4段階ステート処理配置例(TrustZoneソフト設計例2)
38 TrustZoneソフト開発時、Secureソフトと通常ソフトの2プロジェクト作成必要
39 TrustZoneソフトの基本実行フロー(Secureソフトから通常ソフトへの処理内容一覧)
40
41
42
Secureステートと通常ステートのアドレス空間の見え方差まとめ
44 動画①全体まとめ
45 STM32L5開発時のキーポイント一覧(全18項目)
46 STM32L5開発時のキーポイント演習項目一覧(18項目中9項目を動画③~⑤で演習)
48 おすすめARMv8-M(Cortex-M33コア)TrustZone参考文献一覧

TrustZoneマイコン開発は工数2倍、スキルも必要

動画①は、他ベンダのARM Cortex-M33 TrustZoneマイコン開発でも基礎知識が得られます(※P24のST独自Flashレジスタとオプションバイト保護は除く)。IoT MCU向けセキュリティ強化Cortex-M33コアで導入されたTrustZoneを活用するには、①の理解は最低限必要です。

従来Cortex-M0+/M4に比べ、Cortex-M33シングルコア開発でもSecureと通常(Normal)ソフトウェアの2プロジェクト必要、メモリ空間と周辺回路のセキュリティ設定必要(メモリ分割損も生じると予想)、JTAGピン無効化など、従来のアプリケーション開発とそのデバッグに加え、ソフトウェア攻撃対策TrustZone導入による工数やその動作確認/解除などの手間が余分に必要になります。

このTrustZone導入オーバーヘッドは、少なくないです(セキュリティ編②~⑤でオーバーヘッド工数が判ります。補足章に動画②~⑤リンク添付)。Cortex-M33コア最高速度が110MHzと他コア比高速で、Flash/RAMも大容量なのは、このオーバーヘッドのハードウェア対策だと思います。

TrustZoneマイコンのソフトウェア開発工数は、同じアプリケーションの通常マイコン開発の2倍程度は必要になると思います。また、TrustZone起因のトラブルに対する分析スキルも必須です。

ソフトウェア攻撃に対する防御壁の高さは、言い換えると、ソフトウェア開発のし難さと等価です。セキュリティレベルが上がるにつれ、開発コストも上がります。

全てのIoT MCUがTrustZone対応MCUである必要は無いと思います。コスト重視の場合は、従来Cortex-M0+/M4コアでセキュリティ強化対応(例えば、関連投稿:STM32G0/G4のRoot of Trust(1)~(3)など)でも使える可能性があります(関連投稿:IoT MCUコア次世代像のIoT MCUコアの3層構造最下層のFront End IoT MCUに相当)。

セキュリティは、強固な方が良いのは当然ですが、それ相応の追加コストも生じます。セキュリティ対コストの観点からIoT MCUの選択が必要となるでしょう。

* * *

セキュリティ対策は、いわば自動車保険のようなものです。保険代金の負担は、開発者かエンドユーザか、エンドユーザがTrustZone導入オーバーヘッドを理解することは難しいと思いますので悩ましい問題です😅。

Cortex-M33 TrustZoneマイコンは、ソフトウェア開発者が記述した処理を攻撃とマイコンが誤認識(正常認識)した場合は、無視、あるいは最悪、マイコンを使用不能にします。見つけにくい無視された処理が、開発者起因か、あるいはTrustZone起因かを分析できるスキル、これが、通常マイコン開発との最大の差分です。

STM32マイコン体験実習は、TrustZone起因スキルを習得できるよく考えられた教材です。

補足

STM32マイコン体験実習(セキュリティ編②
STM32マイコン体験実習(セキュリティ編③
STM32マイコン体験実習(セキュリティ編④
STM32マイコン体験実習(セキュリティ編⑤

関連投稿:STM HTML版マンスリー・アップデートの見かた4章の全体像リンク集なども役立ちます。

Cortex-M33コア以外でTrustZone技術を用いたマイコンは、Cortex-M35P、Cortex-M23があります。

IoT MCUコア次世代像

PCのCPUは、IntelとAMDの2社が独占状態でした。しかし、AppleがARMベースの新CPU:M1を発表し、そのコストパフォーマンスは、Intel/AMDの3倍(!)とも言われます(記事:「ソフト技術者もうなるApple「M1」の実力、新アプリに道」や、「Apple M1の実力を新世代のIntel/AMD CPUと比較」など)。

本稿は、これらPC CPUコアの現状から、次世代IoT MCUコアの3層構造と筆者希望的観測を示します。

CPUコア:Apple/Intel/AMD

筆者が学生だった頃は、マシン語のPCソフトウェアもありました。CPUコア性能が低いため、ユーザ要求を満たすアプリケーション開発には、ソフトウェア流用性や開発性を無視したマシン語開発もやむを得ない状況でした。

現在のCPUコア性能は、重たいGUIやネットワーク処理を複数こなしても、ユーザ要求を満たし、かつ流用性も高いC/C++などの高級言語でのアプリケーション開発が普通です。Appleは、この状況でIntel/AMDコストパフォーマンス比3倍のM1 CPUを開発しました。

このM1 CPUを使えば、従来CPUのボトルネックが解消できるために、より優れたGUIや新しいアプリケーションの開発が期待できます。

このM1実現の鍵は、5nmルールの製造技術と新しいCPU設計にあるようです。

MCUコア:ARM/Non ARM

MCUはARMコアとNon ARMコアがありますが、Non ARMコアのコストパフォーマンス比は、M1程ではありません。従って、主流はARM Cortex-M系シングルコア採用MCUで、事実上ARMコア独占状態です。開発言語はC言語でベアメタル開発、製造プロセスも数10nmと、いわば、数10年前のIntel独占CPUコアに近い状況です。

RISC-Vという新しいMCUコアも出てきましたが、まだ少数派でその性能も未知数です。Intel/AMD CPUと比較記事の最後に記載された「競争こそユーザの利益」には、MCU世界はなっていません。

ARMはコア設計図のみ提供し、デバイス実装はMCUベンダが担当します。従って、現状のMCU世界が続く場合には、MCU高速化は製造技術進化とマルチコア化が鍵です。

ARMは、エッジAIに向けたNPUを発表しました。独自MCUコアと付随する開発環境を提供でき、かつコストパフォーマンスがARMコアの数倍を実現できるMCUベンダが無い現状では、ARMの頑張りがIoT MCUを牽引すると思います。

NVIDIAによるARM買収が、今後のARM動向に及ぼす影響は気になる状況ではあります。

IoT MCUコア

MCUコアとCPUコアの一番の差は、ユーザ要求コストです。これは、同じコアのMCU製品に、内蔵周辺回路やFlash/RAM容量の異なる多くのデバイスをベンダが提供中であることからも解ります。ユーザは、MCUに対して無駄なコストは払いたくないのです。

つまり、MCUデバイスはアプリケーション専用製品、CPUデバイスは超汎用製品、ここが分岐点です。

IoT MCUには、エッジAI、セキュリティ、無線通信(5GやWi-Fi)などのIoT機能追加が必要です。これら機能を並列動作させる手段として、RTOSも期待されています。この状況対応に、MCUコアも高性能化やマルチコア化に進化しつつあります。

セキュリティや無線通信は、予め決まった仕様があり、これら対応の専用ライブラリがベンダより提供されます。但し、セキュリティは、コストに見合った様々なセキュリティレベルがあるのも特徴です。ソフトウェア技術者は、専用ライブラリのMCU実装には神経を使いますが、ライブラリ本体の変更などは求められません。この仕様が決まった部分を「IoT基本機能」と本稿では呼びます。

MCUソフトウェア開発者が注力すべきは、ユーザ要求に応じて開発するIoTアプリケーション部分です。この部分を、「IoT付加機能」と呼び、「IoT基本機能」と分けて考えます。

ユーザのアプリケーション専用MCU製品意識は、IoT MCUでも変わりません。例えば、IoT基本機能の無線機能は不要や、ユーザがコストに応じて取捨選択できるセキュリティレベルなどのIoT MCU製品構成になると思います。一方、IoT付加機能だけを実装するなら、現状のMCUでも実現可能です。

以上のことから、IoT MCUは3層構造になると思います。

IoT MCUコアの3層構造
IoT MCUコアの3層構造
機能 追記
Back End IoT MCU IoT基本機能+付加機能+分析結果表示 収集データ分析結果ビジュアル表示
IoT MCU IoT基本機能+付加機能 高性能、マルチコア、RTOS利用
Front End IoT MCU センサデータ収集などのIoT付加機能
最小限セキュリティ対策
収集データは上層へ有線送信
コスト最重視

最下層は、ユーザ要求アプリケーションを実装し、主にセンサからのデータを収集するFront End IoT MCUです。ここは、現状のARM/Non ARMコアMCUでも実現できIoT付加機能を実装する層です。デバイスコスト最重視なので、最小限のセキュリティ対策と収集データを有線、または無線モジュールなど経由で上位IoT MCUへ送信します。IoT MCUサブセット版になる可能性もあります。

中間層は、高度なセキュリティと市場に応じた無線通信、エッジAI機能などのIoT基本機能がフル実装できる高性能MCUコアやマルチコア、RTOS利用へ進化した層です。IoT付加機能も同時実装可能で、下層の複数Front End IoT MCUが収集したセンサデータを、まとめて上位Back End IoT MCUまたは、インターネット空間へ直接送信できます。製造技術進化とマルチコア化、ARM新コア(Cortex-M23/33/55など)が寄与し、IoT MCUの中心デバイスです。

最上層は、第2層のIoT MCU機能に加え、インターネット空間で収集データを分析・活用した結果をユーザへビジュアル表示する機能を追加した超高性能MCUコア活用層です。自動車のADAS(Advanced Driver-Assistance Systems:先進運転支援システム)のおかげでユーザへのビジュアル表示要求はより高度になります。このユーザ要求を満たす次世代の超高性能IoT MCU(またはMPU)が実現します。

最下層のFront End IoT MCUは、現状のCortex-M0+/M4コアで弊社テンプレート適用のMCUが生き残ってほしい、というのが筆者の希望的観測です。
それにしてもAppleのコスパ3倍M1、凄いです。iPhoneもそうですが、抜きん出た技術と経営能力、Jobs精神、健在ですね。

IoT MCU汎用Baseboard

弊社が考えるIoT MCU向き汎用Baseboardを示します。要件は、(1)IoT MCU向き、(2)低価格、(3)入手性の良さです。

Arduino UNOプロトタイプシールド ブレッドボード付き(¥480)と、従来から使ってきたBaseboardを併用した汎用Baseboardの特徴、FRDM-KL25Zを使った3.3V MCUと5V LCDのCMOSデバイス直結適用例を示します。

図1 Arduino UNO プロトタイプ シールド ブレッドボード 付き
図1 Arduino UNO プロトタイプ シールド ブレッドボード 付き

NXP IoT Module Baseboard

“IoT Baseboard”で検索すると、NXPのIoT Module Baseboard($160)が現れます。これは、右下にLPC54018(Cortex-M4/180MHz)をAdd-onし、EthernetやSD Card等の機能追加を行う「専用」Baseboardです。Baseboardに加え、ArduinoコネクタでもLPC54108へ機能追加できることが判ります。

図2 IoT Module Baseboard(UM11079に加筆)
図2 IoT Module Baseboard(UM11079に加筆)

LPC54018専用Baseboardで$160と高価ですが、Arduinoシールドが追加できる点が重要です。つまり、IoT Module Baseboardで基本機能追加、開発用途に応じた機能追加はArduinoシールドやPmodで行うという2通りの機能追加方式です。

Arduinoシールドで、様々なプロトタイピング開発に対応できる訳です。

Arduinoシールド

多くのMCU評価ボードは、上記LPC54018専用Baseboardと同様、Arduinoコネクタで機能追加が可能です。安価で豊富な種類のArduinoセンサシールドが販売中であることがその理由です。

弊社IoT MCU汎用Baseboardも、Arduinoシールドで機能追加できることをポイントと考えました。FRDM-KL25Zを例に説明します。

FRDM-KL25Zは、Arduinoコネクタが未実装ですのでコネクタを追加したのが図3です。Arduinoコネクタは、複数シールドをスタッカブルに装着するため、上側がメス、下側がオスの貫通ピンで構成されます。

図3 Arduinoコネクタ追加のFRDM-KL25Z
図3 Arduinoコネクタ追加のFRDM-KL25Z

Arduinoコネクタピン(青色)と、FRDM-KL25Zピン(赤色)の対応表です。例えば、右下のPTA1は、D0に対応するなど、MCU評価ボード開発時は赤色ピン、これがArduinoコネクタ利用時は青色ピンへ変わります。

図4 Arduinoコネクタピン(青色)とFRDM-KL25Zピン(赤色)対応表
図4 Arduinoコネクタピン(青色)とFRDM-KL25Zピン(赤色)対応表

MCU評価ボードにはArduinoピンのシルク印刷はありません。開発するMCU評価ボードのArduinoコネクタ対応表をよく見て、MCU評価ボードピンとArduinoピンマッピングを間違わないように注意する必要があります。

Arduino UNOプロトタイプシールド プレッドボード付き

図1のArduino UNOプロトタイプシールドは、MCUボード上に装着してもFRDM-KL25Zのタッチセンススライダの操作はできます。また、評価ボード上のLED動作は、プロトタイプシールドのスルーホールから目視できます。

さらに、プロトタイプシールドには、評価ボードRESETに並列接続済みリセットボタンと2個のLED、1個のSWが実装されています(図1回路図参照)。

プロトタイプシールドのLEDとSWは、評価ボードとは未接続ですが、付属のブレッドボードを使って配線すれば、LチカなどのMCU動作確認にも便利に使えます。

※Arduino UNOプロトタイプシールド プレッドボード付きの動作は、5章:3.3V MCUと3.3V LCD接続で示します。

IoT MCU汎用Baseboardと適用例

以上のようにArduino UNOプロトタイプシールドは、Arduinoコネクタを持つMCU評価ボードの機能追加や動作テストに便利に出来ています。

そこで、このプロトタイプシールドを、弊社が従来から使ってきた5V動作Baseboardと併用します。

MCU評価ボードへのIoTセンサやセキュリティ機能などはArduinoシールドで追加、LCDやポテンショメータなどの機能は5V動作Baseboardにより追加、この2通り機能追加で「汎用開発」に使えるIoT MCU Baseboardになります。

MCU評価ボードとして3.3V動作FRDM-KL25Zと、Baseboard実装の「5V動作LCD」とをCMOSデバイス直結で接続した適用例を示します(CMOSデバイス直結は、関連投稿を参照してください)。

図5 IoT MCU汎用BaseboardのFRDM-KL25Z適用例
図5 IoT MCU汎用BaseboardのFRDM-KL25Z適用例

※IoTセンサシールド等を追加する場合は、MCU評価ボード(FRDM-KL25Z)の直上、または直下へスタック装着を想定しています。図5は、IoTセンサシールド等を省略した例と考えてください。

3.3V MCUと3.3V LCD接続

プロトタイプシールドを装着したFRDM-KL25Zへ、前章の「5V動作LCD」の代わりに「3.3V動作LCD」を接続した例も示します。FRDM-KL25Zソフトウェアは、どちらも同じものです。

関連投稿では未検証であった3.3V MCU開発ソフトウェア動作確認に、CMOSデバイス直結を利用し5V動作Baseboardが利用できることが、LCD表示が同じであることにより実証できました。

図6 プロトタイプシールド利用の3.3V MCU評価ボードと3.3V LCD接続例
図6 プロトタイプシールド利用の3.3V MCU評価ボードと3.3V LCD接続例

ブレッドボードに実装したのは、LCD表示コントラスト調整用スライド抵抗です。5V系センサ等と3.3V MCU評価ボードをCMOSデバイス直結時に必須となるMCU入力電流保護抵抗は、ブレッドボードへ実装し対応できます。

まとめ

Arduinoプロトタイプシールドと、従来から弊社が使ってきた5V Baseboard併用の、IoT MCU汎用 Baseboardを示しました。IoT関連の機能追加はArduinoシールドで、LCD等の機能追加は5V Baseboardで行い、低価格、入手性が良く、様々なIoT MCUプロトタイピングに使えます。

最低限必要なロジックをプロトタイプシールド付属ブレッドボードへ実装すれば、3.3V系MCU評価ボードと5V系ハードウェアの制御ソフトウェア開発に、CMOSデバイス直結が使えることを実証しました。

本稿で示したFRDM-KL25Z とIoT MCU汎用Baseboardを使ったKinetis Lテンプレートは、年内に発売予定です。ご期待ください。

5G、Wi-Fi6、NXP、STマイクロエレクトロニクス

公衆網の5G、無線LANのWi-Fi6、どちらもIoT MCUに必須となる無線通信技術です。本稿は、5GとWi-Fi6、MCU主要ベンダのNXPとSTマイクロエレクトロニクス2社の無線対応状況を簡単にまとめます。

5GとWi-Fi6

5GやWi-Fi6、Bluetoothは、無線通信技術です。違いは、5GがNTTやau、SBが提供する公衆網サービス、Wi-Fi6やBluetoothは、LANを無線化したプライベート網サービスだということです。

これら公衆網とプライベート網、両方の無線技術やサービスを積極的に活用するデバイスが、毎年新製品が発表されるスマートフォンです。搭載カメラやスマホ操作性だけでなく、5GやWi-Fi6実現のためにスマホプロセッサの性能向上は必須です。

5GやWi-Fi6の市場は急増中です。これら市場に対応するため、スマホは常に最新無線技術、高性能プロセサへと変わらなければならない運命です。開発担当者は大変でしょう。

5G、Wi-Fi6技術牽引はスマホと自動車

自動車業界のADAS:Advanced Driver-Assistance Systems、先進運転支援システムの開発速度もスマホ同様高速です。数年でモデルチェンジする新車に搭載する様々な新しい支援機能が、売上げを左右するからです。

これら新搭載機能にバグはつきものです。例えば、制限速度標識の車載カメラ認識はかなりの精度ですが、一般道で認識速度が110 km/hと表示された経験があります。メータ表示だけなので、車速が自動で上がることはありませんが…、バグです。

一般道で110km/h表示:フェールセーフでなくバグ
一般道で110km/h表示:フェールセーフでなくバグ

このようなバグに対して、2022年7月以降の新車は、スマホのようにOTA:Over-The-Airで車載ソフトウェアのアップデートを行う国際基準が発表されました。サイバーセキュリティ対策や走行安全性にも絡むので、かなりの処理が開発担当者に要求されると思います。

ついに自動車もスマホ同様、ソフトウェアOTA必須になります。インダストリアル業界も、当然ながら自動車業界OTAと同様の仕組みとなるでしょう。

無線技術やセキュリティ、AIなどの先端技術は、一般消費者の旺盛な購買力の対象となるスマホと自動車が牽引することは間違いありません。競争が激しく開発成果も解り易いのですが、開発者担当は最新技術習得の余裕も少なく、実装期限が限られるためセルフマネジメントが大変です。

NXP対応

NXPは、2020年9月に5G無線システム向け製造工場の稼働開始を発表し、2021年初頭までにフル稼働、5Gや次の6G向け無線チップを自社製造できる見通しです。また、NXP本社副社長でもあるNXPジャパン新社長の和島正幸氏の就任も発表されました。

せっかく開発した量産電気自動車(Electric Vehicle)の販売予約中止の原因は、車載バッテリーの供給が追付かないからだそうです。無線システムのかなめ、RFチップ供給が同じ状況になるのを避けるためのNXPの措置だと思います。

STマイクロエレクトロニクス対応

STマイクロエレクトロニクスは、2020年10月7日、無線LANのBluetooth LE 5.2対応Cortex-M0+ベースMCUとその評価ボードを発表しました。Arduinoコネクタ付属で、使い勝手も良さそうな気がします。

STEVAL-IDB011V1 Evaluation Board and Updated BlueNRG Software(出展:STマイクロ)
STEVAL-IDB011V1 Evaluation Board and Updated BlueNRG Software(出展:STマイクロ)

IoT MCUの爆発的な需要増加に対して、MCU主要ベンダのNXPやSTマイクロエレクトロニクスは、着々と準備を進めています。

インダストリアル業界IoT端境期

スマホや自動車業界のように競合他社より少しでも早く最新技術を導入し製品化する動きに対し、インダストリアル業界は、COVID-19の影響でIoT技術導入の端境期のようです。つまり、積極的にIoTを進めるデンソーのようなグループと、暫く様子見をして徐々にIoTを進めるグループの2つに分離しつつあるということです。

インダストリアル業界対応の開発者は、この端境期を逆に利用し、IoT最新技術を学習しつつ、来るべきIoT開発案件をこなす力を備えるチャンスです。

具体的には、自動車やスマホで先行した無線/セキュリティ/AI技術を、効率的にIoT MCUへ流用・応用できる開発力です。または、MCUベンダ提供の無線/セキュリティ/AI最新技術サンプルプロジェクトを理解し、評価ボードを上手く活用できる開発力とも言えます。

インダストリアル業界の顧客出力となるソフトウェア/ハードウェアを、要求期限内に開発成果として提出できるベストエフォート技術、この比重が増すと思います。開発成果の不完全さやセキュリティ追加、変更はOTAで対応します。

FRDM-KL25Z GPIOの使い方

5V耐圧GPIOピンが無い3.3V動作FRDM-KL25Zへ、5V LCDをCMOSデバイス直結で接続し、その動作確認ソフトウェアを開発中です(CMOSデバイス直結は、関連投稿:3.3V MCUと5Vデバイスインタフェースを参照してください)。

開発途中、FRDM-KL25Z搭載MCUのKinetis KL25ファミリに、GPIOの拡張とも言える興味深いFGPIO機能、BME機能を見つけたのでFRDM-KL25Z GPIOの使い方に加え解説します。両機能は、Kinetis KL25の高速化に効果があります。

※FGPIO:Fast GPIO、高速処理でGPIO記述ソースコードからの変更容易。
※BME:Bit Manipulation Engineはレジスタ読書きとビット操作が同時可能なMCU内蔵ハードウェア。コードサイズ削減と高速処理が同時に可能。

FRDM-KL25Z GPIOの使い方

FRDM-KL25ZのGPIO API一覧が下記です。MCUXpresso IDEのソースコード上でgpio_と入力し「Ctrl+スペースキー」を押すと、GPIO_で始まるAPIが一覧表示されます。これが、Content Assist機能です。

MCUXpresso IDEのContent Assistを利用したGPIOの使い方
MCUXpresso IDEのContent Assistを利用したGPIOの使い方

先頭〇がGPIO_API関数、#がdefineで定義したマクロです。GPIO_API本体は、fsl_gpio.hで定義されています。

例えば、GPIO_ClearPinsOutputを選ぶと、残りの変数:GPIO_Type *baseとunit32_t maskを入力すればソースコード上でGPIO_ClearPinsOutput APIの入力完了です。

*baseは、GPIOAやGPIOBなどのポート名、maskは、制御対象ピン以外のマスクです。GPIOBの18番ピンが対象なら、GPIO_ClearPinsOutput(GPIOB, 1<<18)と記述します。

Content Assistの一覧表示リストを見ると、FRDM-KL25ZのGPIO APIに特に変わったAPIはありません。ごく一般的なGPIOの使い方であることが判ります。

GPIOに限らずContent Assistは、APIレファレンスマニュアルを参照するよりAPI選択と変数のソースコード入力が早く便利にできます。もちろん、ユーザが追加定義したマクロでも自動的にリスト表示されます。

FRDM-KL25Z FGPIOの使い方

KL25 Sub-Family Reference Manualの図3-9は、MCUからGPIO Controllerへの経路が、下記2種類あることを示しています。

FGPIOとGPIOアクセスの違い(出展:KL25 Sub-Family Reference Manual)
FGPIOとGPIOアクセスの違い(出展:KL25 Sub-Family Reference Manual)

GPIO:MCUからPeripheral Bridge経由のGPIO Controller制御
FGPIO:MCUからGPIO Controller直接制御(Single-cycle I/Oとも呼ばれる)

特筆すべきは、レジスタ構成がGPIOとFGPIOで全く同じなので、GPIOソースコード記述が、
GPIOB_PTOR = (1<<18);    //  GPIOでFRDM-KL25Zの赤LED:PTB18をトグル
の場合、これをFGPIOへ変える場合は、
FGPIOB_PTOR = (1<<18);  // FGPIOでFRDM-KL25Zの赤LED:PTB18をトグル
とGPIOをFGPIOへ変更すれば済むことです。

※GPIOB_PTOR = (1<<18)は、レジスタ明示記述、同じことをGPIO_APIで記述すれば、GPIO_TogglePinsOutput(GPIOB, 1<<18)となります。どちらもContent Assistが使えます。

但し、2サイクルアクセスGPIOの半分、FGPIOの1サイクルアクセス実効速度を得るには、コンパイラ最適化オプションを、デフォルト最適化なし:None(-O0)から、Optimize (-O1)、または、それ以上にする必要があります。

FRDM-KL25Z BMEの使い方

前章GPIO経路の途中にBMEハードウェアがあります。BMEを使うと、Peripheralsレジスタの読書きとビット操作を同時、つまり、ソースコード記述1個で可能になります。

BMEを使うソースコードは、下記5種類です。

書込み時
・Store Logical AND/OR/XOR (AND/OR/XOR)
・Store Bit Field Insert (BFI)

読込み時
・Load-and-Clear 1 bit (LAC1)
・Load-and-Set 1 bit (LAS1)
・Load Unsigned Bit Filed Extract (UBFX)

アセンブラ記述に似ています。詳細は、KL25 Sub-Family Reference Manualの17章BMEを参照してください。

BMEを使うと、ソースコード記述が減るので、処理時間とコードサイズの両方を軽減でき高速化可能です。

一般的なGPIOソースコードで記述した周辺回路の初期設定や無限ループ内処理をあらためて見直すと、BMEが使える箇所が見つかります。

GPIO、FGPIO、BMEの使い方

最初に1章で示した一般的なGPIO記述でソフトウェアを開発し、最後の高速化手段としてFGPIOやBMEを使うのが良いと思います。理由は、FGPIOは最適化、BMEはソースコード内にレジスタ読書きとビット操作の両方が必要な個所があることが前提だからです。

FGPIOはGPIO記述ソースコードからの変更が容易です。コンパイラデフォルトの最適化なし:None(-O0)でコード変更し、求める高速要件が満たされれば、利用価値は高いでしょう。この場合は、100%の1サイクルアクセス実効速度までは得られませんが、FGPIO高速化ができます。

経験上、最適化利用に筆者は消極的です。様々な副作用もあるからです。

最適化よりも超低消費電力/低コストが特徴のFRDM-KL25Z(Cortex-M0+/48MHz)開発ソフトウェアの再利用が可能で、より高速なFRDM-K64F(Cortex-M4/120MHz)などへMCU変更が可能なら、この方法をお勧めします。

但し、MCU変更ができない時の効果的な高速化手段として、本稿説明のFGPIOとBMEを知っておくことは重要です。

FGPIOやBMEは、低価格で入手性も良いFRDM-KL25Zに初めから実装済みです。Kinetis KL25ファミリMCUの汎用性と高い拡張性を示す良い例だと思います。

旧Freescaleから2013年頃発売と少し古い感もあるMCUですが、十分現役で使えます。

あとがき:3.3V MCUと5V CMOSデバイス直結動作確認完了

STM32G0xテンプレートに使用した3.3V動作MCU:STM32G071RBも5V耐圧GPIOピンは持ちません。しかし、CMOSデバイス直結で5V LCDを駆動し、安定動作を確認しました。

訂正:STM32G071RBには5V耐圧ピンがあります。お詫びして訂正いたします

ソフトウェア開発中の3.3V動作FRDM-KL25Zと5V LCDのCMOSデバイス直結も、同様に問題なく動作するハズです。