MCUXpresso IDE 11.4.0 Release

MCUXpresso suite of software and tools
MCUXpresso suite of software and tools

2021年7月15日、NXPの統合開発環境MCUXpresso IDEが、11.3.1から11.4.0へ更新されました。
新たに追加されたAzure RTOS、弊社FreeRTOSアプリケーションテンプレートの新環境での動作確認を示します。

Azure RTOS追加

FreeRTOSに比べ未だ12個と少数ですが、LPCXpresso55S06などCortex-M33コアのAzure RTOS 対応評価ボードとSDK v2.10.0が追加されました。Microsoft AzureのAWS追随が、統合開発環境に現れました(関連投稿:多様化MCU RTOS)。

Azure RTOS Boards
Azure RTOS Boards

これに伴い、IDEのRTOSメニューにAzure RTOSの Message QueuesやSemaphoresなどのViewが追加されました。Azure RTOSデバッグユーザガイトは、MCUXpressoIDE_11.4.0_6224インストールフォルダ内にありますので参照してください。

RTOSメニューに追加のAzure RTOS View
RTOSメニューに追加のAzure RTOS View

FreeRTOSアプリケーションテンプレートの新環境動作確認

Config Toolsもv10.0へ更新されましたので、新IDE更新後、旧11.3.1開発プロジェクトのPinパースペクティブで再度Update Codeのクリックが必要です。Updateクリック後、Develop画面に戻り再ビルドします。(Config Toolsの使い方は、コチラの関連投稿を参照してください)。

MCUXpresso Config ToolsのUpdate Code
MCUXpresso Config ToolsのUpdate Code

再ビルドは正常に終了し、新MCUXpresso IDE 11.4.0とFreeRTOS対応評価ボードLPCXpresso54114で、FreeRTOSアプリケーションテンプレートの動作確認をしました。

FreeRTOSアプリケーションテンプレートと付属資料も、11.4.0対応版へ更新します。

新MCUXpresso IDE 11.4.0で旧プロジェクト動作確認。LPCXpresso54114のSDK更新はなし。
新MCUXpresso IDE 11.4.0で旧プロジェクト動作確認。LPCXpresso54114のSDK更新はなし。

補足1:新旧統合開発環境併存

NXPの統合開発環境は、PC上で新旧環境が同時併存可能です。

環境が併存しますのでストレージ容量は必要です。また、ターゲットボードのSDK改版が無くても再度新IDEへのインストールが必要など手間もかかりますが、新環境構築が安心してできます。但し、新環境下でターゲットプロジェクト開くと、新環境用に変更され旧環境に戻せません。

ターゲットプロジェクトは、新旧環境で別々にすることを忘れないでください。

補足2:STM版CMSIS-RTOSアプリケーションテンプレート構想状況

FreeRTOSやAzure RTOSなど開発者が対応すべきMCU RTOSは、今後増える傾向です。RTOSが変わっても同じ開発アプリケーションを活用・流用できるのがCMSIS-RTOSメリットです。STM版RTOSアプリケーションは、このCMSIS-RTOSを使って構想中で、この状況を示します(詳細は、STM32RTOS開発3注意点(後編)などを参照してください)。

FreeRTOSとCMSIS-RTOSのセマフォAPI比較
FreeRTOSとCMSIS-RTOSのセマフォAPI比較

上側がFreeRTOSセマフォ送受、下側がCMSIS-RTOSセマフォ送受ソースです。どちらも殆ど同じです。

IDEにContent Assist機能(Ctrl+Space表示のAPI候補一覧)があるので、ソース記述は簡単で、基本的なRTOS手段(上記はタスク同期セマフォ)を理解済みなら、FreeRTOSに比べ情報が少ないCMSIS-RTOS開発でも、当初思ったより障壁は低いと感じています。

CMSIS-RTOSメリット/デメリットを比較して、メリットの大きさを感じた今回のNXP IDE更新でした。STM版CMSIS-RTOSアプリケーションテンプレート構想は、近日中に投稿予定です。

LPCXpresso54114 150MHz動作設定方法

MCUコア動作速度設定は、一般的にプログラミングの冒頭、main関数の各種初期設定よりも前で行い方法は2つあります。

LPCXpresso54114の150MHz動作
LPCXpresso54114の150MHz動作

1つがソフトウェアで明示的にコア速度を設定する方法(左側の橙下線)、もう1つがConfig ToolsでGUIを使って設定する方法(右側の橙囲い)です。ソフトウェア設定方法は、代表的な設定値のみがAPIで提供され、GUI利用方法は、細かな速度設定や周辺回路毎へのクロック供給設定ができるなど柔軟性があります。

弊社は、アプリケーション開発後の低消費電力チューニング時にもソースコード不変で柔軟性メリットがあるConfig ToolsのGUI利用方法を推薦します。

現状の開発ツールでは、コア速度がデフォルト96MHzですので、これを150MHzへ変える方法を示します。

開発ツール

前稿最後に示したLPCXpresso54114最新データシートで発見(!)したCortex-M4コア最大動作周波数150MHzは、最新SDKの新規プロジェクト作成時でも旧データシート記載の100MHz(=96MHz)のままです。

そこで、2021年4月2日投稿の新規FreeRTOSプロジェクト作成方法のStep1~Step5に、本稿の動作クロック150MHz化をStep6として追加します。

本稿で示す開発ツールは、本日時点の最新版で以下です。

・MCUXpresso IDE v11.3.1 [Build 5262] [2021-04-02]
・LPCXpresso54114 SDK Version 2.9.0
・LPC5411x データシートRev. 2.6

これを示した理由は、今後の開発ツール更新によりデフォルト動作クロック値が150MHzへ変わる可能性もあるからです。

Config Tools利用MCU動作速度150MHz設定

新規プロジェクト作成直後のConfig Tools Clocks Diagramが下図です。コア速度のSystem clockは96MHzです。150MHzへの変更手順が以下です。

SDK新規プロジェクト作成直後のClock Diagram
SDK新規プロジェクト作成直後のClock Diagram

1. PLL Modeを、Fractional/Spread spectrumからNormalへ変更。
2. クロック選択肢をクリックすると、下図のように供給クロックのルート変更ができます。最初に示したクロックルートになるよう各選択肢やPLL設定を変更し、System clockを150MHzにします。

クロック選択肢をクリックして供給クロックルート変更
クロック選択肢をクリックして供給クロックルート変更

3. Config ToolsのUpdate Codeをクリックし、GUI変更結果をソースコードへ反映させます。

※全般的なConfig Toolsの使い方は、コチラの関連投稿を参照ください。

初期設定後に下記のようなソースコードを追加しておくと、コア動作クロックが設定値に変わったか確認ができます。

コア動作クロック速度を示すソースコード
コア動作クロック速度を示すソースコード

Config Tools MCUコア速度設定メリット

例えば、初期設定したusart通信速度115200bpsやMRT:マルチレートタイマ満了時間は、コア速度を変えたとしても不変です。各ドライバ内で、コアから独立した速度/満了時間設定を行うからです(※厳密には、設定誤差などが多少変わります)。

MCUの中で消費電力が最も大きいコアの動作速度を下げるのは、アプリケーション開発後の低電力動作チューニングに最も効果があります(※アプリケーション開発中にコア速度を下げるのは、より厳しい動作条件で開発することに相当しますのでお勧めしません)。

ソフトウェアで直接コア速度を記述した場合、この低電力化検討時に記述変更が必要になります。しかも、代表的な速度のみ設定可能なため、変更幅が大きくなる欠点があります。

一方、本稿で示したConfig Toolsによるコア速度設定の場合は、ソフトウェア設定に比べ細かな設定が可能で、記述ソフトウェアも不変です。更に、周辺回路動作も個別に制御できるため、コアだけでなく電力消費が大きい周辺回路の特定などにも役立ちます。

つまり、Config Toolsコア速度設定方法は、より効果的できめ細かいMCU低電力動作チューニングが可能でメリットが大きいと言えます。

評価ボード消費電流測定方法

評価ボードLPCXpresso54114には、0Ωチップ抵抗:JS11の取外しが必要ですが、消費電流測定用の端子:JP4が用意されています。これを使うと、前章で示したコア速度変更や周辺回路を動作停止した時の実消費電流が測れます(測定誤差ガイドラインもデータシートFig. 5に掲載中)。

LPCXpresso54114消費電流計測回路
LPCXpresso54114消費電流計測回路

あとがき

LPC5411x データシートRev. 2.6は、コア速度96MHzまでのCoreMark消費電力しか記載されておらず、しかも、96MHz以降急激な上昇傾向があるなど、気になる点もあります。

CoreMark power consumption
CoreMark power consumption

現在のSDK新規作成プロジェクトがデフォルト96MHzなのは、この辺りが妥当なクロック速度のせいかもしれません。今後のデータシート改版で状況を見たいと思います。

但し、開発中のCortex-M4 LPCXpresso54114向けFreeRTOSアプリケーションテンプレートは最高動作周波数の150MHz動作、比較用ベアメタルアプリケーションも150MHzで開発します。

OpenSDA接続トラブル解決方法

ブログ読者様のおかげで、不明だったFRDM評価ボードOpenSDAとMCUXpresso IDE間の接続トラブル解決方法が判明しました。本稿は、このOpenSDA接続トラブル解決方法と、昨今の激しいMCU開発環境変化への開発者対応私案を示します。

OpenSDA v1/v2差

前投稿当日、弊社ブログ読者様からFRDM評価ボードOpenSDA処理トラブル時のJ-Linkハードウェアデバッガによる解決方法と、その根拠となったNXP Communityリンク、さらに、同様のトラブルを抱えた方々向けに、ご提供情報を弊社ブログで共有してくださいとのメールを頂きました。

この場を借りて御礼申し上げます。ありがとうございます。

ご提供情報を基に、FRDM評価ボードOpenSDA v1/v2の差をまとめたのが、下表です。

OpenSDA v1/v2とFRDM評価ボードのまとめ
OpenSDA版数 評価ボード例 開発者 トラブル状況 トラブル解決方法
OpenSDA v1.0 FRDM-KE02Z40M P&E Micro社

(Proprietary)

弊社あり OpenSDA処理MCUをハードウェアデバッガで書換えれば解決の可能性あり
FRDM-KL25Z 弊社なし
OpenSDA v2.0 FRDM-K64F ARM/mbed.org

(Open source)

Community内あり OpenSDA処理MCUをハードウェアデバッガ:SEGGER J-Linkなどで書換えて解決(情報提供者様の解決実績あり)
OpenSDA v2.1以上 FRDM-K22F

OpenSDAにはv1系とv2系があり、v1.0は開発会社:P&E MicroのProprietary製品、v2系はARM/mbed.org開発のオープンソースです。また、新しいFRDM評価ボードの多くはv2.1以上を搭載済みで、v1.0やv2.0は古くからあるFRDM-K64Fなどです(Getting Start with MCUXpresso SDK, Rev.3, 03/2017のTable 1掲載ボードでの比較。この表になぜかFRDM-KE02Z40Mの記載はありません)。

Getting Start with MCUXpresso SDK Rev. 3 03-2017のTable 1
Getting Start with MCUXpresso SDK Rev. 3 03-2017のTable 1

OpenSDA接続トラブル解決方法

OpenSDA v2系のブートローダ更新失敗などにより生じたMCUXpresso IDE接続トラブルは、SEGGER J-Linkなどのハードウェアデバッガを使って、OpenSDA処理MCU:Kinetis K20(Cortex-M4)を、評価ボードのJ-TAGコネクタ経由でユーザが直接再プログラミングすれば解決します。再プログラミング用コードも、オープンソースです(情報提供者様の解決実績もあります)。

しかし残念ながら、弊社トラブル中のFRDM-KE02Z40Mは、OpenSDA v1.0です。OpenSDA 1.0は、処理ソフトウェアがProprietary(非オープンソース)ですので、この処理部分のユーザによる再プログラミングが可能かはCase-by-caseです。

通常Proprietaryソフトウェアは、下記理由で再プログラミングができない場合が多いと思います。

理由:前稿で示したユーザ(筆者)が、Windows 10ストレージサービスを一時停止しなかったブートローダ更新は、MCU側にとってはProprietary処理ソフトウェアの悪意侵害と判断される可能性があります。
侵害と判断された場合には、セキュリティ防御手段としてMCU書込みプロテクトをかけ、再プログラミングはできなくなります。また、Proprietaryなので初めからMCU書換えプロテクト済みの可能性もあります。

※USB経由で行うブートローダ更新と、J-TAG経由のOpenSDA処理MCUソフトウェア書換えは、別物であることに注意してください。

FRDM-KE02Z40M Proprietary OpenSDA v1.0再プログラミングは、トラブル実機で試す必要があります。Proprietaryソフトウェアのため、書換え障壁はオープンソースOpenSDA v2系よりも当然高いと思われます。

J-TAGハードウェアデバッガメリット

評価ボードOpenSDA v1.0再プログラミングに必要となるJ-TAGハードウェアデバッガ価格は、例えばSEGGER J-Linkなら最低€300から、円換算で約¥37,000(2020年7月)からです。

同じ金額で10枚程度の最新MCU評価ボードが購入できるので、個人レベルのJ-TAGハードウェアデバッガ購入は勇気がいります。

J-TAGハードウェアデバッガのメリットは、旧Freescale)Bertrand Deleris氏の組込み向けデバッグ技術の基本(2007年3月:EDN)が良く解ります。マルチコアMCUデバッグや、ハードウェア/ソフトウェアブレークポイント差、セキュリティとDebug/Releaseの関係など参考になりますので、一読をお勧めします。

半導体ライフサイクルとMCU開発者対応私案

半導体製品のライフサイクルと製造中止(EOL)対策(2020年7月、EE Times)によると、多くの半導体製品の平均寿命は、3~5年だそうです。

MCUベンダ各社は、10~15年の安定供給を保証しますが、製品搭載済みMCUの賞味期限は、我々開発者が製品化に1年要したとして、発売後5年程度だと個人的には思います。

※MCU賞味期限≒MCUの差別化特徴を活かした製品が競合他社より優位な期間。IoTセキュリティ、AI機能実装や製造プロセス細分化など今後MCUは激変するハズなので、より短くなると思います。

丁度、新車購入後、2回目の車検(3年+2年=5年)で名目上の減価償却する自動車と同程度です。

COVID-19の影響で少し鈍る可能性もありますが、ADAS(先進運転支援システム)が引っ張る自動車と同様、“MCU製品も5年目安で世代交代を考えるべきだ”と思います。

また、「日本製品」が海外で売れなくなった根本原因(2020年7月、東洋経済オンライン)を読むと、「加点型の完璧主義」の世界基準に対して、日本人の「盆栽のような減点型のミニマムな完璧ものづくり」が日本敗因の1つです。プラス側メリットやそれに費やした見えない労力などは無視する一方、マイナス側の過度な批判は、日本特有かもしれません。

“基準を減点型→加点型へ180度変える努力が日本は必要”になりそうです。

MCU開発環境は、PC OSも含めて常に変化・進化します。そして、それらの環境変化は全て世界基準です。

MCUXpresso IDEは、7月9日にv11.2.0へ、MCUXpresso SDKの多くは、7月19日にv2.8.0へ更新されました。次々に生まれる新MCUや環境変化に対応するためですが、逆にこれら変化・進化に馴染まない従来MCUや減点型対応者も生じます。これらは、徐々に進化と逆らい「ガラパゴス化」している訳です。

MCU開発者は、変化・進化する環境に対して、開発中、または顧客稼働中のMCUが進化に馴染まなくなる兆候・前兆を素早く捉え、最終利用者と協議の上、従来から180度変えた“加点型対応策を取ることが、ワールドワイドなMCU開発者との競争に生き残り、その結果、日本製品も生き残れる方法”だと思います。

ガラパゴス化が全て悪い訳ではありません。しかし、日本MCU開発者がガラパゴス化すれば、その生存確率は確実に下がります。

まとめ、新開発汎用Kinetis Lテンプレート

これまでの章内容をまとめます。

  • 壊れたFRDM-KE02Z40のOpenSDA v1.0 Proprietary再プログラミングには、J-TAGハードウェアデバッガ:37,000円が必要で、OpenSDA v2系とは異なるProprietaryソフトウェアのため、書換え可能かはトラブル実機検証が必須。
  • J-TAGハードウェアデバッガは、MCUコア/ベンダに依存しない強力デバッグツール。
  • 激変MCU環境に対して、加点型へ進化しないと日本MCU開発者はガラパゴス化する。

これらから、FRDM-KE02Z40(Cortex-M0+/40MHz、5V Robust)のOpenSDA v1.0 Proprietary再プログラミングはあきらめ、5V耐圧が特徴であるKinetis Eテンプレートv2改版開発は中止、新たにFRDM-KL25Z(Cortex-M0+/48MHz、General Purpose = Main Stream)を用いた汎用Kinetis Lテンプレート開発に着手しようと考えております。

5V耐圧の代案は、一般的になってきたレベルシフタを用いる方法でKinetis Eテンプレートの最終利用者様への対応をお願いいたします(関連投稿:MCUの5V耐圧ピンを参考にしてください)。

5V耐圧を失う代わりに、FRDM-KE02Z40Mでは実装していましたが動作しないTouch pad (Slider)が、FRDM-KL25Zでは動作します。Touch pad (Slider)動作には、MCU内蔵Touch Sense Input:TSIハードウェアが必須です。FRDM-KE02Z40Mは内蔵されていません。TSIライブラリソフトウェアのみでは動作しないことは、2015年開発のKinetis Eテンプレート v1で確認済みです。

新開発の汎用Kinetis Lテンプレートは、このFRDM-KL25Z内蔵TSIハードウェアとライブラリ使いTouch pad (Slider)を、外付けSW入力の代わりに用います。

FRDM-KL25Z Block Diagram(出典:ユーザズマニュアル)
FRDM-KL25Z Block Diagram(出典:ユーザズマニュアル)

※FRDM-KL25Z搭載のMCU:MKL25Z128VLK4 (Cortex-M0+/48MHz、Flash:128KB、RAM:16KB、66:IOs)は最新MCUとは言えませんが、「低価格、入手性良し、汎用性(Main Stream)、応用範囲の広さ、OpenSDAトラブル無し」が、新規汎用テンプレート開発採用にプラスに働きました。

さいごに

多彩な情報満載のCommunityですが、逆に欲しい答え発見までにかなりの時間・労力がかかるのもCommunityです。

ブログ読者様ご提供Communityリンクのおかげで、短期間で効率的に問題解決法を見つけることができ、さらにJ-TAGハードウェアデバッガなどの関連情報収集、現状テンプレート開発見直しもできました。

ここにあらためて心より感謝いたします。ありがとうございました。

FRDM評価ボードOpenSDA接続問題整理

Kinetis E(Cortex-M0+/40MHz、5V Robust)テンプレートv2開発障害となっている評価ボード:FRDM-KE02Z40MのOpenSDAとMCUXpresso IDEデバッガ間の接続問題は、残念ながら未解決です。今回は、このOpenSDA問題を簡単に整理します。また、Linuxによる第2のMCU開発環境構築の新設カテゴリも示します。

Kinetis OpenSDA

OpenSDA Block Diagram(出典:OpenSDA Users Guideに加筆)
OpenSDA Block Diagram(出典:OpenSDA Users Guideに加筆)

Figure 1は、MCUXpresso IDEとKineties MCU間のブロック図です。旧Freescaleは、Kinetis Design Studio:KDSというFreescale製IDEとKinetis MCU評価マイコンボード間の接続は、OpenSDAというインタフェースで接続していました。

このOpenSDAは、KDS直接接続だけでなく、PC(Windows 7)との接続時、File System(USBメモリ)として動作し、クラウド開発環境:mbed開発にも利用できる2種類のプログラミング機能を持ちます。

現在問題発生中のFRDM-KE02Z40MのOpenSDAも、Windows 7当時は問題なく動作していました。その結果、Kinetis Eテンプレートv1発売ができました。

MCUXpresso IDE接続問題(Windows 10)

Freescaleを買収したNXPは、自社LPCと新旧Freescale Kinetis両マイコンに新しい統合開発環境:MCUXpresso IDEを用意しました。このMCUXpresso IDEの評価ボード接続インタフェース一覧(一部抜粋)が下図です。

MCUXpresso SDK support platform(出典:Getting Started with MCUXpresso)
MCUXpresso SDK support platform(出典:Getting Started with MCUXpresso)

簡単に説明すると、MCUXpresso IDEは、NXP純正評価ボードEVKやLPCXpresso54xxx接続インタフェース:CMSIS-DAPと、新旧FRDM評価ボード接続インタフェース:OpenSDA v1系/v2系とmbedの3種類全てをサポートします。

接続問題が発生するのは、OpenSDAの一部です(表内にFRDM-KE02Z40Mが無いのは不安ですが、記載漏れだと思います)。FRDM-KL25Z(Cortex-M0+/48MHz、General Purpose)のOpenSDAは、MCUXpresso IDEと問題なく接続できています。

接続問題解決には、Figure 1のMSB Bootloaderを、MCUXpresso IDE対応済みの最新版へUpdateすることが必要です。

MSB Bootloader更新注意点(Windows 10)

MSB Bootloader更新方法は、評価ボードのリセットボタンを押しながらPC(Windows 10)とUSB接続し、エクスプローラーに現れるBootloaderフォルダへ、最新版:BOOTUPDATEAPP_Pemicro_v118.SDAをドラッグ&ドロップするだけです(FRDM-KE02Z40Mの最新Bootloaderは、コチラから取得できます)。

この操作後、再度評価ボードとPCを接続すると、今度はエクスプローラーに通常モードのFRDM-KE02Z40Mフォルダが現れ、更新完了となるハズです。ところが、筆者の評価ボードは、Bootloaderモードから通常モードへ復帰しません。

従って、MCUXpresso IDEとFRDM-KE02Z40MをUSB接続しても、IDEは評価ボード無しに認識します。

簡単に説明しましたが、実際はWindows 10でのBootloader 更新時、「Windows 7では不要であったストレージサービスの一時停止が必須」です(詳細は、コチラのNXP情報のStep 2を参照してください)。

調べると、Windows 8以降に一般的なユーザには知らせずに追加したWindows PCのUSBメモリへの隠しフォルダ書込み機能(これが上記一時停止するストレージサービス)が、諸悪の根源のようです。

FRDM評価ボードOpenSDA接続問題整理と対策(Windows 10)

以上を整理し、対策をまとめます。

・旧Freescale製FRDM評価ボードが、新しいNXP MCUXpresso IDEと接続できない原因は、評価ボードOpenSDAのMSB Bootloaderにあり、対策は、MCUXpresso IDE対応版Bootloaderへの更新を、Windows 10ストレージサービスを停止させた状態で行うことが必要。

旧Freescale製(つまりWindow 7対応)のまま入手したFRDM評価ボードは、FRDM-KE02Z40M以外でもIDE接続問題が発生することがありますので、上記まとめを参考に対策してください。

このまとめと対策にたどり着く前に、Windows 10でストレージサービスを停止せずにFRDM-KE02Z40MのOpenSDA MSB Bootloader更新を何度か繰返しました。評価ボードが、Bootloaderモードから通常モードへ復帰しない理由は、これかもしれません😥。

筆者は、Windows 7時代からFRDM評価ボードを活用してきました。まさか、Bootloaderモード時にWindows 10ではサービス一時停止が必須だとは思いもしませんでした。しかも、このサービスは隠しフォルダ対応なので、通常ではWindows 7と同様にBootloader更新が正常終了したように見えます。

事前に調査しなかった筆者が悪いのですが、旧Freescale評価ボード記載Windows 7対応マニュアル通りに対処すれば、筆者と同じトラブルに出会う人は多いハズです。

また、OpenSDAユーザズガイドにも上記トラブルからの復帰方法の記載はありません。ネット検索か、NXP communityが解決手段でしょう😥。解決方法が見つかれば、本ブログでお知らせします。

エンドユーザを無視したかのようなWindows 10の度重なる変更に起因するトラブルは、今後も増える可能性があると思います。次章は、その対策です。

Windows MCU開発者向けLinuxカテゴリ新設

筆者は、昨年からLinux MintでのMCUXpresso IDE開発環境もWindows 10のバックアップ用に構築しています。このLinux環境でも、残念ながら今回のトラブル回復はできていません。

今回はLinux/Windows両方NGでしたが、Windows以外の第2のMCU開発環境があると、何かと便利です。

そこで、本ブログで、Windows MCU開発に慣れた開発者が、簡単にLinuxを使うための情報も発信したいと思います。このための新設カテゴリが、PC:パソコン>Linuxです。
※親カテゴリPC:パソコンへ、LibreOfficeとWindowsも移設しました。

Windows 10、Linuxともに単なるPC OSです。Linux上でMCU開発アプリケーション、本ブログではNXP MCUXpresso IDEやSTM STM32CubeIDEを利用するために、最低限必要な情報に絞って説明する予定です。

Linux情報量もまたWindows同様多いのですが、Windowsに慣れたMCU開発者としては、当面不要な情報も多く、Windowsの代わりにLinuxを短期間で効率的に活用するMCU開発環境構築が目標・目的です。今回のようなWindows PCでのトラブル発生時、Linux PCへ移ってMCU開発を停止することなく継続するのが狙いです。

MCU Devopments Windows and Linux 2 Routes
MCU Devopments Windows and Linux 2 Routes

Linuxのシステム動作要件は下記で、Windows 10よりも低いので、古いPCでも快適に動作します。ただし新しいOS利用なら「64ビットCPUは必須」ですが…😅。32ビットPC OSの新規開発は、終了しました。

  • 1GB RAM (2GB recommended for a comfortable usage)
  • 15GB of disk space (20GB recommended)
  • 1024×768 resolution

COVID-19の影響で、市場に中古PCが安価で数多く出回っていますので、これら活用も一案かと思います。

MCUXpresso SDKの使い方

NXP MCUXpresso IDEを使ったFRDM-KE02Z40Mテンプレートv2開発にあたり、MCUXpresso SDKベースのMCUソフトウェアの開発方法を示します。

MCUXpresso SDK全般の使い方

MCUXpresso SDKの全般的な使い方は、IDE付属のGetting Started with MCUXpresso SDKコチラの動画で判ります。どちらも初めてSDK:Software Development Kitを使う時には役立ちますが、具体的にSDKを使ってMCUソフトウェア開発をするにはどうすれば良いのかの説明はありません。

「導入説明だけで活用説明がない」典型例です。

MCUXpresso SDK構造

本稿はソフトウェア開発初心者が、一番知りたいハズだと思うSDKの具体的な使い方:活用の説明をします。SDK全般の使い方:導入説明に関しては、上記リンク先を参照してください。

OpenSDA接続問題

現時点では、FRDM-KE02Z40M(Cortex-M0+/40MHz、5V Robust)のOpenSDAとIDEデバッガ間が接続できない問題があり、代わりにFRDM-KL25Z(Cortex-M0+/48MHz、General Purpose)も使います。FRDM-KL25Zには、接続問題はありません。

※FRDM-KE02Z40MのOpenSDA接続問題は、内容とその解決策を次回以降投稿予定です。

SDK Version

Installed SDK Version (2020-07)
Installed SDK Version (2020-07)

投稿時点のSDK_2.x_FRDM-KE02Z40M(Version 2.7.0)とSDK_2.x_FRDM-KL25Z(Version 2.2.0)が上図です。MCUXpresso IDEへインストールされたSDK Versionが異なることには注意が必要です。

Versionが異なると、SDK提供サンプルプロジェクトやその中身が異なることがあるからです。多くの評価ボードの最新SDK Versionは2.7.0ですので、テンプレートもSDK Version 2.7.0を前提とします。

Hello_worldサンプルプロジェクトと新規作成プロジェクト

Hello_worldサンプルプロジェクト(左)と新規作成Templateプロジェクト(右)
Hello_worldサンプルプロジェクト(左)と新規作成Templateプロジェクト(右)

FRDM-KE02Z40Mのhello_worldプロジェクトが上図(左)です。CMSISやboardなど多くのフォルダがあり、その中にcソースファイルと、hヘッダファイルが混在しています。sourceフォルダ内にhello_world.cとmain関数があります。

このsourceフォルダが、ユーザの開発するc/hファイルを格納する場所で、他のboardフォルダなどは当面無視して構いません。New Projectをクリックし新たなプロジェクト(プロジェクト名:Template)を作成すると、この理由が判ります。

上図(右)が新規作成したTemplateプロジェクトです。sourceフォルダ以外は、hello_worldと同じ構造です。sourceフォルダ内のTemplate.c内に、コメント:/* TODO: inset other… */が2か所あることも判ります。この青色TODOコメントのソース位置は、ソースウインド右端の上下スライダに青で明示されています。

青色TODOコメントは、ソースコードのユーザ追記場所を示します。

最初のTODOコメントの下にユーザ追記インクルードファイルを、次のTODOコメントの下にユーザ宣言や定義を追記し、main関数内にユーザ処理を追記すればTemplateプロジェクトが完成します。

※main関数内にユーザ処理を追記するのは当然のことですので、main関数内にあるべき青色TODOコメントは、省略されています。

MCUXpresso SDK活用のMCUソフトウェア開発方法

前章までのSDK構造をまとめます。

  • ユーザが新規に開発(追記)するソース/ヘッダファイルは、全てsourceフォルダ内に配置
  • IDEが生成したsourceフォルダ>プロジェクト名.cのユーザ追記場所は、目印として青色TODOコメントがあり、上下スライダにも明示される
  • sourceフォルダ以外は、IDEがSDK Versionに応じて自動生成するライブラリフォルダ
  • ライブラリフォルダの中身は、ユーザ編集は不要

SDK付属のサンプルプロジェクトは、SDK構造に基づいてNXPが作成した周辺回路の利用例です。
※サンプルプロジェクトでは、青色TODOコメントは全て省略されています。

MCUが異なっても、同じ処理を行う場合は、sourceフォルダ内のユーザ追記処理も同じハズです。例えば、FRDM-KE02Z40MとFRDM-KL25Zのhello_worldプロジェクト>sourceフォルダ>hello_world.cは、全く同じソースコードで実現できています。

MCU差やSDK Version差は、sourceフォルダ以外のSDK構造部分で吸収されます。導入説明:Getting Started with MCUXpresso SDKの図1は、このことを図示したものです。

MCUXpresso SDK Laysers(出典:Getting Started with MCUXpresso SDK, Rev. 10_06_2019)
MCUXpresso SDK Laysers(出典:Getting Started with MCUXpresso SDK)

もちろん、旧SDK Versionで未提供なAPIが、新SDK Versionで新たに提供される場合もあります。ただ基本的なAPIは、新旧SDKで共通に提供済みです。

FRDM-KE02Z40MのSDK VersionとFRDM-KL25ZのSDK Versionは現時点で異なるため、IDEが自動生成するフォルダ数は異なります。しかし、ユーザ開発(追記)処理が、sourceフォルダ内で全て完結するSDK構造は同じです。

これが、hello_worldサンプルプロジェクトのようにFRDM-KE02Z40MとFRDM-KL25Z両方に共通で記述できるユーザ処理(Application Code)がある理由です。

SDK構造に沿ったsourceフォルダへのユーザ処理追記と、基本的API利用により、汎用的で効率的なMCUソフトウェア開発が出来ることがご理解できたと思います。

あとがき

2章で、「具体的にSDKを使ってMCUソフトウェア開発をするにはどうすれば良いのかの説明はない」と書きました。しかし、本稿で示したSDK活用説明は、ソフトウェア開発者は当然知っていること・・・だから説明がないとも言えます😅。

このように組込みMCU関連の資料は、前提とするソフトウェア知識・経験をどの読者も既に持っており、本稿記述の当たり前の活用説明は省略する(≒すっ飛ばす)傾向があります。

弊社マイコンテンプレートは、初心者~中級レベルの開発者を対象としており、提供テンプレートも本稿で示したSDK活用方法で開発します。ご購入者様が、なぜこのようなテンプレートになったのか疑問を持った時、それに答えるため、このすっ飛ばした省略部分を補う説明を本稿ではあえて加えました😌。

Cortex-M0からCortex-M0+変化

前稿で示したNXP MCUラインナップ図には、ARM Cortex-M0/M0+両方のコアが掲載中でした。しかし、最新版MCUXpresso IDEのコア選択ダイアログには、Cortex-M0選択肢がありません。

MCUXpresso IDEのコア選択ダイアログ
MCUXpresso IDEのコア選択ダイアログ

そこで、Cortex-M0+とCortex-M0の違いを調べた結果、新規MCU開発にNXPのCortex-M0コアを使う必然性は低いという結論に達しました。本稿は、その根拠を示します。

ARM Cortex-M0+とCortex-M0の差

弊社関連投稿:Cortex-M0/M0+/M3比較とコア選択や、ARMコア利用メリットの評価ARM MCU変化の背景をまとめ、ARMコアの発表年順に示したのが下表です。※M4の発表年は間違っているかもしれませんが、市場に出回ったCortex-Mxコアの順番は下表で正しいハズです😌。

ARM Cortex-Mx性能、発表年
Cortex-Mコア 性能 (MIPS @ MHz) ARM発表年 MCUモデル
Cortex-M3 1.25 2004 旧メインストリーム
Cortex-M0 0.9 2009 ローコスト
Cortex-M0+ 0.95 2011 ローパワー
Cortex-M4 1.25 2012頃 デジタル信号処理新メインストリーム

要するに、Cortex-M0+やCortex-M4は、Cortex-M0やCortex-M3をベースに市場ニーズに即した変更を加えた新しいARMコアだと言うことです。本稿では、特にCortex-M0+とM0の違いに注目します。

Cortex-M0+には、表の差以外にも高速IOアクセス、高速パイプライン、低消費動作モードなどCortex-M0には無い数々の特徴がありますが、Cortex-M0よりも高性能(0.9→0.95MIPS@MHz)で、シリコンチップ高速化にも好都合です。

つまり、新規開発にCortex-M0+の代わりに敢えてCortex-M0コアを用いる理由は、見当たらない訳です。

NXPの新しい統合開発環境MCUXpresso IDEのSDKのコア選択肢に、Cortex-M0が無いのは、上記が理由だと思います。※ローコストに関しては、コア単体の相対評価はできても、使用数量でかなり変動するためMCUコスト絶対評価を難しくしています。

NXP MCUXpresso SDK対応評価ボード数

最新MCUXpresso IDE v11.1.1のSDKで対応中の評価ボード数を一覧にしました。例えば、Cortex-M33コアなら下図のように7個です。

MCUXpresso SDK対応評価ボード数(Cortex-M33の場合)
MCUXpresso SDK対応評価ボード数(Cortex-M33の場合)
MCUXpresso SDK対応評価ボード数比較(2020-07)
MCUXpresso SDK対応評価ボード数比較(2020-07)

評価ボードは、プロトタイプ開発には必須で、その評価ボードで動作するSDK(Software Development Kit)があればソフトウェア開発効率は向上します。Cortex-Mxコア間のソフトウェア移植性は高く、同じコアのソフトウェアであれば、異なる評価ボードへの移植もさらに容易です。

つまり、評価ボード数が多いCortex-M0+やCortex-M4が、現在最もCortex-Mxコアソフトウェア開発効率が高いことを示しています。また、Cortex-M3コア選択肢がない理由も、Cortex-M0コアがない理由と同じと推測します。

本当の並列処理が要求されるマルチコア開発なら、Cortex-M0+とM4のペア、または、IoTセキュリティを強化したCortex-M33コアx2であることも判ります。※Cortex-M33は、2016年ARM発表のセキュリティ強化コアです。

新規ARM Cortex-Mxソフトウェア開発は、Cortex-M0+コアまたはCortex-M4コア利用に収束してきたと思います。
※Cortex-M33コアは、従来コアに無いIoT向けセキュアゾーンなどが新規機能追加されていますので除外しています。

弊社テンプレート開発方針

前稿のNXP MCUラインナップからCortex-M0とCortex-M3を除き、現状SDK提供中のARM Cortex-Mxコアラインナップをまとめると下図になります。※Cortex-M33は未掲載です。

Software Development Kit開発から見たNXP MCUラインナップ
Software Development Kit開発から見たNXP MCUラインナップ

弊社もCortex-M0+、Cortex-M4、Cortex-M33コア向けのテンプレート開発を進める方針です。

NXP MCUラインナップ

NXPは、今から約4年前の2015年12月末にFreeSacleを買収し、FreeSacleのKinetisマイコン(750品種)とNXPのLPCマイコン(350品種)は、NXP 1社から供給されるようになりました。また、別々であった統合開発環境も、新しいMCUXpresso IDEが両MCU対応となり、SDK:Software Development Kitを使ってMCUソフトウェアを開発する方法に統一されました。

本稿は、NXPのCortex-MコアMCU:LPC/Kinetisのラインナップと、新しいMCUXpresso IDE、SDK対応状況をまとめました。

NXP MCUラインナップ

NXP MCUラインナップ(出典:LPC MICROCONTROLLERS 2017-01-04)
NXP MCUラインナップ(出典:LPC MICROCONTROLLERS 2017-01-04)

上図から、おおむね青色のLPCが汎用MCU、橙色のKenitesが特定アプリケーション用途MCUに分類できそうです。

この特定用途とは、例えばKinetis Eシリーズならば、昨今3.3V以下で動作するMCUコアが多いなか、白物家電や産業用途向けに、過酷な電気ノイズ環境下でも高い信頼性と堅牢性(Robust)を維持できる5V動作Cortex-M0+コアMCUを指します(NXPサイトにはCortex-M4コア版もあります)。

Kinetis Eシリーズのコア動作電圧は、2.7~5Vです。関連投稿:MCUの5V耐圧ピンで示したピン毎の5V耐性がMCUコアに備わっており、更に耐ノイズ性も高められているため、タッチパネル操作や多くの5Vデバイス制御に対して使いやすいCortex-M0+/M4シリーズと言えます。

5V動作でタッチパネル付きのKenites KE02 40MHz評価ボード(出典:NXPサイト)
5V動作でタッチパネル付きのKenites KE02 40MHz評価ボード(出典:NXPサイト)

LPC/Kinetis MCUのMCUXpresso IDE、SDK対応

新しくなった統合開発環境MCUXpresso IDEのLPC/ Kenites対応表が、NXP Communityに掲載中です。

この表は毎年更新され、NXPから供給中の全MCU/Application ProcessorのMCUXpresso IDE、SDK対応状況と対応予定まで解るとても役立つ資料です。この表のProduct Familyにフィルタをかけ、Recommended Software欄とMCUXpresso Software and Tools欄を抜粋したのが下表です。

MCUXpresso Supported Devices Table (May 2020より抜粋)
MCUXpresso Supported Devices Table (May 2020より抜粋)

Kenites KE02: 40MHzは、弊社Kinetis Eテンプレートで使ったKinetis Eシリーズマイコンです。2015年のテンプレート開発当時は、旧FreeSacleから供給され、統合開発環境もKinetis Design Studio:KDSとAPI生成ツール:Processor Expertを使いました。現在は、MCUXpresso IDEとSDKへ変わっています。

LPC1100は、古くからあるNXP汎用MCUで、弊社LPC110xテンプレートも提供中です。LPC1100は、MCUXpresso IDEで開発はできますがSDK対応予定は無く(Not Planned)、従来のLPC Open開発が推薦されています。

また、Kinetis KL05: 48MHzは、MCUXpresso IDEとSDK対応予定が無く、旧FreeSacleのKDS開発を推薦しています。

Not Planned 推測

MCUXpresso Software and Tools欄のNot Plannedの意味を考えます。

いずれのMCUも発売後10年~15年程度の安定供給をNXPが保証するため、直ぐにDiscontinueになることはありません。しかし、FreeSacle とNXPの2社統合で当然ながらダブって供給されるMCU品種もある訳で、供給側にとっては1品種へマージしたいでしょう。

この対象は、旧2社それぞれの汎用品種が多く該当すると思われ、その結果が表に現れたと考えます。

つまり、LPC1100やKinetis KL05は、恐らくダブった品種で、新しいMCU開発環境は使わずにそのまま旧開発環境で継続開発ができますが、近い将来Discontinueの可能性が高いと思います。Not Plannedは、これを暗示的に示していると推測します。

もちろん、新発売MCUや生き残った品種は、どれもMCUXpresso IDEとSDKに対応済み(Available)です。最初のMCUラインナップ図を振り返ると、多くのKinetisシリーズは、特殊用途MCU:Application Specific Familiesとして生き残り、Kinetis K/Lシリーズは、汎用MCU:General Purpose Families内で生き残ったのだと思います。

但し、生き残った品種でもデバイスによってはDiscontinueの可能性があり、個別デバイスの確認は、Community掲載表を参照した方が良いでしょう。

弊社マイコンテンプレート対応

主に汎用MCU向けの弊社マイコンテンプレートも、(推測した)NXPと同様の対応にしたいと考えています。つまり、Kinetis Eテンプレートは、最新開発環境MCUXpresso IDEとSDK利用版へ改版、LPC110xテンプレートは、販売中止といたします。

Kinetis E テンプレート改版は、直ぐに着手いたします。Kinetis Eテンプレートご購入者様で購入後1年未満の方は、この改版版を無償提供いたしますのでお待ちください。

LPC110xテンプレートは、1年以上新規ご購入者様がいらっしゃりませんので、無償アップグレード対象者様はございません。既にLPC110xテンプレートご購入者様には、申し訳ございません。別テンプレート50%割引購入特典のご利用をお待ちしております。

Ripple20

前投稿の2~3章で記載した、半導体製品へのサイバー攻撃があり無対策の場合、全製品が使えなくなる実例が発生しそうです。

数億台ものIoT機器や産業制御機器に実装済みのTreck社提供TCP/IPライブラリに「Ripple20」という名の脆弱性(最大値10の危険度評価9~10)が発見され、対策にはライブラリアップデートが必要ですが、できない場合は機器をネットワークから切り離すことが最低限必要になりそうです。
※TCP/IPライブラリは、有線/無線LANプロトコル実装用ソフトウェアライブラリです。

この脆弱性がハッカーに悪用されると、プリンタなどの機器からでも情報が外部流出します。Ripple20は、IoT MCUにセキュア・ファームウェア更新やOTA:Over-The-Air実装を要件とする先例になるかもしれません。

MCUのセキュア・ファームウェア更新は、関連投稿:STM32G0/G4のRoot of Trustをご覧いただくと面倒な更新方法、2面メモリ必要性などがお判り頂けると思います。OTAも関連投稿:Amazon、IoTマイコンへFreeRTOS提供の2章に簡単ですが記載しております。

IoT MCUへ、ソフトウェアだけでなくCortex-Mコアにも更なるセキュリティ対応の影響を与えそうなRipple20です。

FreeRTOSサンプルコード(1)

NXPのCortex-M4/M0+ディアルコアLPCXpresso54114のFreeRTOSサンプルコードを数回に分けて調査します。Cortex-M4クラスのMCUは、処理は高速で大容量Flash、RAMを持つので、ベアメタル利用だけでなくRTOS利用ソフトウェア開発にも適します。

ベアメタルCortex-M0/M0+/M3に適用済み弊社テンプレートを、そのままCortex-M4 MCUに使うのは、テンプレートがMCU非依存なので簡単です。ですが、先ずFreeRTOSソフトウェアをよく知り、新開発ベアメタルCortex-M4テンプレートへ応用できる機能があるか判断するのが調査の目的です。

RTOS習得2017

2017年3月にLPCXpresso824-MAX(Cortex-M0+ 30MHz、32KB Flash、8KB RAM)を使ってFreeRTOSのポイントを調査し、結果をマイコンRTOS習得ページにまとめました。

第1部から第3部で、最低限のFreeRTOSと使用APIを解説し、第4部で、最も優れた解説書と筆者が考えるソースコードと評価ボードを使ってFreeRTOS動作解析と習得を行うという内容です。

ただ、自作FreeRTOSサンプルコードの出来が悪く、第4部の動作解析は不十分でした。

そこで、RTOS利用がより現実的なLPCXpresso54114(Cortex-M4/M0+ 100MHz、256KB Flash、192KB RAM)評価ボードとSDK付属FreeRTOSサンプルコードを用いて、不十分だった第4部FreeRTOS動作解析に再挑戦します。平たく言えば、NXP公式FreeRTOSサンプルコードを、不出来な自作コードの代わりに利用します😅。

第1回目は、FreeRTOSサンプルコードの出所、FreeRTOS動作を調べる4ツールを説明します。

LPCXpresso54114 SDK付属FreeRTOSサンプルコード

NXPマイコンの公式サンプルコード取得方法は、3つあります。最も新しいのがSDK:Software Development Kitから、2つ目がLPCOpenライブラリから、3つ目がPE:Processor Expertからの取得です。

NXP社が古くから用いてきたサンプルコード提供方法が、LPCOpenライブラリです。
NXPに買収された旧Freescale社のKinetis MCUなどは、PEと呼ばれるGUIベースAPI生成ツールでサンプルコードを提供していました。同じMCUでも提供方法によりAPIは異なり、サンプルコード互換性はありません。
※ベンダ毎に異なるAPI提供方法やその違い、サンプルコードとの関係は、別投稿で説明する予定です。

Freescale買収後のNXPは、SDKで全MCU(=新旧NXP+買収FreescaleのMCU)のAPIとサンプルコードを提供する方法に統一したようです。その根拠は、最新MCUXpresso IDEユーザインタフェースが、SDKの利用前提でできているからです。

現在も提供中のLPCOpenライブラリ内にあるLPCXpresso54114 FreeRTOSサンプルコードは2個、一方、SDK内のFreeRTOSサンプルコードは11個あります。PE提供はありません。

調査対象としては、FreeRTOSサンプルコード数が最多のSDKが適しています。

LPCXpresso54114 FreeRTOS examples in SDK
LPCXpresso54114 FreeRTOS examples in SDK

FreeRTOS実動作解析ツール

MCUXpresso IDE v11.1.0のHelp>Help Contentsに、MCUXpresso IDE FreeRTOS Debug Guideがあります(PDF文書がMCUXpresso IDEインストールフォルダ内にも有り) 。この中に、FreeRTOSサンプルコードデバッグのみに使えるタスク対応デバッガ4ツール(Task List/Queue List/Timer List/Heap Usage)があります。

MCUXpresso IDE Help ContentsのFreeRTOS Debug GuideのShowing FreeRTOS TAD Views
MCUXpresso IDE Help ContentsのFreeRTOS Debug GuideのShowing FreeRTOS TAD Views
  • Task List:タスク毎のプライオリティ、スタック使用量、動作時間表示
  • Queue List:アクティブキュー、セマフォ、ミューテックス利用時のリソース表示
  • Timer List:RTOSタイマー表示
  • Heap Usage:ヒープ使用量、メモリブロック割当て表示

これらFreeRTOS専用ツールは、FreeRTOSサンプルコードの評価ボード動作後、デバッガ停止中に表示されます。シミュレーションではなく、評価ボードでの「実動作結果」が判ります。開発ソフトウェアだけでなくRTOS使用量が判るので、デバイスにどれ程リソース余裕があるかが判断できます。

RTOSソフトウェアは、ユーザが開発するタスクの単体、結合デバッグに加え、RTOS動作の確認事項が増えます。FreeRTOS実動作解析4ツールは、これらの確認ができます。評価ボードを使ったプロトタイプ開発の重要度は、ベアメタル開発比より大きくなると言えるでしょう。

次回以降、LPCXpresso54114のSDK付属FreeRTOSサンプルコードを、MCUXpresso IDEのFreeRTOS Debug Guideに沿って調査します。