MCU:マイコンテンプレート,IoTマイコン,RTOS,ベアメタル,ISR,基本のキ

IoT MCUソフトウェア/ハードウェア開発者向け基本のキ、今回は、組込み処理の「ポーリング」、「割込み」、「低消費電力動作」とMCU開発の秘訣(コツ)を示します。ベアメタル開発でもRTOS開発でもこれらは同じです。これら基本を知ると、サンプルコードの読み方、利用法も解ります。

ポーリング と 割込み

「ポーリング」とは、無限ループを周る度に例えばSWが押されたかどうかのフラグ相当をポーリング(polling)し、フラグが立ったら、その処理を実行することです。

ポーリング
ポーリング

「割込み」は、割込み発生時に周辺回路が自動で呼出すISR(Interrupt Service Routine)を開発します。

ISRは、出来るだけ軽く(小さく)することが重要です。別周辺回路の割込みもできるだけ取込むためです。そこでISRでは、周辺回路が割込み発生時に立てた割込み発生フラグをリセット、このフラグとは別の割込み処理待ちフラグを立ててコード化するのが常套手段です。

この割込み処理待ちフラグを無限ループでポーリング、ブラグが立っていれば実際の割込み処理を実行します。

つまり、割込み処理の前段階にISRがあり、ポーリングのフラグ相当が割込み処理待ちフラグに変るだけ、結局、ポーリングに帰着します。

割込み
割込み

ベアメタル開発でもRTOS開発でも上記は同じです。RTOS時は、タスク間のセマフォ/Queueによる処理待ちが差分として追加されます(これら以外にも処理待ちはありますが、セマフォ/Queueで当面賄えます)。

低消費電力動作

無限ループをそのまま連続で回し続けると消費電力が増加します。そこで、間欠的にループを回し、ループを回さない時間は、最も電力を消費するMCUを停止するのが「低消費電力動作」です。

低消費電力動作
低消費電力動作

例えば1秒毎に1回ループを回すなど、低電力化を図りつつループ連続回しの時と大差なく処理する、つまり、どの程度間欠動作させるかが開発者の腕の見せ所です。

まとめ:ポーリング、割込み、低消費電力動作の3Tipsと開発秘訣

IoT MCUで開発するのは、MCUを含む周辺回路の初期設定と、無限ループ内の処理です。

初期設定とは、内蔵周辺回路を動作させるための設定です。周辺回路は、初期設定が終わると直に動作を開始します。そこでMCUは、動作中の周辺回路を監視し、必要に応じて処理を行います。このMCU監視が、無限ループ内の処理です。「組込み処理の中身」は、このように初期設定とループ内処理の2種類です。

初期設定の前にRAMクリアなどのスタートアップ処理もありますが、ここはIDEが自動生成し、通常、開発者が手を加えることは殆どありません。

初期設定は、サンプルコードの初期設定をそのまま流用する部分です。サンプルコードに使用例がない特殊(!?)な周辺回路の使い方をする時は、データシートやユーザマニュアルの当該周辺回路部分を熟読すればコード化できます。

次の開発部分が、無限ループ内です。ループ内処理をまとめた本稿の3Tipsが下記です

  1. 無限ループ内は、「ポーリング」か「割込み」のどちらか
  2. 割込みは、ISRで「割込み発生フラグ」を「割込み処理待ちフラグ」へ事前変換しポーリングへ帰着
  3. 無限ループの間欠動作と、間欠中のMCU停止が、「低消費電力動作」
組込み処理の3Tips、ポーリング、割込み、低消費電力動作
組込み処理の3Tips、ポーリング、割込み、低消費電力動作

組込み処理の中身とこれら3Tipsを知らずに組込み開発を始めるは、非効率です。中身と3Tipsを習得するには、紆余曲折、結構な時間と実務(失敗)経験が必要だからです。

例を挙げると、技術背景が少ない初心者にとっては、関連情報が多いため消化不良を起こします。また、初心者でなくても、開発自由度が高い(≒無いに等しい)ので、開発を上手く収束させには、Tipsやコツが必要になるなどです。

全てを網羅的に記述しているデータシートやユーザマニュアルは、既にこれらコツや技術背景を習得済みの中級者以上には役立ちますが、それ以外の人が読んでも実質の理解はできません。いきなり六法全書を読んで弁護士をする様なものです😂。

MCU開発の秘訣(コツ)は、先ず、3Tipsを基にプロトタイプを開発し、次に、実際に動作するプロトタイプを使って、開発自由度の高さを活かし動作チューニングすることです。

実働プロトタイプがあれば、データシート実質理解も進みますし、チューニング結果で変な動作になっても元のプロトタイプへ戻れますので、安心して色々な試行錯誤ができ、開発者スキルアップも容易です。

サンプルコード利用法

主要MCUベンダは、多くのサンプルコードを提供中です。

サンプルコードの目的は、“1つ”の周辺回路の基本動作を解り易く示すことです。基本動作は、初期設定と無限ループ内の2つに分けて読みます。無限ループ内は、Tips1/2から処理内容が理解できます。割込みの時は、ISRがあります。

初期設定は、開発に使う使用例と同じかどうかを添付コメントなどから判断します。使用例が同じ、または、近いなら、そのままコピーして流用します。内容を理解したい時は、”その周辺回路のデータシートのみ”を読めば十分です。

もちろん、サンプルコード無限ループ内のポーリング/割込み処理もそのままコピーして流用可能です。

但し、サンプルコードは、一般的にTips3:低消費電力動作への配慮がありません。また、サンプルコードを、“複数”集めて動作させる作り方ではありません。1周辺回路の動作コードを、シンプルに解り易く示すためです。

弊社マイコンテンプレートは、複数サンプルコードを利用する仕組みを予め持っています。また、無限ループの間欠動作と停止MCUを復帰させる仕組みも、テンプレートへ組込み済みです。

テンプレートのサンプルコード利用法
テンプレートのサンプルコード利用法

つまり、初めから複数サンプルコードの活用・流用が即座に出来るようテンプレート化、主要ベンダの汎用MCUに対応し、適用例と詳しい説明資料付き(一部ダウンロード可)で販売中です(ベアメタル開発用:1000円、RTOS開発用:2000円、テンプレート一覧と価格はコチラ)。

本稿3Tipsを知っていれば、サンプルコードを分析しながら読むことができ、必要に応じて各部分を自分のソフトウェアや弊社テンプレートへ組込むことも可能です。

プロトタイプ開発に最適なのが、弊社テンプレートです。テンプレートを使って早期にプロトタイプ開発を実現すれば、開発者の効率的スキルアップ、要求仕様に対するMCU性能過不足なども明らかとなり、お役に立てると思います。

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

MCU:マイコン,WindowsIoTマイコン,Windows 10,セキュリティ,OTA,TrustZone,Cortex-M33,Windows 11,TPM,基本のキ

本稿は、IoT MCUソフトウェア/ハードウェア開発者向けTipsで、「MCU開発基本のキ」シリーズの第1回目です。MCUベンダ横断的に開発ポイント、Tipsなどを不定期に投稿します。

今回は、そもそもIoT MCUに、なぜセキュリティが必要かという最も基本的な点について示します。

幅広い技術がIoT MCU開発者には必要です。しかし、全てを理解し、時々刻々変化する状況に対応するには時間がいくらあっても足りません。情報が多く幅広いからこそ、短時間で効率的なIoT MCU開発のためのポイントやTipsが必要です。

このポイントやTipsについて筆者個人の考え方を示します。これを、たたき台にして、ブログ読者の方々の考え方に発展・貢献できれば幸いです。

接続とセキュリティ

インターネット接続とセキュリティ
インターネット接続とセキュリティ

IoT MCUは、インターネットなどに接続し動作することが前提です。

人がネットに接続する時は、事前にアカウント登録し、IDやパスワードなどの登録情報を接続時に手入力、ネット側で受信データと事前登録情報と比較し接続を許可します。

IoT MCUは、人の手入力の代わりに自動で登録情報をネット送信することで接続します。この時大切なのが、IoT MCU内部に保存済みの登録情報です。登録情報をサイバー攻撃やハッカーから守る手段がIoT MCUセキュリティです。

ハッカー、セキュリティ、OTA

ハッカーとセキュリティは、「いたちごっこ」を繰返します。

例えば、コチラのFirefox 91とWindows 10規定ブラウザー設定、Windows 11で更に複雑化する設定がその例です。この場合、ハッカー役がFirefox、セキュリティ役がWindow設定です。

様々なIoT MCUセキュリティ手段がありますが、ポイントは、守りは攻めに対する対処療法なので守りの追加や更新が必要となる点です。

つまり、個々のセキュリティ手段を知ることよりも、何を(IoT MCUの登録情報や秘密鍵などの重要情報)どのように守るかの方がより重要です。ソフトウェアによる守りよりもより強固な内蔵ハードウェアで重要情報を守るのが、ARM Cortex-M33コアのTrustZoneです。

いたちごっこの終息策として、MCU内蔵TrustZoneとその制御ソフトウェアを採用した訳です。

Windows 11で導入されるTPM 2.0も、TrustZone相当です。しかし、TPM保護PCから情報を抜出す方法という記事もあります。セキュリティには終わりが無いと言っても良いでしょう。

終わりが無いので、OTA(Over The Air)によりセキュリティ手段の追加や制御方法更新が必要になる訳です。OTAは、IoT MCUセキュリティ追加更新が本来の目的で、ソフトウェアバグ修正は副次的だと思います。

接続伝送路エラー訂正

無線であれ有線であれ、ネット接続の伝送路にノイズ混入の可能性があります。ただ、IoT MCUセキィリティが正常か異常かの判断は、受信データにノイズ(誤り)が無いことが前提です。

そこで、受信側に、受信データに混入ノイズを除去する機能があれば便利です。

2021年9月9日、米)MITは、あらゆる種類のデータ誤り検出し訂正するGuessing Random Additive Noise Decoding (GRAND)採用のハードウェアデコーダを開発しました。128ビットまでのコードを約1u秒でデコードでき、高速通信規格5GやIoT分野での利用が期待されています。

まとめ:IoT MCUセキュリティ3Tips

  1. ネット接続が前提のIoT MCUには、サイバー攻撃から内蔵重要情報を守るセキィリティ必須
  2. セキュリティは、対処療法なので機能追加更新OTA必須
  3. より強固に重要情報を守るTrustZone、受信データ誤り検出訂正GRANDデコーダなどのセキュリティ対策ハードウェアが、IoT MCU要件になる可能性あり

IoT MCUセキュリティ用語、関連性、対策ハードウェアがご理解頂けたと思います。
※TrustZoneに似たハードウェアに、ルネサス:Trusted Secure IP(TSIP)、STマイクロ:Secure Memoryなどもあります。

セキュリティは終わりがありません。どの程度のセキュリティをIoT MCUへ実装すれば良いかを検討するには、IoTセキュリティ手引書やPlatform Security Architecture: PSA Certified認証制度などが参考になります。

但し、IoT MCU開発者に解り易いかと言えば、正直疑問も感じます。そこで、IoT MCUセキュリティ関連で、最低限開発者が押さえておくべき3項目をまとめました。

特に項目3は、初めからIoT MCUに実装済みでないと後付けやOTA更新ができません。今後の欧米IoT規格や総務省動向にも注意を払う必要があるでしょう。

補足:IoTセキュリティコスト

筆者利用ネットカフェPCのWindows 11対応チェック結果を抜粋したのが下図です。2PCのみ抜粋しましたが、他PCも同様で、全項目OKのPCは皆無でした。弊社PCも3PC中1台のみ全OKですので、Windows 11無償アップグレード可能PCは、Windows 10 PCの30%以下になりそうです。

ネットカフェのWindows 11対応チェック結果
ネットカフェのWindows 11対応チェック結果

Windows 10サポート終了の2025年10月以降、多くのWindows 10セキュリティが低下し、サイバー攻撃に弱くなります。セキュリティ対サイバー攻撃コストを示すのは大変でしょうが、Microsoftは示す責任があると思います。

同様にIoT MCU顧客もセキュリティ対策コストを望むと思います。ちなみに、Cortex-M4比、Cortex-M33 TrustZone MCUは、2倍工数必要が弊社見解です(関連投稿:Cortex-M33とM0+/M4の差分の3章)。