MCU:マイコン,STM32マイコン,Cortex-M4コアIoTマイコン,FreeRTOS,STM32CubeMX,セキュリティ,STM32CubeIDE,NUCLEO-G474RE,STM32G4,STM32G4テンプレート,CMSIS RTOS,アプリケーションテンプレート,NUCLEO評価ボード

販売中のNXP版FreeRTOSアプリケーションテンプレートに続いて、STマイクロエレクトロニクス版CMSIS-RTOSアプリケーションテンプレート構想を示します。

IoT MCU開発者にRTOS開発経験とスキルが必須であること、短期で効率的にRTOSスキルを磨けるSTマイクロエレクトロニクス版CMSIS-RTOSアプリケーションテンプレート構想を示し、汎用性、セキュリティ、広い流用性を持つSTM32G4をターゲットMCUにした理由を示します。

IoT MCU開発者スキル

IoT MCU開発者スキルの階層構造
IoT MCU開発者スキルの階層構造

IoT MCU開発者は、ベアメタルMCU開発スキルの上に、FreeRTOSやAzure RTOSなど接続するクラウドに応じたRTOSスキルが必要です。クラウド接続後、顧客要求のIoTサービスを実装しますが、実装時には、競合他社より早い開発スピードなどの差別化スキルも要求されます。

更に、IoTセキュリティや、より高性能なデュアルコアMCUへの流用、顧客横展開など、発展性への配慮も必要です。これらは、図示したようにベアメタルMCU開発スキルを基礎とする階層構造です。
※スキルとは、開発経験に基づいた手腕、技量のことです。

RTOS開発経験とスキル

全てのモノをネットワークへ繋ぐ時代は、従来のMCUからIoT MCUへの変革が必要です。IoT MCU開発者にとってRTOS開発経験とスキルは、近い将来必須になります。理由が下記です。

・RTOSライブラリ利用がクラウド接続に必須  👉①IoT MCU急増への備え
・大規模MCU開発にRTOSが便利(≒必須)   👉②開発規模拡大への備え
・ベアメタル開発よりもRTOS開発が効率的   👉③ソフトウェア資産への備え(補足参照)

つまり、過去何度も提言されたMCUソフトウェア資産化・部品化を、RTOSが実現するからです。逆に、IoT MCU開発では、このソフトウェア資産化・部品化(ライブラリ活用)無しには、実現できない規模・技術背景になります。
※例えば、IoTセキュリティだけでも専門家が対応すべき領域・規模・技術背景になりそうです。

IoT MCU開発の成功には、様々な専門家技術が活用できる土台のRTOSは必須です。IoT MCU開発専門家の一員となるには、RTOS開発経験とスキルは必須と言えるでしょう。

効率的RTOSスキル習得

ベアメタル開発経験者の効率的なRTOS基礎固め、スキル取得を弊社STM版CMSIS-RTOSアプリケーションテンプレートの目的とします。

この目的は、NXP版FreeRTOSアプリケーションテンプレートと同じです。違いは、NXP版がFreeRTOSを用い、STM版は、コード生成ツール:STM32CubeMXが出力するCMSIS-RTOSを用いる点です。

現時点のSTM版CMSIS-RTOS APIは、FreeRTOS APIをラップ(wrapper)したもので、中身はFreeRTOSそのものです。※CMSIS-RTOS詳細は、コチラの関連投稿を参照してください。

ベアメタル開発経験者のRTOS基礎固め・スキル獲得を、短期・効果的に達成するには、

・基本的RTOS待ち手段(タスク同期:セマフォとタスク間通信:Queue)理解
・RTOSプロトタイプ開発にも使える弊社テンプレートプロジェクト活用

が適しています。

既に持っているベアメタル開発経験を活かし、例えば、単独RTOSサンプルプロジェクトでは得られない複数タスク優先順位を変えた時の各タスク挙動や、RTOSセマフォ送受失敗時の挙動などスキルアップに役立つ事柄を、自ら評価・判断できるからです。この評価を助けるために、同じ動作のベアメタルプロジェクトもテンプレートに添付します。

効率的にRTOS開発スキルを習得する方法として、自己のベアメタル開発経験を使ってRTOS習得・スキルアップする本手法は、Betterな方法だと思います。

コチラにFreeRTOS習得に役立つ情報をまとめています。ポイントとなる点をざっと掴んで、実際の開発環境で試し、参考書やマニュアルなどの内容を開発者自ら考える、これにより新技術やスキルを、身に付けることができると思います。

STM版CMSIS-RTOSアプリケーションテンプレート構想

STM版CMSIS-RTOSアプリケーションテンプレートも、NXP版同様、同一動作のベアメタルプロジェクトを添付します。

RTOS/ベアメタルどちらのプロジェクトも、ADC入力、LCD出力、SWチャタリング対策入力、LED出力、VCOM入出力の動作確認済みで、プロトタイプ開発着手時のスタートプロジェクトとしても利用可能です。

付属説明資料には、ベアメタル視点からのCMSIS-RTOS説明を加えます。また、テンプレート利用CMSIS-RTOS APIとFreeRTOS APIの対応表も添付する予定です。

CMSIS-RTOSアプリケーションテンプレートをご購入後、ベアメタル開発経験者が、RTOSプロジェクトとベアメタルプロジェクトの比較・評価がスグに始められる構成です。※比較・評価は、ご購入者ご自身で行ってください。

STM32メインストリームMCU比較(出展:STマイクロエレクトロニクスに加筆)
STM32メインストリームMCU比較(出展:STマイクロエレクトロニクスに加筆)

CMSIS-RTOSアプリケーションテンプレート動作環境は、メインストリームMCUのSTM32G4評価ボード:NUCLEO-G474RE(Cortex-M4/170MHz、Flash/512KB、RAM/96KB)とHAL APIを用います。

STM32G4は、高性能で汎用性とIoT MCU基本的セキュティ機能を備え、RTOSテンプレートのターゲットIoT MCUとして最適です。

STM32G4のセキュリティ機能を示したのが下図です。

STM32G0とG4のセキュリティ対応(出展:STM32 Security対応表に加筆)
STM32G0とG4のセキュリティ対応(出展:STM32 Security対応表に加筆)

また、STM32G4の汎用性、他MCUへの開発ソフトウェア流用性の広さを示したのが下図です(詳細は、コチラの関連投稿3章を参照してください)。

NUCLEO-G474RE搭載のSTM32G474RETx Compatible MCU List。2021年8月時点で98MCU!
NUCLEO-G474RE搭載のSTM32G474RETx Compatible MCU List。2021年8月時点で98MCU!

NUCLEO-G474RE評価ボードの他には、ArduinoプロトタイプシールドとBaseboardを用います。

つまり、販売中のNXP版FreeRTOSアプリケーションテンプレート評価ボード:LPCXpresso54114が、STマイクロエレクトロニクスNUCLEO-G474REにのみ変化した構成です。

CMSIS-RTOS動作もNXP版と同様、Hardware Independent FreeRTOS Exampleを基としますので、(両テンプレートをご購入頂ければ)STMとNXPのRTOSアプリケーション開発の直接比較なども可能です。

STM版CMSIS-RTOSアプリケーションテンプレートのリリースは、今秋のWindows 10 21H2更新後(Windows 11リリース後かも?)を予定しております。時間的に少し余裕がありますので、Cypress版PSoC 6ディアルコア対応FreeRTOSアプリケーションテンプレートも同時リリースできればBestだと考えています。

補足:③ソフトウェア資産への備え

ベアメタル開発でもソフトウェア規模が大きくなると、開発者が悩む点は、複数処理の待ち合わせ/制御順序です。対策は、処理を細かく分割し、優先度を考慮しつつ順次処理を行うのが常套手段です。

ところが、RTOSを使うと、この面倒な待ち処理や制御順序を、RTOSがタスク優先順位に応じて処理します。しかも、処理分割も、RTOSがTICK_RATE_HZ単位で勝手(!?)に行ってくれます😀。

RTOSにより、タスク数やTICK_RATE_HZ、最大優先順位に応じたスタックを大量に利用しますのでRAM使用量の増加、RTOS自身のオーバーヘッドなど副作用も生じますが、「タスク記述は、超簡単」になります。

初期設定と無限ループ、ループ内のRTOS待ち手段、優先順位を検討すれば、文字通り単一処理タスクを開発し、マルチタスク化はRTOSに任せます。

※ベアメタル開発経験者は、セマフォ、Queue、Mutex、イベントグループなどのRTOS待ち手段を、上記実現のためのAPIと捉えると、RTOS理解が早くなります。
※上記手法を使うと、ベアメタルサンプルプログラムもそのままRTOSへ組込めます。
※最も難しそうなのが優先順位検討ですが、ソース上で簡単に変更できます。
※RTOSマルチタスク処理を100%信頼した上での筆者感想です。

Cortex-M4コアでRTOSが使えMCUのFlash/RAMに余裕があれば、ベアメタル開発よりもRTOS開発の方が効率的に開発できると思います。また、この環境で開発したソフトウェアは、資産として別のRTOS開発へも使えるので個人ソフトウェア資産化も可能です。

上記は、RTOSの筆者感想です。弊社RTOSアプリケーションテンプレートをご購入頂き、各開発者でRTOSに対する独自感想を抱き、短期で効率的にRTOS開発経験とスキルを磨いて頂ければ幸いです。

MCU:マイコン,STM32マイコン,Cortex-M0+コア,Cortex-M33コア,Cortex-M4コアIoTマイコン,STM32CubeMX,セキュリティ,STM32CubeIDE,STM32G071RB,HAL API,STM32G474RE,STM32RTOS

2021年7月19日、STマイクロエレクトロニクスのMCU統合開発環境が、STM32CubeIDE v1.7.0とSTM32CubeMX v6.3.0へ更新されました。Major releaseです。開発済みMCUのSTM32CubeMX設定を、簡単に別ターゲットMCUへ移植する機能を解説します。

Major Release

STM32CubeIDE(以下、CubeIDE)は、ベースのEclipse IDE 更新に追随し年数回更新があります。今回のCubeIDE v1.7.0更新内容に、特に気になる点はありません。

一方CubeIDE付属コード生成ツール:STM32CubeMX v6.3.0(以下、CubeMX)には、開発済みMCUのCubeMX設定を、別MCUや別シリーズMCUへ簡単に移植する機能があります。移植性の高いHAL(Hardware Abstraction Layer)APIと併用すると、開発済みソフトウェアの再利用が簡単で強力なAPI生成ツールになりました。

STM32CubeMX設定移植機能

CubeMXには詳細な英語ユーザマニュアルUM1718 Rev35(全368ページ)があり、p1に主要機能説明があります。本ブログでもCubeMXコード生成機能の使い方やその重要性、STM32F0からF1へのソフトウェア移植方法などを何度か紹介してきました(検索窓に「STM32CubeMX」と入力すると関連投稿がピックアップされます)。

従来投稿は、MCUのCubeMX設定を、ターゲットMCUへ各項目を見ながら手動移植する方法でした。この方法は、予めターゲットMCUとの互換性が解っている場合や、移植周辺回路が少ない場合には有効です。

しかし、MCUの種類が増え、別シリーズMCUへ、または多くの周辺回路設定を個別に移植したい場合は、事前チェックは面倒です。そんな時に役立つ2機能が、UM1718 p1太文字記載の下記です。

  • Easy switching to another microcontroller
  • Easy exporting of current configuration to a compatible MCU

どちらもCubeMX画面のPinout & Configurationタブ選択、Pinoutプルダウンメニュー>List Pinout Compatible MCUs (Alt-L)をクリックすると、Full Compatible/Need Hardware change MCUが一覧表で表示されます。

List pinout compatible MCUs
List pinout compatible MCUs

STM32G0xテンプレート例

販売中STM32G0xテンプレートで使用中の汎用MCU:STM32G071RB(Cortex-M0+/64MHz、Flash/128KB、RAM/36KB)の例を示します。これは、評価ボードNUCLEO-G071RB搭載MCUです。

STM32G071RB Full and Partial match MCU List
STM32G071RB Full and Partial match MCU List

評価ボード搭載のLQFP64パッケージでフィルタ設定すると、青色:完全互換の汎用STM32G0シリーズMCUが12アイテム、黄色:一部ハードウェア変更が必要な低電力STM32L0シリーズMCUが17アイテムリストアップされます。

例えば、FlashやRAMを増量したい場合には、STM32G0B1RBへ開発ソフトウェアがそのまま移植できることが解ります。また、より低電力化したい場合には、STM32L071RBへも移植可能です。あとは、ターゲットMCUを選択し、STM32G0xテンプレートのCubeMXプロジェクト設定を全て移植するか、または一部周辺回路のみを移植するかの選択も可能です。

つまり、開発済みソフトウェアを別MCUへ移植する際に、容易性(完全互換/一部HW変更)と方向性(大容量化/低電力化など他MCUシリーズ適用)を評価でき、かつ、ターゲットMCU選択後は、ダイアログに従って操作すれば、CubeMX設定全て、または周辺回路毎にターゲットMCUへ自動移植ができる訳です。

CubeMX設定の移植後は、ターゲットMCU上で通常のようにコード生成を実行すれば、周辺回路初期設定や動作に必要となる関数群の枠組みが作成されます。その枠組みへ、STM32G0xテンプレートのHAL API開発済みソフトウェアをコピー&ペーストし、ターゲットMCUへのソフトウェア移植が完了です。

汎用MCUとHAL APIプロトタイプ開発

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

CubeMX設定の自動移植が簡単なことは、前章まででご理解頂けたと思います。

前例STM32G0xテンプレート開発ソフトウェアの移植可能なMCU数が12+17=29と大きいのは、汎用MCUとHAL APIを使ったソフトウェア資産だからです。

最新IoT MCU開発でも、STM32G0/G4シリーズなどの移植性が高い汎用MCU(=メインストリームMCU)とHAL APIを使って主要機能をプロトタイプ開発し、CubeMX移植機能を使ってターゲットIoT MCUへ移植すれば、最新IoT MCUの差分機能開発に集中できます。

つまり、「汎用MCUとHAL API利用のプロトタイプ開発は、他MCUへの移植性が高く、汎用との差分開発に集中できる高い生産性」をもたらす訳です。

※STM32G0/G4シリーズは、新プロセスで従来汎用STM32F0/F1/F3シリーズを高速・低電力化・セキュリティ強化した新しい汎用MCUです。コチラの関連投稿や、STM32U5発表と最新IoT MCU動向を参照してください。

STM32G0とG4のセキュリティ対応(出展:STM32 Security対応表に加筆)
STM32G0とG4のセキュリティ対応(出展:STM32 Security対応表に加筆)

まとめ

STマイクロMCU統合開発環境が、STM32CubeIDE v1.7.0とSTM32CubeMX v6.3.0へMajor Releaseされました。

開発済みMCUのCubeMX設定を、別MCUへ簡単に移植する機能があり、移植性が高い汎用(メインストリーム)MCUとHAL APIによるプロトタイプ開発ソフトウェア資産を、効率的に他MCUへ再活用できる統合開発環境になりました。

補足:NUCLEO評価ボードのユーザLED不足対策

汎用MCUとHAL APIプロトタイプ開発には、低価格で入手性も良いNUCLEO評価ボードが適しています。

但し、NUCLEO評価ボードのユーザ緑LED(LD2)とSW(B1)が、各1個と少ない点が残念です。CubeIDEサンプルプログラムは、単機能サンプル動作なので各1個でもOKですが、少し複雑な例えばRTOS並列動作確認などには、特にLEDが不足します。

お勧めは、赤LED 2個、SW 1個が実装済みのArduinoプロトタイプシールドです。残念ながらNUCLEO評価ボードSW(B1)は操作できないのでシールドSWで代用します。評価ボードArduinoピンとの配線や、付属ブレッドボードへの回路追加も簡単です。ST以外の様々なMCUベンダのArduinoコネクタ付き評価ボードでも使えます。

NUCLEO評価ボードLED不足対策のArduinoプロトタイプシールド。付属ブレッドボードに回路追加も容易。
NUCLEO評価ボードLED不足対策のArduinoプロトタイプシールド。付属ブレッドボードに回路追加も容易。

NUCLEO-G474REとArduinoプロトタイプシールドの使用例を示します。ArduinoプロトタイプシールドのLED1は、Lpuart受信、LED2は、SW操作、評価ボードのLD2は、1s/500ms/40ms点滅の動作確認に使っています。

STM版RTOSアプリケーションテンプレート構想もこの環境で検討中です(関連投稿:STM32RTOS開発3注意点(前編)、(後編))。

MCU:マイコン,STM32マイコン,Cortex-M0+コア,Cortex-M0コア,Cortex-M3コア,Cortex-M4コアIoTマイコン,STM32CubeMX,stm32,STM32CubeIDE,マンスリー・アップデート,HTML

図1 PDF版からHTML版へ変わったSTM32マイコン マンスリー・アップデート
図1 PDF版からHTML版へ変わったSTM32マイコン マンスリー・アップデート

STマイクロエレクトロニクスのSTM32マイコン マンスリー・アップデートがPDF版からHTML版に変わって3ヶ月経過しました。新しいHTML版の掲載フォーマットもほぼ固まったと思いますので、両者の比較結果を示します。

PDF版は、紙(Book)の置換えであるため、掲載文書内容と全体との関係、掲載ページも解りやすかったのに対し、ハイパーリンクのHTML版では、モバイルデバイスへ最適化したため、「コンテンツ重視の掲載へ変わった」、これが結論です。HTML版で見逃しがちな全体像との関係を明らかにするため、リンク集を別途作成しました。

※STマイクロエレクトロニクスの日本語MCU技術資料は、弊社ブログ掲載MCUベンダ中、最も優れています。STM以外のMCU開発中の方にも役立つ情報が、リンク集から得られると思います。

HTML版STM32マイコン マンスリー・アップデートの大項目タイトル

PDF版からHTML版へ変わったSTM32マイコン マンスリー・アップデートのタイトル比較
PDF版からHTML版へ変わったSTM32マイコン マンスリー・アップデートのタイトル比較

HTML版とPDF版のSTM32マイコン マンスリー・アップデート大項目タイトル(図1の赤囲いこみ部分)を比較すると、HTML版はPDF版よりも具体的内容を示すタイトルに変わっています。

実は、PDF版も大項目以下の中項目、小項目タイトルは、HTML版と同じでした。PCで読む(見る)ことが前提のPDF版は、一度に読めるページや範囲もスマホに比べ広く、目的記事への移動も簡単なため、更新内容の構造(大項目>中項目>小項目)が解りやすい掲載が可能でした。

一方、スマホで読む(見る)ことが前提のHTML版は、構造よりもそのタイトルを一目見ただけで読んでもらえる工夫が必要なうえ、表示はスマホの縦長連続ページのため移動に制約があり、コンテンツ重視のタイトル掲載に変わったのだと思います。

HTML版はコンテンツフィルタリングに適す

移動中やチョットした空き時間にスマホで情報をチェックすることは、COVID-19以前はよくありました。膨大なアップデート情報コンテンツが有用か無用かを瞬時に判断し、後で有用情報のみにアクセスすることで能率は向上します。

これは、コンテンツフィルタリングです。

HTML版は、フィルタリングに適す構成を簡単に作成可能です。要不要判断に最低限必須なタイトルとその概要を掲載し、「詳細はコチラ」でリンク先へジャンプする形式です。

フィルタリング結果をスマホへ上手く覚えさせておけば、より効率的です。

PDF版はスマホで操作しにくい

PDF版の内容の一部切取り(コンテンツ加工)や広範囲なコピー(コンテンツ抽出)は、スマホでは操作しにくく、結局全部保存か、または捨てる結果となります。PCならば、必要情報のみの加工・抽出・保存は簡単なのですが…😥。

つまり、スマホなどのモバイルデバイスとの相性が良いのがHTML版、PCと相性が良いPDF版とは掲載内容表現のしかたが異なる訳です。

従来の月刊PDF版は、その月の変更情報のみを抽出掲載し、しかも全体へもリンク表示するなど、読者(情報の受け手)寄りの手間がかかる編集でした。HTML版は、STマイクロエレクトロニクス(情報の送り手)が強調したいコンテンツに重きを置いた編集となっています。

HTML版の全体像リンク集

在宅勤務の増加に伴い、モバイルとPCの両デバイスを併用して能率を上げたいところですが、現状のHTML版では、難しいと思います。※全体像が判る従来のPDF相当が参照できるリンクが追加されれば別ですが、これには編集に二度手間がかかります。

そこで、月刊HTML版で見逃しがちな全体像との関係を明らかにするリンク集を、お節介ながら作成しました😅。

リンク内容 補足
マンスリー・アップデートバックナンバー HTML版:2020年6月号以降
PDF版:2017年1月号~2020年5月号
日本語MCU技術ノート Cortex-Mコア横断的な周辺回路Tips
日本語MCU開発のヒント
日本語トレーニング資料 Cortex-Mコア毎のセミナープレゼン資料
STM32マイコン開発環境 STM32CubeIDE/MXなどのダウンロードリンク
STM32マイコンファームウェア Cortex-Mコア毎のファームウェアダウンロードリンク
セミナー・イベント・キャンペーン セミナー開催予定/終了、キャンペーン一覧
Q&Aで学ぶマイコン講座 初心者向けMCU技術解説記事

あとがき

STM32マイコン マンスリー・アップデートに限らず殆どのアップデート情報は、モバイルファーストへ向けた「コンテンツタイトル+数行の概要+詳細はコチラ」の形式です。

全体像も見つつHTML版が強調する詳細コンテンツを理解・整理・記憶したい方には、多少効率が落ちるかもしれませんが本稿リンク集が役立つと思います。

繰返しになりますが、STマイクロエレクトロニクスの日本語MCU資料は、他社MCU開発中の方でも参考になる情報満載で、質・量ともに優れています。開発に行き詰まりが生じた時など、ベンダの壁を越えて参照すると、打開策が見つかるかもしれません。

アフターCOVID-19では、MCU開発のしかたも変わりそうです。丁度、ADAS(Advanced Driver Assistance System:先進運転支援システム)で自動車ソフトウェア開発が激変したように、エッジMCU開発も、IoTセキュリティ絡みで、より効率的で複雑な処理をこなせるように変化すると思います。

MCU開発の情報収集と生産性向上、両方にお役に立てば幸いです。

MCU:マイコン,LibreOffice,LPCマイコン,Linux,Kinetisマイコン,Windows,PC:パソコン,STM32マイコンLPCXpresso,Windows 10,LibreOffice,STM32CubeIDE,開発環境,Fresh,Still,Linux Mint,Linux

PCへインストールするLinuxには、様々なディストリビューションがあります。ディストリビューションとは、Linux 本体とLibreOfficeなどの標準搭載アプリケーションを1パッケージにまとめ、利用者がLinuxインストールとその活用を即座にできるようにした配布形態のことです。

本稿は、これらディストリビューションの中で、筆者がLinux Mint 20 MATEエディション(64ビット)をWindows MCU開発環境トラブル発生時、代替に使えるLinuxディストリビューションとしてお勧めする理由を示します。

Linuxディストリビューション

2020年7月発表のWebサイト向けLinuxディストリビューションシェアを見ると、UbuntuやDebianなどがメジャーなディストリビューションであることが判ります。

様々なLinuxディストリビューション、特にUbuntuやDebian、Raspberry Pi用のRaspbianと本稿のLinux Mint概要は、コチラの情報が参考になります。用途、安定性/情報量/デザイン性などでディストリビューションを評価した結果が示されています。

Linux Mintとメジャーディストリビューションの差

UbuntuとLinux Mintの関係を、まとめました。

  • Ubuntuベースの派生形として、様々なデスクトップPCディストリビューション(Linux Mint)がある
  • Ubuntuは定期的にアップグレートされるが、主にセキュリティ修正のみでアプリケーションの大幅更新をしない5年長期サポート版:LTS版(最新は2020年4月リリース:Ubuntu Desktop 20.04)もあり、このLTS版に準ずる派生ディストリビューション(Linux Mint 20.x)がある
  • Ubuntuアプリケーションリポジトリ(公式アプリケーション保存庫)をそのまま使える派生ディストリビューション(Linux Mint)がある

MCU開発者の方は、EclipseベースIDE(EclipseベースIDE≒Ubuntu)なら、どれもほぼ同じユーザインタフェースで、同じプラグインが使えるのと同様と言えばご理解頂けると思います。

Ubuntuが最もシェアが高いのは、派生ディストリビューションのベースだからです。また、MCUベンダのLinux版IDEなどの説明書も、トップシェアUbuntu利用を前提に提供されます。

Linux Mintは、Ubuntu派生ディストリビューションの1つで、Linux特有のコマンド操作やリポジトリもUbuntuと同じです。また、UbuntuよりもWindowsやMacの操作に近いGUIを持ち、万一の際のシステムバックアップツール(TimeShift)も標準搭載済みです。

つまり、「Windows/Macユーザが、Linux Mintインストール後、Linux本体のカスタマイズは不要で、即MCU開発アプリケーションが利用できる点」が、Linux Mintをお勧めする最大の理由です。

※MCU開発アプリケーション(例えばNXPのMCUXpresso IDE、STMのSTM32CubeIDE)は、非搭載ですので、別途インストールは必要です。

Linux MintとメジャーディストリビューションUbuntuの主な差は、GUI、少し遅れるリリース時期と考えて頂ければ良いと思います。

Linux Mintの3エディション

Windows Home/Proと同様、Linux Mintにも、3種類のエディションがあります。

GUI処理の軽い方から、Xfce/MATE/Cinnamonエディションと呼ばれます。少し古い版ですが、Linux Mint 17 ユーザズガイドによると、どのエディションを使えば良いかわからない時は、METAエディションを使ってください、とあります。

筆者は3種類とも試しましたが、処理の軽さとメニューの解りやすさ、使いやすさからMETAエディションをお勧めします。

GUIは、好みの問題がありますので、3エディションをインストールして試すと良いでしょう。クリーンインストール所要時間は、せいぜい30分程度です。インストール方法は、まとめに記載しております。

まとめ:お勧めLinux MCU開発環境Linux Mint 20 MATEエディション(64ビット)

最新Ubuntu Desktop 20.04ベースで、Windows MCU開発環境トラブル発生時、代替に使えるLinuxディストリビューションとして、Linux Mint 20 METAエディション(64ビット)をお勧めする理由を示しました。

多発するWindows起因のトラブル発生時、Windows MCU開発に慣れた開発者が、MCU開発を中断することなくLinux環境で継続するには、Windows操作に近いGUI、LTS版のOS安定性、Linux特有コマンドへの情報量多さなどが必要で、これらを満たすのがLinux Mintです。

Linux Mint 20 METAエディション(64ビット)のPCインストール方法は、ユーザズガイドにも記載されていますが、コチラなどを参考にすると素早くインストールができます。

Linux Mint 20と旧版Mintシェアは、Mint公式ブログのMonthly News – July 2020によると、投稿時点では、32ビットPCにも対応した前版Mint 19.xのほうが高いのですが、いずれ逆転すると思います。全ての32ビットOS新規開発は、完了しました。

Mint 20標準搭載のLibreOfficeは、安定性重視のStill版v6.4.5です。カスタマイズ不要と書きましたが、Fresh版v7.0.0へ変更したい方は、コチラに方法が記載されています。



MCU:マイコン,STM32マイコン,Cortex-M0+コアテンプレート,セキュリティ,STM32G071,STM32G0x,STM32CubeIDE,STM32G0 FW,HAL API

STマイクロエレクトロニクス統合開発環境STM32CubeIDEのHAL APIを利用し開発したSTM32G0xテンプレートVersion2を、6月1日から発売します。

上記弊社サイトよりテンプレート付属説明資料P1~P3が無料ダウンロードできますので、ご検討ください。

STM32G0xテンプレートV2内容

従来よりも高性能で低消費電力動作の新汎用MCU:STM32G0シリーズのアプリケーション開発を、初心者でも簡単に始められ、しかも、処理能力やセキュリティ要求が変化した場合でも、開発資産を活かしたままMCU変更が可能なHAL APIプログラミングに重点を置きました。

そこでVersion2では、LL APIからHALAPI利用アプリケーション開発用テンプレートへの変更、統合開発環境SW4STM32から、STM32CubeIDEへの変更に対応しました。

STM32G0xのもう一つの特徴であるセキュアブート、セキュアファームウェア更新機能を活用する機能は、G0xテンプレートV2以降で対応します。

これらセキュリティ機能は、関連投稿:STM32G0/G4のRoot of Trust(1)~(3)で示したように、IoT MCUでは必須です。これら実装のメインストリーム(=汎用)・マイコンは、現在G0/G4シリーズです。

Root of Trust対応中のSTM32マイコン一覧(出典:FLXCUBESBSFU0819J)
Root of Trust対応中のSTM32マイコン一覧(出典:FLXCUBESBSFU0819J)

汎用性とセキュリティの両方を持つSTM32マイコンをご検討中の方は、先ずはSTM32G0xテンプレートV2で汎用性の部分をマスターできます。

STM32G0xテンプレートV2のご購入、お待ちしております。

Windows 10 May 2020 Update(バージョン2004)対策

5月28日、Windows 10の新バージョン2004の配布が始まりました。残念ながら、早くも複数の大型更新トラブルが発生中です(10件の更新トラブル情報)。

Fast/Slow リングの目的、月一Windows 10 Updateでの多くのトラブル、一般PC利用者への悪影響…等々、このところのMicrosoftは、何か変だと思わずにはいられません。

バージョン2004への更新を暫く避けようと考えている方は、Pro/Homeともに、コチラの方法が参考になります。

MCU:マイコン,STM32マイコン,Cortex-M0+コア,Cortex-M0コア,Cortex-M3コアテンプレート,STM32F1x,STM32F072RB,STM32F103RB,STM32CubeMX,STM32F0x,STM32CubeIDE

STマイクロエレクトロニクス統合開発環境STM32CubeIDEのHAL APIを利用し開発したSTM32FxテンプレートVersion2を発売します。

上記サイトよりテンプレート説明資料P1~P3が無料ダウンロードできますので、ご検討ください。本稿は、この「ダウンロード以外」の資料項目を簡単に示します。

全ツールビルトインSTM32CubeIDE

STM32CubeIDEは、従来は別ツールとして提供してきたSTM32CubeMXがビルトイン済みです。しかも開発ツール全てが自動的に最新版へ更新します。もちろんHelp>Check for Updatesで手動更新も可能です。

2020年5月15日現在のブログ関連STM32MCUに関係するSTM32CubeIDE状況が下図です。

STM32CubeIDE状況(2020年5月15日現在)
STM32CubeIDE状況(2020年5月15日現在)

STM32FxテンプレートV2は、HAL(Hardware Abstraction Layer)API利用アプリケーション開発用テンプレートですので、MCU性能過不足時、他のSTM32MCUコアへも開発アプリケーションが流用可能で、プロトタイプ開発に最適です。

STM32FxテンプレートV2ダウンロード説明資料以外の概略

以下、単語の頭に付くSTM32は省略して記述します。また、付属説明資料も同様にSTM32を省略記述していますので、ご注意ください。

AN記載CubeMXプロジェクトが読めない時の対策

アプリケーション開発の出発点となるビルトインツール:CubeMXが最新版へ自動更新されるのは、次々に発売される最新STデバイスを直ぐに開発できるメリットがあります。しかし、逆に開発者が参照するアプリケーションノート(AN)記載のCubeMXプロジェクトとの版数差が大きくなるデメリットもあります。

この版数差が大きくなると、AN記載CubeMXプロジェクトが、ビルトインCubeMXで読めない場合があります。特にF0/F1シリーズなど古くから提供されてきたデバイスのANに顕著です。STM32FxテンプレートV2付属説明資料で、この対策を示しています。

CubeIDE新規プロジェクト作成(1)/(2)/(3)の違い

STM32CubeIDEの3新規プロジェクト作成の差
STM32CubeIDEの3新規プロジェクト作成の差

CubeIDEユーザマニュアル:UM2553には、本日時点で新規プロジェクト作成説明は(1)/(3)のみです。未説明の最新版新規プロジェクト作成(1)/(2)/(3)の違いなど、開発をスムースに進める様々なTipsも説明資料に加えています。

CubeMX変更箇所、別資料化

STM32FxテンプレートVersion1では、CubeMX周辺回路の設定をテンプレート説明資料内に記載しておりました。ご購入者様からのご質問も、このCubeMX設定に関するものが多く、このツールの重要性が判ります。

そこでVersion2は、このCubeMX設定をCubeMX変更箇所.pdfとして別資料化し、CubeIDEプロジェクト内に添付しました。CubeMXプロジェクト編集時に、同時参照ができます。

STM32CubeIDEプロジェクト内添付のSTM32CubeMX変更箇所説明資料
STM32CubeIDEプロジェクト内添付のSTM32CubeMX変更箇所説明資料

例えば、ベースボードテンプレートのLCD接続に利用したSTM32F0評価ボード:Nucleo-F072RBのGPIOピン設定方針なども記載しています。CubeMXピン配置は、MCUパッケージで選択しますので、評価ボード利用のCubeMX使用ピン設定時に、下図は便利だと思います。

ベースボードと評価ボード接続時のSTM32CubeMX使用ピン設定方針
ベースボードと評価ボード接続時のSTM32CubeMX使用ピン設定方針

STM32FxテンプレートV2と添付説明資料を使うと、STM32汎用MCU開発をスムースに進められます。

STM32FxテンプレートV2のご購入、お待ちしております。

MCU:マイコン,STM32マイコン,Cortex-M0+コア,Cortex-M0コア,Cortex-M3コアテンプレート,STM32F1x,STM32F072RB,STM32F103RB,STM32CubeMX,STM32F0x,STM32G071,STM32G0x,STM32CubeIDE

サードパーティ仏)AC6社の統合開発環境SW4STM32で開発したSTM32FxテンプレートとSTM32G0xテンプレートを、新しいSTマイクロエレクトロニクス純正STM32CubeIDE対応のVersion2:V2へ更新し販売開始します(STM32Fxテンプレートは2020/05/15、STM32G0xテンプレートは2020/05/30)。

V2では、V1ご購入者様から頂いたご意見ご感想を反映し、新しいSTM32CubeIDEやビルトインSTM32CubeMX使い方説明に工夫を加え、開発トラブル回避、既存アプリケーション資産活用方法などの新たなTipsも添付解説資料に加えました。

テンプレートと合わせてスムースなSTM32MCUアプリケーション開発にお役に立てると思います。

本稿は、説明を工夫したSTM32CubeIDEビルトインSTM32CubeMX使い方の一部を紹介します。

STM32CubeMX使い方:コツ

※以下、用語の頭に付く「STM32」は省略して記述します。

MCU周辺回路の初期化コードを自動生成するCubeIDEビルトインCubeMXも、以前投稿したスタンドアロンCubeMXの使い方と同じです。

CubeMXはSTM32MCU開発の出発点となるツールですので、十分理解した上で着手したいものです。テンプレートV2では、ビルトインCubeMXが生成するファイルに着目し、説明に以下の「使い方のコツ」と「簡単な順位」を追加しました。

CubeMXは、生成するファイル数が多い上に、使用するMCU周辺回路が増えると、生成コード量も多くなり、初めての方には少し解りにくいツールです。弊社テンプレートV1も、このCubeMXに関する質問を多く頂きました。それでも、コツを知っていれば十分使いこなせます。

そのコツとは、以下2点です。
・チェックが必要な自動生成ファイルは、main.hのみ
・main.cに自動追加される周辺回路ハンドラと、初期化コードが分かれば使える

F1シリーズSTM32F103RBの評価ボード:Nucleo-F103RBに弊社テンプレートを応用した例で説明します。

STM32CubeMX生成のF1BaseboardTemplateファイル構成
STM32CubeMX生成のF1BaseboardTemplateファイル構成

CubeMXが自動生成するファイルが、赤:CubeMX生成欄の9個です。このうち注目すべきは、太字赤☑で表示したmain.hとmain.cです。

main.hは、CubeMXで設定したユーザラベル、評価ボードならばB1[Blue PushButton]やUSART_TX/RX、LD2[GreenLed]などを定義した生成ファイルです(※[ ]内は、自動生成時に削除されますので覚え書きなどに使えます)。

main.hのコメント:Private definesの後にこれらの定義が生成されます。これら定義をチェックしておくと、「CubeMX自動生成コードを読むときに役立ち」ます。

main.cは、CubeMXが生成するメイン処理で、評価ボードのCubeMXデフォルトでコード生成:(Alt+K)した場合には、main.cのコメント:Private variablesの後にUSARTハンドラ:huart2と、コメント:Private function prototypesの後にUSART2の初期化コード:MX_USART2_UART_Init()と、その「初期化コード本体がmain.cソースの後ろの方に自動生成」されます。

その他の7個ファイルは、当面無視しても構いません。CubeMXデフォルトのHAL (Hardware Abstraction Layer)APIを利用し、割込みを使わない限り、ユーザコードには無関係だからです(※7個ファイルを知りたい方は、関連投稿:STM32CubeMX生成ファイルのユーザ処理追記箇所を参照してください)。

CubeMXが周辺回路:USART2初期化コードとそれに使う定義を自動生成済みなので、後は、main.cの無限ループ内の指定区間:USER CODE BEGIN xyz~USER CODE END xyzに、Usart2やLD2を使ったHAL APIユーザコードを追記すれば、アプリケーションが完成します。

追記したユーザコードは、再度CubeMXでコード生成しても、指定区間のまま引き継がれます。

ちなみに、アプリケーションで使用可能なHAL APIは、Ctrl+Spaceでリスト表示されます(Content Assist)。そのリストから使用するHAL APIを選択すれば、効率的なユーザコード追記が可能です。
※Content Assistの賢いところは、「ソースコード記述の周辺回路ハンドラを使ってHAL APIをリスト化」するところです。記述なしハンドラのAPIはリスト化されません。

つまり、CubeMXのPinout & Configurationタブで周辺回路を設定後コード生成しさえすれば、直ぐにユーザコードを追記できるファイルが全て自動的に準備され、これらファイルの指定区間へユーザコードを追記すれば、アプリケーションが完成する、これがCubeMXの使い方です。

このCubeMX使い方理解に最低限必要なファイルが、簡単順位:0のmain.hとmain.cの2個です。CubeMX生成ファイル数は9個ありますが、先ずはこの2個だけを理解していれば十分です。

LD2を点滅させるアプリケーションなどを指定区間へ自作すると、具体的に理解が進みます。

STM32CubeMX使い方:周辺回路のファイル分離

評価ボードのCubeMXプロジェクトファイル(*.ioc)は、デフォルトでB1[Blue PushBotton]とUSART2、LD2[GreenLed]を使っています。これらは、評価ボード実装済み周辺回路です。

これら評価ボード実装済み周辺回路へ、弊社テンプレートを適用したのが、シンプルテンプレートです(表:シンプル追加の欄)。

例えば、B1スイッチ押下げ状態をSW_PUSH、USART送信タイムアウトをUSART2_SEND_TIMEOUTなどソースコードを読みやすくする定義の追加は、CubeMX生成main.hの指定区間へ追記することでもちろん可能です。

しかし、他MCUコアへの移植性や変更のし易さを狙って、あえて別ファイル:UserDefine.hへこれらを記述しています。

同じ狙いで、LD2とB1、USART2のユーザ追記制御部分を、Led.cとSw.c、Usart2.cへファイル分離しています。ファイル分離により、HAL API利用のためMCUコア依存性が無くなり、例えば別コアのF0やG0評価ボードで同じ周辺回路を使う場合は、そのファイルのまま流用可能になります。

これらファイル分離した周辺回路の追記制御部分を、main.cの無限ループと同様に起動するのが、Launcher.cです。

つまり、シンプルテンプレートは、評価ボード実装済み周辺回路に、何も追加せずに弊社テンプレートを適用したシンプルな応用例です。その理解に必要なファイルが、緑:シンプル追加欄の☑で、簡単な順に1~5の番号を付けています。

CubeMXのそのままの使い方で周辺回路を追加すると、生成ファイル数は、赤:9個のままですが生成コード量が増えます。周辺回路の初期設定コード増加は当然ですが、この部分はCubeMX自動生成のためミス発生はありません。

しかし、ユーザコード指定区間へ、追加した周辺回路の制御コードを追記するのは、ユーザ自身です。様々な周辺回路制御が混在し追記量が増えてくると、バグやケアレスミスの元になります。

この対策に、周辺回路毎にファイルを分割し、この分割したファイルへ制御コードを記述するのが、シンプルテンプレートです。1周辺回路の制御コードが1ファイル化されていますので、簡単順位1~5の内容は、どれもとても簡単です。

さらに、ADC制御やLCD制御など、殆どの組込アプリケーションで必要になる周辺回路を追加し、Baseboardと評価ボードを結線、デバッグ済みのアプリケーションがベースボードテンプレートです(橙:ベースボード追加欄の3個)。

ユーザ追加ファイルは、全てMCUコア依存性がありません。CubeMXのHAL APIコード生成を行えば、コアに依存する部分は、CubeMX生成ファイル内に閉じ込められるからです。つまり、ユーザ追加ファイルは、全てのSTM32MCUへ流用できる訳です。

これらシンプルテンプレート、ベースボードテンプレートから新たなSTM32MCUアプリケーション開発を着手すれば、新規にアプリケーションをゼロから開発するよりも初期立上げの手間を省け、さらに機能追加や削除も容易です。

STM32CubeMX使い方:周辺回路プロパティ、既存AN利用法

CubeMXへ追加した周辺回路のプロパティ設定値やその理由、更に、既存アプリケーションノート利用方法など、新しいSTM32CubeIDE開発トラブルを回避し、スムースに開発着手できる様々なTipsをテンプレート添付説明資料へ加えています。

マイコンテンプレートサイトでSTM32Fxテンプレートは2020/05/15、STM32G0xテンプレートは2020/05/30発売開始です。ご購入をお待ちしております。
※STM32Fx/G0xテンプレートV1ご購入後1年以内の方は、後日V2を自動配布致しますのでお待ちください。

MCU:マイコン,STM32マイコン,Cortex-M0+コア,Cortex-M0コア,Cortex-M3コアテンプレート,ARMマイコン,SW4STM32,マイコンテンプレート,STM32MCU,STM32Fx,STM32G0x,STM32CubeIDE

STマイクロエレクトロニクスの新しい純正統合開発環境:STM32CubeIDEを使い

2017/09/01発売 STM32Fxテンプレート
2019/06/01発売 STM32G0xテンプレート

を、5月中頃にVersion2:V2改版完了を目標に開発中です。どちらのテンプレートも、サードパーティ仏)AC6社の統合開発環境:SW4STM32と当時のSTM32CubeMXで開発しました。もちろん当時、STM32CubeMXビルトインSTM32CubeIDEはありませんでした。
※STM32CubeMXビルトインSTM32CubeIDEの詳細は、コチラの関連投稿3章を参照してください。

STM32FxテンプレートとSTM32G0xテンプレートのVersion2改版
STM32FxテンプレートとSTM32G0xテンプレートのVersion2改版

本稿は、改版で気が付いた1~3年前のSTM32MCU開発と、現在の「変わったところ/変わらないところ」を説明します。SW4STM32からSTM32CubeIDEへのIDE変更は自主的に変える部分ですが、IDE以外も色々な部分が変わっています。

本稿の目的

本稿は、従来IDEのSW4STM32から新しいSTM32CubeIDEへの移行を妨げるのが目的ではありません。

ほんの数年前のMCU開発環境であっても、最新開発環境へ変える場合には、環境変化への対応時間が必要であることを示したい訳です。

この数年間のブランクは、顧客へ納入済みのアプリケーションを改版、改良する場合によく出会う時間差です。MCU環境は目まぐるしく変わります。この変化にどのように上手く対応していくかも、MCU開発者要件の1つです。

現状のMCU開発は、複数の開発ツールがそれぞれ連携してアプリケーション開発が進みます。セキュリティなどの付加サービスであれば、なおさらです。これら複数ツールは、足並みを揃えて全てが一気に最新環境へ対応することは少ないでしょう。

さらに、STM32G0シリーズのような新しいデバイス情報も収集しておく必要があります。これらを考慮したうえで、顧客からのアプリケーション改版、改良案件に対して、その時点での最適解を提案することが必要だと思います(以下、用語の頭に付く「STM32」は省略して記述します)。

STM32CubeMX:コード生成ツール

CubeMXの自動生成する周辺回路の初期設定コードが変わりました。USART2の例が下図です。

STM32CubeMXの周辺回路初期設定変化
STM32CubeMXの周辺回路初期設定変化

左の従来は、USER CODE追記部分が有りませんが、右の現在は、BEGIN~END部分へユーザコードを追記できます。USART2以外にも、TIM3やIWDGの初期設定コードが同様に変わっています。

この追記部分のおかげで、より解り易い処理フロー作成が可能です。弊社テンプレートV2もこれを活用します。

MCUの消費電流Chartが生成レポート6.6に追加されました。25℃/3.3V動作時のG0/F0/F1各SimpleTemplateのChartを示します。縦軸を比較すると新汎用MCU:G0シリーズの低電力性能がよく解ります。

STM32G0、STM32F0、STM32F1の消費電流比較
STM32G0、STM32F0、STM32F1の消費電流比較

G0シリーズの特徴は、コチラの関連投稿などを参照してください。

AN:アプリケーションノート

アプリケーション開発に最も役立つのが公式AN:サンプルコード集です。CubeMXを開発起点とするサンプルコード集が、F0はAN4735、F1はAN4724、G0はAN5110です。基本的な周辺回路制御方法と、それらを生成するCubeMXプロジェクトファイルが一覧表になっています。

例えば、F1のHAL(Hardware Abstraction Layer)API利用ADCサンプルコード4種を抜き出したのが下記です。

STM32F1シリーズのADCサンプルコード
STM32F1シリーズのADCサンプルコード

従来比、各AN添付のCubeMXプロジェクトファイルは増えましたが、F0/F1は、ブランクプロジェクト(≒開発起点に使えない空プロジェクトファイルで下図左側)です。ここは、数年前と変わっていません。

また、どのサンプルコードもSW4STM32/IAR EWARM/Keil MDK-ARM対応で、未だ新しいCubeIDEには対応していません。
※サンプルコードの中身は、中級開発者には参考になりますが、初心者には、CubeMXプロジェクトファイルがある方が周辺回路の設定内容がより解り易いと思います。

ちなみに弊社テンプレートには、開発起点となるCubeMXプロジェクトファイルを自作し添付しています(下図右側がF1BaseboardTemplateの例)。

この添付CubeMXプロジェクトファイルがあると、どなたにでもテンプレートを活用したアプリケーション開発やピン配置変更、内容修正が容易です。周辺回路設定方法などもV1で頂いたテンプレートご購入者様の意見を反映し添付します。

STM32CubeMXブランクプロジェクトとSTM32F1テンプレートのプロジェクトファイル比較
STM32CubeMXブランクプロジェクトとSTM32F1テンプレートのプロジェクトファイル比較

STM32G0シリーズHAL APIアプリケーション重要性

F0~F1のMCU性能を1つでカバーし、かつ低消費動作なG0シリーズMCUには、その性能を100%活かせる専用LL(Low Layer)API開発が適すと考え、G0xテンプレートV1は、LL APIを主として発売しました。

しかし、G0シリーズは、コア依存性が少ないHAL APIアプリケーション開発がSBSFU実装も可能であり優れています(詳細は、コチラのG0/G4 Root of Trust関連投稿を参照してください)。G0xテンプレートV2は、HAL APIでテンプレートを新規開発します。
※SBSFUを実装したG0xテンプレートは、V2以降(多分V3)で予定しています。

BSP:Board Support Package

従来のSW4STM32は、サンプルコードにBSPを使っていました。しかし、新しいCubeIDEは、BSPを使わずHAL APIで直接制御するサンプルコードが主流です。BSPの実体はHAL APIの組合せですので、BSPを使うよりも評価ボード依存性が無く、より応用流用し易いのは、CubeIDEです。

テンプレートV2も、BSPを使わないCubeIDE方式にします。

Baseboard

mbed-Xpresso BaseboardとNucleo評価ボード接続
mbed-Xpresso BaseboardとNucleo評価ボード接続

秋月電子で簡単に入力できたBaseboardが、現在取扱終了です。代わりにアマゾンマルツで簡単入手できます。

LCDやSWなどのシールドをそれぞれ単体で追加購入するよりも、低価格で評価ボード機能追加ができます。その分、手配線は必要ですが😅、オス-オスジャンパーワイヤで手軽に接続ができます。

STM32CubeIDE日本語文字化け

CubeIDE当初から続く日本語文字化けは、最新版でも解消されていません。コチラの方法で解決しました。

SW4STM32 Webinar

従来の統合開発環境:SW4STM32もまだまだ現役です。例えば、2020年5月5日、15:00~17:00に2時間無料Webinarがあります(多分、英語かフランス語)。最新STM32MP1対応SW4STM32解説なので、興味ある方は、視聴してはいかがでしょう!

Free webinar on Embedded Linux with System Workbench for Linux

さいごに

開発環境変化への対応が必要と説明しましたが、実際にどれ程の時間が必要かは示していません。上手く対応できれば即座ですが、下手をすると本来のアプリケーション開発、改良よりも時間が掛かってしまいます。実際、筆者が対処に結構時間を要したものもありました。

STM32FxテンプレートV2とSTM32G0xテンプレートV2は、筆者が経験したSTM32CubeIDE開発トラブル対処法や、既存AN資産を活用するための様々な対処方法やTipsも解説資料に加えます。テンプレートと合わせてスムースなSTM32MCU開発にお役に立てると考えています。

MCU:マイコン,STM32マイコン,Cortex-M0+コア,Cortex-M0コア,Cortex-M3コア,Cortex-M4コアSTM32CubeMX,STM32CubeIDE,Root of Trust,STM32CubeProgrammer,STM32CubeMonitor,ADAS

STマイクロエレクトロニクスのSTM32MCU純正開発環境STM32Cubeツールファミリに新に追加されたSTM32CubeMonitorを解説します。

STM32CubeMonitor特徴1:変数リアルタイムモニタ

STM32MCUアプリケーション開発フローと、純正開発環境STM32Cubeツールファミリ:STM32CubeMX、STM32CubeIDE、STM32CubeProgrammer、 STM32CubeMonitorの機能配分が下図です(以下、各ツールの頭に付くSTM32は省略して記述します)。

STM純正 4 Software Development Toolsと機能(出典:STMサイト)
STM純正 4 Software Development Toolsと機能(出典:STMサイト)

この1~4段階の開発フローを繰返すことでアプリケーション完成度が上がります。CubeMX、CubeIDE、CubeProgrammerの機能には重複部分がありますが、Monitoring機能を持つのは、CubeMonitorだけです。

通常のMCU開発は、CubeMXがビルトインされた4段階全てをカバーする統合開発環境:CubeIDEを使えば事足ります(CubeMXビルトインCubeIDEの詳細は、関連投稿の3章をご覧ください)。

CubeProgrammerは、MCUオプションバイト設定などCubeIDEではできないBinary Programmingの+α機能を提供します。例えば、STM32G0/G4のRoot of Trust(3)の投稿で示したSBSFU書込みや消去などがこの機能に相当します。

CubeIDEでも、デバッガ上でアプリケーションの変数モニタは可能です。しかし、あくまでDebugging MCUの(開発者向け)変数モニタです。CubeMonitorは、アプリケーションを通常動作させたまま、変数をリアルタイム(ライブ)モニタができる点が、CubeIDEとは異なるMonitoring機能です。

STM32CubeMonitor特徴2:データ可視化

リアルタイムで取得したデータは、下図のようにPCダッシュボードに予め準備済みのChartや円グラフにして可視化することができます。しかも、これら表示が、PCだけでなく、スマホやタブレットへも出力可能です。

STM32CubeMonitorのデータ可視化(出典:DB4151)
STM32CubeMonitorのデータ可視化(出典:DB4151)

つまり、CubeMonitorを使えば、開発したアプリケーションのライブ動作を、あまり手間をかけずにビジュアル化し、エンドユーザの顧客が解るように見せることができる訳です。これが、一押しの特徴です。

文章で説明するよりも、コチラの動画を見ていただくと一目瞭然です。

組込みアプリケーションのビジュアル化

組込みアプリケーション開発も、自動車のADAS(Advanced Driver-Assistance Systems:先進運転支援システム)のおかげでビジュアル化がトレンドです。

組込みアプリケーションのビジュアル化
組込みアプリケーションのビジュアル化

もちろん、超高性能MCUやデュアルコアMCUで実現するアプローチが本流です。が、本稿で示した2020年3月発表のCubeMonitorを使えば、産業用MCUでも案外簡単にビジュアル表示出力が可能になりそうです。

組込みアプリケーションは、MCUで結構大変な処理を行っていても、外(顧客)からは単にMCUデバイスしか見えません。CubeMonitorで処理データを可視化するだけでも、複雑さや大変さを顧客へ示すツールにもなります。

MCU:マイコン,STM32マイコン,Cortex-M0+コア,Cortex-M4コアSTM32G0,NUCLEO-G071RB,STM32CubeIDE,NUCLEO-G474RE,STM32G4,Root of Trust,X-CUBE-SBSFU,セキュア・ブート,セキュア・ファームウェア更新,STM32G4テンプレート,デュアルファームウェアイメージ,STM32CubeProgrammer

STM32G0/G4シリーズRoot of Trust実現(3)は、第2回で示したSTM32G4評価ボード:NUCLEO-G474RE 利用STM32G4テンプレート開発環境と、デュアルファームウェアイメージのサンプルアプリケーションを使って、セキュア・ブート(SB)、セキュア・ファームウェア更新(SFU)のための準備、その具体的動作の説明をします。

初めに本稿(3)のまとめを示し、最後の章でRoot of Trust実現(1)~(3)全体のまとめを示します。

STM32G0/G4のRoot of Trust(3)まとめ

  • セキュア・ブート(SB)、セキュア・ファームウェア更新(SFU)に、評価ボード毎にSTM32CubeProgrammerを使ったオプションバイト設定必要。
  • Root of Trust(SBSFU)実装MCUは、VCP経由アクセスのみ可能。
  • SBSFUローカルVCPダウンロードのために、Tera TermとYMODEM送信機能利用。
  • STM32G4評価ボード:NUCLEO-G474REで、SBSFU実装デュアルファームウェアイメージアプリケーション動作説明。
  • STM32G0評価ボード:NUCLEO-G071RBでも、STM32G4評価ボードと同じRoot of Trust(SBSFU)実装動作を確認。

STM32G4評価ボード準備

SB、SFUサンプルアプリケーションの動作確認のために評価ボード:NUCLEO-G474REの事前準備が必要です。これには、STM32CubeProgrammerを使います。STM32G4の場合は、UM2262 図18ですが、オプションバイト等の設定は不要(デバイスデフォルトOK)です。

8.1.3のFlash全消去(Full chip erase)処理をします。また、評価ボードのST-LinkファームウェアをV2J29以上に更新します。更新は、評価ボードとUSB接続後、STM32CubeProgrammerのFirmware Updateクリックで最新版ST-Linkファームウェアへ更新されます。

STM32CubeProgrammerのST-Linkファームウェア更新
STM32CubeProgrammerのST-Linkファームウェア更新

Root of Trust(SBSFU)準備

図17. ステップバイステップ実行から判るように、最初のStep1:SBSFUダウンロード以外は、全て評価ボードのVirtual COMポート(VCP)経由でアプリケーションをダウンロードします。STM32CubeIDEがプログラミングやデバッグで使うST-Link接続(SWD接続)は、外部からのMCU攻撃とSBSFUが解釈するからです。

セキュア・ブート(SB)が攻撃と判断した時は、当然、アプリケーションを起動しないためMCUは動作停止します(SB処理は、第2回2章を参照してください)。

図17. ステップバイステップ実行(出典:UM2262)
図17. ステップバイステップ実行(出典:UM2262)

つまり、ファームウェアイメージのアプリケーションがディアル/シングルに関係なくRoot of Trust(SBSFU)実装MCUは、VCP経由アクセスのみ可能となります。また、VCP経由でのアプリケーションデバッグは非効率なため、十分なデバッグ済みアプリケーションをダウンロードする必要もあります。

このVCP経由ダウンロードのために、Tera TermとそのYMODEM送信機能の準備が必要です。

SBSFUサンプルアプリケーション

図17. Step-by-stepを使ってデュアルファームウェアイメージのSBSFUサンプルアプリケーション動作を説明します。

Step1:Flash全消去後のNUCLEO-G474REに、STM32CubeIDEを使って第2回3章で示した順番でコンパイル済みのSBSFUプロジェクト出力(SBSFU.elf)を、STM32CubeIDEを使わずにSTM32CubeProgrammerでダウンロードします。

STM32CubeIDEでは、ダウンロード後自動的にデバッガ接続に変わるため、この時点でSBSFUが攻撃を受けたと判断し使用できません。

STM32CubeProgrammerを使うとNUCLEO-G474REのFlashに、セキュアエンジンとSBSFUが書込まれます。これ以降は、Tera TermのVCP経由MCUアクセスのみが可能です。
※従って、STM32CubeIDEを使ったST-Link経由MCUデバッグ開発へ戻る時は、STM32CubeProgrammerでSBSFUが入ったFlashを全消去する必要がありますので注意してください。

次に、パソコンとNUCLEO-G474RE接続中のUSBケーブルを、2回挿抜します。これで、ST-Linkに代わりSBSFUとTera TermのVCP通信が開始します。

Step2:NUCLEO-G474RE とTera Termは、8-Non-1 115200bpsでシリアル接続します。接続後、NUCLEO-G474REリセットボタン(黒ボタン)を押すと、SBSFUが図24(白黒反転済み)のWelcome画面をTera Termへ出力します。

図24. SBSFUがTera Termへ出力するWelcome画面
図24. SBSFUがTera Termへ出力するWelcome画面

Welcome画面を確認後、Tera Termのファイル(F)>転送(T)>YMODEM>送信(S)をクリックし、UserApp.sfb(暗号化ファームウェア)を選択します。
※UserApp.sfbは、NUCLEO-G474RE_2_Image _UserApp¥Binaryフォルダ内(UserApp オブジェクト出力先フォルダ)にあります。

プログレスバーは、1秒ほど動きません。この間は、SBSFUがダウンロードファームウエアヘッダの有効性を検証し、格納するFlashスロット#0/#1領域を消去しているからです。

送信完了でNUCLEO-G474REのFlashが、Step2の状態になります。

Step3:NUCLEO-G474REが自動的に再起動し、SBSFUにより復号化されたUserAppが動作します。この時のTera Term出力が図27(白黒反転済み)です。NUCLEO-G474REのLD2は、ゆっくり点滅します。

図27. 暗号化ファームウェア転送後のSBSFU再起動
図27. 暗号化ファームウェア転送後のSBSFU再起動

画面のUser App #Aは、2_Images_UserApp>main.cのL51:UserAppId = ‘A’の出力です。Main Menu:1/2/3は、インストールしたアプリケーションに記述されたSBSFUテスト機能です。

CN7真ん中よりやや下あたりを指で触るとTamper機能が動作し、ボードリセットが掛かります。

実際では、この段階で我々ユーザが開発したアプリケーションが動作中となります。

Step4:ユーザ開発アプリケーションに何らかのバグがあり、これをデバッグ済みの新しいアプリケーションへ更新(SFU)するのがこの段階です。

STM32CubeIDE でL51:UserAppId=‘B’へ変更し、コンパイルします。ここでは、これをデバッグ済みの新しいアプリケーションとします。

再び、Tera Termのファイル(F)>転送(T)>YMODEM>送信(S)をクリックし、UserApp.sfb(UserAppId=‘B’に変更し、コンパイルした暗号化ファームウェア)を選択し、ダウンロードします。ダウンロード完了でNUCLEO-G474REは再起動します。

Step5:再起動後の動作中アプリケーションは、図27の下線部が変更したUser App #Bに変わっていることで確認できます。

これで、新しいアプリケーションへの更新が完了しました。

*  *  *

図17を使ってRoot of Trust実現STM32G4シリーズMCUのセキュア・ブート(SB)、セキュア・ファームウェア更新(SFU)ローカル動作例を説明しました。

実際は、この動作が図2. ②通信チャネル経由で行われます。

図2.セキュアファームウェア更新プロセス(出典:UM2262)
図2.セキュアファームウェア更新プロセス(出典:UM2262)

通信チャネル利用時は、本稿のローカル動作で使ったTera TermのYMODEM送信を誰が行うのか、鍵の管理やサーバ提供など、筆者がUM2262から読み切れない不明な部分があります。これらはいずれ、明らかにする予定です。

また、UM2262図18. 評価ボード準備とSTM32CubeProgrammer設定方法が解りづらく、単なるサンプルアプリケーション動作にかなり「苦戦」しました。この部分は、通常アプリケーション開発とRoot of Trust実現開発の切換えとなる重要ポイントです。STM32G4テンプレート発売時には、添付資料にもっと解りやすい説明を加えます。

UM2262 Rev6/5の評価ボード:NUCLEO-G474RE設定記述ミス

もう1つの「苦戦」理由は、UM2262 Rev6/5の8.1評価ボード:NUCLEO-G474RE設定記述に間違いがあるからです。

UM2262 8.1には、STM32G4のDBANKビット有効化と記述されていますが、これは「無効化が正しい」です。STM32CubeProgrammerで無効化に設定してください。

STM32G0評価ボード:NUCLEO-G071RBに関しては、記述にミスはありません。本稿の関連部分をNUCLEO-G071RBへ読替えると、全て正常動作します。

STM32G4シリーズは、STM32G0シリーズよりも約1年後に発売されました。新しいMCUのためUM2262に記述ミスがあるのだと思います。

STM32G0/G4のRoot of Trust全体まとめ

STM32G0/G4のRoot of Trust(1)~(3)、いかがでしたでしょうか? セキュリティ機能の実装は、IoT MCUでは必須です。従来のMCU開発へ追加する機能や手間、セキュリティ知識も当然必要になります。

これら追加分は、一般的な開発者が、オリジナリティを加えるべき部分では無いと思います。そこで、これら追加分を、できるだけ簡潔に解り易く説明したつもりです。Root of Trust (1)~(3)で、下記STM32マイコンマンスリー・アップデート2020年3月号P4のX-CUBE-SBSFU説明内容が、より解り易くなれば先ずはOKとします。

STM32マイコンマンスリー・アップデート2020年3月号P4のX-CUBE-SBSFU説明
STM32マイコンマンスリー・アップデート2020年3月号P4のX-CUBE-SBSFU説明

結局、STM32G0/G4シリーズMCUの場合は、通常のMCUアプリケーション開発が第1段、次に、これをIoT MCU化し、Root of Trust機能(SBSFU)を追加実装するのが第2段という、2段階開発になりそうです。この第2段SBSFU実装時に、本稿で用いたデュアル/シングルファームウェアイメージのアプリケーションサンプルが、枠組みとして使えそうです。

STM32G4テンプレートも、弊社通常テンプレート同様、RTOSを使わない疑似マルチタスク実装用(第1段テンプレート)と、開発済みアプリケーションのRoot of Trust SBSFU実装用(第2段テンプレート)の2つに分けてパックで提供しようと考えています。

セキュリティ(盾)は、常に脅威(鉾)との競争です。STM32G0/G4シリーズよりも更にセキュリティを強化したSTM32L5シリーズ(Cortex-M33)など最新MCUの方が、IoT MCU開発には向いているのかもしれません。

この終わりなき競争が続いてセキュリティ時代遅れにならないように、開発中MCUのより早く、かつ、万一より強いセキュリティMCUが必須となった場合でも、MCUコアに依存しない流用性の高いアプリケーション開発が求められます。