FRDM-KL25Z タッチスライダの使い方

FRDM-KL25Z評価ボードのタッチスライダ(Capacitive Touch Slider)の使い方を説明します。

タッチスライダ動作にはのMCU内蔵TSIが必須(出展:Fig1データシート、Fi2ユーザズマニュアル)
タッチスライダ動作にはのMCU内蔵TSIが必須(出展:Fig1データシート、Fi2ユーザズマニュアル)

タッチスライダ

CypressのPSoC 4000S/4100S/4100PSテンプレートでも使用中の指によるタッチユーザインタフェースは、MCU入力手段として人気があります。

NXPの多くのFRDM評価ボードにもFigure2のようにCapacitive Touch Sliderが実装済みですが、これをタッチスライダとして動作させるには、MCU内蔵TSIハードウェアと、これを制御するTSIライブラリの両方が必須です。
※TSI:Touch Sensor Input。

例えば、FRDM-KE02Z40Mでは、TSIハードウェアがMCU非内蔵なためタッチスライダは動作しません。

MCUXpresso SDKのTSI:Touch Sensor Inputサンプルプロジェクト

MCUXpresso SDKのTSIサンプルプロジェクトは、driver_examples>tsi_v4>normalにあります。MCUXpresso SDKの使い方は、関連投稿を参照してください。

MCUXpresso SDKのTSIサンプルプロジェクト
MCUXpresso SDKのTSIサンプルプロジェクト

以降は、サンプルプロジェクトのソースコードを横目で見ながら本稿を読んで頂くと良く分かると思います。が、ソースコードが無い場合には、まとめ章へスキップしてください。

tsi_v4_normal.cを見ると、このサンプルプロジェクトは、MCU内蔵TSIハードウェアをキャリブレーション(L127)後、下記3つの方法でTSIを制御しているサンプルであることが解ります。
※キャリブレーションとは、測定系ハードウェアの測定精度を上げる処理で、ADCなどでも必要です。

  1. (L136)SOFTWARE TRIIGER SACN USING POLLING METHOD
  2. (L159)SOFTWARE TRIIGER SACN USING INTERRUPT METHOD
  3. (L178)HARDWARE TRIIGER SACN

1や2でもTSIソフトウェアライブラリ単独制御ではなく、TSIハードウェア/ライブラリ両方が必須であることに注意してください。3も同様です。

サンプルプロジェクトでは、1~3の方法を順に処理し、各方法の最後にPRINTFで取得値xxxxをConsoleへ出力します。その出力例がreadme.txtにあります。

MCUXpresso SDKのTSIサンプルプロジェクト3方法の動作出力例
MCUXpresso SDKのTSIサンプルプロジェクト3方法の動作出力例

3番目のハードウェア割込み方法設定後、無限ループへ入ります。

このサンプルプロジェクトソースコードは、本来は3サンプルプロジェクトに分離すべきものを、1つにまとめた書き方をしています。つまり、TSIソフトウェアポーリングプロジェクト、TSIソフトウェア割込みプロジェクト、TSIハードウェア割込みプロジェクトを1つにまとめています(ので、少々解りにくいかもしれません)。

TSIソフトウェアポーリングプロジェクト

そこで、TSIソフトウェアポーリングプロジェクトのみを抽出します。

先ずは、ソフトウェアポーリング処理後、他の2方法を飛ばして無限ループへジャンプさせます。例えば、L157のTSI_ClearStatusFlags()の後にgoto LOOP;を追加し、無限ループの前に飛び先ラベルLOOP:を加えます。すると、ポーリング方法のみの処理結果がConsoleへ正常出力されます。

つまり、ソフトウェアポーリングのみで、1回TSI制御ができることが確認できました。

組込み処理は、初期設定と無限ループ内の繰返し処理の2つに分けて考えるのが常套手段です。そこで、ソフトウェアポーリングの方法も、初期設定と繰返し処理の2つへ分けます。

L101~L143がソフトウェアポーリングの初期設定、L143~L157が繰返し処理です(※L143がダブっているのは間違いではありません)。この繰返し処理先頭L143に無限ループに付加したラベルLOOP:を移動し、無限ループ化します(無限ループに加えたラベルは削除してください)。

動作させ、TSIソフトウェアポーリングプロジェクトのみの抽出と連続ポーリング処理が完成です。

他の2方法、TSIソフトウェア割込みプロジェクトや、TSIハードウェア割込みプロジェクトのみを抽出する場合も同様です。3プロジェクトに分離すると、各方法の理解がより深まります。

※FRDM-KL25Zは、TSI channel 9と10の両方を使っています。両チャネルを使うメリットは、2つあります。1つは、その取得値変化から、指がスライダの左右どちらへ移動したかが解ることです。抽出プロジェクトで、その取得値変化の様子を実際に試してください。

TSIタッチスライダパッドの2チャネルの使い方
TSIタッチスライダパッドの2チャネルの使い方

※もう1つのメリットは、タッチ感度が上がることです。上図のように、各チャネルカバー範囲は相補的ですので、片チャネルでタッチ検出するよりも両チャネル検出の方が、より高感度になります。

FRDM-KL25Z タッチスライダの使い方

前章までで、FRDM-KL25ZタッチスライダのSDKサンプルプロジェクト3制御方法を解説しました。

本章は、もっと実用的なタッチスライダの使い方を説明します。

前章のTSIソフトウェアポーリング方法で、TSIチャネル9のみを使い、タッチスライダを物理スイッチの代わりに動作させる使い方です。

この動作は、オリジナルサンプルプロジェクトのTSIハードウェア割込み方法で、タッチスライダを指で触るとLEDがトグル点滅、つまり、スライダではなくタッチパッドとして動作するのと同様です。物理スイッチではないので、経年変化が少ないことが特徴です。

FRDM-KL25Z の性能を100%使ったTSIサンプルプロジェクトでは、タッチスライダ動作も十分可能です。

しかし、FRDM-KL25ZでTSI処理以外にも様々な処理を行う場合は、このタッチパッド的使い方が実用的だと筆者は思います。オリジナルサンプルプロジェクトも、この事を暗に示しているのかもしれません。

FRDM-KL25Z タッチスライダの初期設定

初期設定は、抽出したTSIソフトウェアポーリングプロジェクトの初期設定からチャネル10設定分を削除します。

FRDM-KL25Z タッチスライダの無限ループ内処理

抽出プロジェクトは、無限ループ内でチャネル9と10を「連続計測」しConsole出力しました。実用的な処理では、タッチスライダ処理以外の様々な他の処理を1個のMCUで行うため、この計測処理は(他の様々な処理が間に挟まるため)「離散的」になります。

離散計測処理を行う際の注意点は、チャタリング対策です。

指によるタッチであっても、本当にタッチしたのか、または、たまたま触っただけなのかをソフトウェア側で判断する必要があり、これをチャタリング対策(=入力ノイズ対策)と言います。

例えば、複数回の離散タッチ検出ならば本当のタッチ、1回のみのタッチ検出ならば、触っただけのノイズでタッチと判断しない等です。

まとめ

FRDM-KL25Z評価ボード付属タッチスライダ制御を、MCUXpresso SDK TSIサンプルプロジェクトのソフトウェアポーリング、ソフトウェア割込み、ハードウェア割込みの3方法から解説し、タッチスライダを物理スイッチの代わりに動作させるタッチパッド的な使い方を説明しました。

3方法をまとめたオリジナルサンプルプロジェクトを、方法別に分離プロジェクト化し、初期設定と無限ループ内処理の2つに分け、ループ内処理のソフトウェアチャタリング対策を説明しました。

開発中のKinetis Lテンプレートには、本稿で示したチャタリング対策済みの応用例を添付します。

FRDM-KL25Z VCOMの使い方

FRDM-KL25ZのUARTとPC を、USB経由のVCOM:Virtual COM port接続する方法を説明します。

FRDM-KL25ZのUARTとVCOM接続中のTera Term画面
FRDM-KL25ZのUARTとVCOM接続中のTera Term画面

VCOM:Virtual COM port

MCU評価ボードとPC間は、USBで接続されており、このUSB経由でターゲットMCUのプログラミングやデバッグを行います。前稿説明のJ-TAGハードウェアデバッガの代わりが、評価ボード付属デバッガで、FRDM-KL25Zの場合は、OpenSDAと呼びます。

本ブログ掲載の評価ボード付属デバッガが下表です。ベンダ毎に付属デバッガの呼び名は異なりますが、どれも機能的には同じです(Renesasは、別途E2 Lite/E2ハードウェアデバッガで機能提供します)。

ベンダ毎に呼び名が異なる評価ボード付属デバッガ
ベンダ 評価ボード付属デバッガ 評価ボード例 MCU – PC間通信
NXP OpenSDA/CMSIS-DAP FRDM-KL25Z/LPCXpresso54114 UART
STM ST-Link STM32G071RB UART
Cypress KitProg CY8CKIT-145 UARTとI2C
TI XDS110-ET MSP-EXP432P401R LaunchPad UART
Renesas なし(E2 Lite/E2必須) BlueBoard-RL78G13-64 UART

評価ボード付属デバッガには、ターゲットMCUのプログラミング/デバッグ機能に加え、MCUのUARTとPCのUSB間を橋渡し(=接続)する機能があります。これをVCOM:Virtual COM port接続といい、Tera Termなどのシリアル通信ソフトウェアをPCにインストールすれば、いとも簡単にMCUの UART通信ソフトウェア送受信の動作確認ができます。

※Tera Termの代わりにMCUXpresso IDEプリインストールのSerial Terminalも使えます。

MCUXpresso IDEのTerminalによるTera Termの代用
MCUXpresso IDEのTerminalによるTera Termの代用

UART:Universal Asynchronous Receiver/Transmitter

UARTは、最重要MCU周辺回路です。

古くから装置組込み済みMCUの再プログラミング手段としてUARTは利用されてきました。最新IoT MCUでも、セキュア・ブート、セキュア・ファームウェア更新に使える手段はUARTのみです(関連投稿:STM32G0/G4のRoot of Trustなどを参照してください)。

さらに、MCUXpresso SDKの評価ボード新規プロジェクト作成時でも、最初からActiveな周辺回路はUART0だけです(※UARTの“0”に注意してください)。ボード実装済みのLEDさえ初期値はInactiveです。つまり、UARTを動作させないMCUは無いと言えるでしょう。

UARTソフトウェアの動作確認には、送・受信機能を持つため通信相手が必要で、VCOM接続によりPCが通信相手になるため、最重要周辺回路:UARTソフトウェアの動作確認ができる訳です。

FRDM-KL25ZのVCOM接続方法

前置きが長くなりました。本章から評価ボード:FRDM-KL25Z をOpenSDA経由でVCOM接続する方法を説明します。

結論から言うと、FRDM-KL25ZのVCOM接続には評価ボードに2配線追加が必要です。2配線を追加しTera Termを使ったUART送受信中の画面が写真1です。

  • J1-2とJ2-20配線・・・・・・・UART0_TX:PTA1とUART1_TX:PTE0接続
  • J1-1とJ2-18配線・・・・・・・UART0_RX:PTA2とUART1_RX:PTE1接続

FRDM-KL25Z関連資料は不親切で、この必須配線が分かりにくいので順を追って説明します。が、配線さえ追加すれば、全てのSDK UARTサンプルプロジェクトが正常動作しますので、急ぐ方は、まとめ章へスキップしてください。

MCUXpresso SDK UARTサンプルプロジェクトと回路図

FRDM-KL25ZのMCUXpresso SDK UARTサンプルプロジェクトは、どれもUART0ではなくUART1を使った処理例です。readme.txtには、“USB to Com Converter:USB2COM”をJ2-20/18と配線せよと記載されています。もちろん、別途USB to Com Converterを用意し、このとおり接続すればサンプル動作確認ができるでしょう。

しかし、OpenSDAにUSB to Com Converter と同じVCOM機能が備わっているのにこれを使わない手はありません。

そこで、FRDM-KL25Z回路図Rev.EのSheet 3を見ると、OpenSDAとMCUはUART0で接続済みで、R5とR6でUART1とも並列接続済みなのが判ります。本来ならUSB to Com Converterが無くてもそのままUART1サンプルプロジェクトが動作するハズです。

試しに、サンプルプロジェクトのUART1をUART0へ変更すると、コンパイル時に妙なワーニングが発生しますが、VCOM接続でUART0が動作します(UART0からUART1への変更にはMCUXpresso Config Toolsの使い方を参照してください)。つまり、UART0とOpenSDAは、回路図どおり接続済みな訳です。

R5とR6は実装されていますが、この代わり追加したのが2配線です。

その結果、UART1で全てのサンプルプロジェクトが正常動作します。また、UART0で発生した妙なワーニングもありません。

つまり、SDK付属UART1サンプルプロジェクトの正常動作には、J1-2とJ2-20、J1-1とJ2-18の2配線が必要です。この時UART0は、並列接続を避けるためInactiveにします。

※サンプルプロジェクトは、元々UART0がInactiveです。新規プロジェクト作成の時は、デフォルトActiveなUART0をInactive、UART1をActiveへ変更すると、サンプルプロジェクトがそのまま流用できます。

※評価ボード回路図最新版がRev.Eです。FRDM-KL25Z評価ボード裏側にシールが貼ってあり、回路図版数Rev.Eと一致、R5とR6も実装済みですが正常動作には追加配線が必要でした。回路図と実評価ボードの版数には、留意してください。

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

UARTとVCOM接続の重要性を示し、FRDM-KL25Z評価ボードで、VCOM接続を使ってMCUXpresso SDK UART1サンプルプロジェクトを正常動作させるには、評価ボードへ2配線を追加する使い方、各種注意点を説明しました。

このFRDM-KL25Z(Cortex-M0+/48MHz、General Purpose = Main Stream)を使って開発中の汎用Kinetis Lテンプレートは、新規プロジェクト作成時のデフォルトActiveなUART0をUART1へ変更済みで、本稿で示したような開発つまずきを回避する各種情報なども添付します。

写真1は、最も簡単なテンプレート応用例のVCOM動作で、評価ボードの赤/緑/青LEDやタッチスライダ、低消費電力動作のKinetis Lソフトウェアを簡単に開発できるテンプレートです。

3.3V動作新Baseboard

Cortex-M0+のKinetis Lは1.71Vから3.6 V動作で、従来弊社が扱ってきた5V Baseboard接続への5V耐圧端子が残念ながらありません。100MHzクラスで3.3V動作のCortex-M4テンプレート開発なども考慮すると、3.3V/1.8V動作用の新しいBaseboardを探し、テンプレート応用例に適用させたいと考えております。

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 Config Toolsの使い方

前稿に続きMCUXpresso SDKベースのMCUソフトウェア開発に欠かせないMCUXpresso Config Toolsの使い方を説明します。SDKサンプルプログラムに少しでも変更を加える時には、Config Toolsが必要になります。

MCUXpresso IDEクイックスタートパネルのConfig Tools
MCUXpresso IDEクイックスタートパネルのConfig Tools

Config ToolsとSDK

MCUXpresso IDEのSDKサンプルプロジェクトは、そのままコンパイルして評価ボードで即動作可能です。ユーザが変更を加える箇所は、sourceフォルダ内に限られています。sourceフォルダ以外は、ライブラリフォルダです(詳細は、前稿を参照してください)。

Config Toolsは、このSDKライブラリに変更を加えるツールです。

SDKサンプルプロジェクトは、MCU内蔵周辺回路の動作例ですが、逆に言うと、「その周辺回路しか動作させない例」です。低電力動作が必須のMCUでは、しごく当然のこのソフトウェア作法、つまり無用な回路は動作させない方針で開発されています。

ところが、SDKサンプルプロジェクトにユーザが変更を加える場合、サンプルプロジェクトで動作中の回路以外の周辺回路動作を新たに加える時があります。

この時には、MCUXpresso Config Tools>>をクリックし、MCU内蔵の眠っている(=Inactive)周辺回路の目を覚ます(=Activate)必要があります。

周辺回路をActivateした結果、サンプルプロジェクトのSDKライブラリに対して、相応の変更をConfig Toolsが自動生成(上書き)します。これが、Config ToolsとSDKの関係です。

Config Toolsの使い方

具体的にFRDM-KL25Z(Cortex-M0+/48MHz、General Purpose)評価ボードのSDKサンプルプロジェクト:gpio_led_outputを例に、Config Toolsの使い方を説明します。このサンプルプロジェクトは、いわゆるLチカサンプルで、評価ボード上の赤LEDを点滅させます。

ここでは、赤LEDの代わりに緑/青LEDを点滅させる変更をユーザが加えると想定します。

※他のサンプルプロジェクトも、殆ど赤LED(BOARD_RED_LED)1個のみを動作させますので、この緑/青LED変更方法は、多くのサンプルプロジェクトにも流用できます。

MCUXpresso SDKのgpio_led_outputソースコード(一部抜粋)
MCUXpresso SDKのgpio_led_outputソースコード(一部抜粋)

先ずConfig Toolsを使わずにL40とL41のRED_LEDをGREEN_LEDへ変更後、Buildします。その後、DebugでFRDM-KL25Z評価ボードを動作させても緑LEDは点滅しません。もちろん、ブレークポイントをL92に設定して動作は確認済みです。

LEDが点滅しない理由は、評価ボードの緑/青LEDに接続済みのgpioピンが、Inactiveだからです。

対策にMCUXpresso Config Toolsをクリックすると、Develop画面がPins画面へ変わります。

MCUXpresso Config Toolsクリックで現れるPin画面
MCUXpresso Config Toolsクリックで現れるPin画面

Routed Pinsタブ①に、GPIOB:LED_REDがリストアップされています。このリストは、Activate済みの全ピンを示します。

そこで、Peripheral Signalsタブ②で緑/青LEDのGPIOB、19とGPIOD、1に✅を入れると、リストに両ピンが加わります。Identifierは、LED_GREENとLED_BLUEにします。

MCUXpresso Config ToolsでActivateした緑と青LEDのgpioピン
MCUXpresso Config ToolsでActivateした緑と青LEDのgpioピン

この状態で、「緑色」のUpdate Codeボタン③をクリックすると、Update Filesダイアログが開き、上書き対象のSDKライブラリが一覧表示されます。この場合は、ライブラリ:board>pin_mux.c/hとboard>clock_config.c/hが上書き更新されます。

MCUXpresso Config Toolsが生成(上書き)するファイル一覧
MCUXpresso Config Toolsが生成(上書き)するファイル一覧

ダイアログのOKクリックで最終的にSDKライブラリへ変更が加わり、自動的にDevelop画面に戻ります。上書きされるライブラリのソースコードは、Pins画面上のCode Previewタブ④でも更新前に確認ができます。

戻ったDevelop画面で、RED_LEDをGREENやBLUE_LEDへ変更し、Build を再実行、Debugすると、今度は評価ボードの緑/青LEDが点滅します。

Config Toolsが、緑/青LED接続のgpioピンをActivateしたSDKライブラリに上書き更新したからです。

このようにSDKサンプルプロジェクトは、必須周辺回路とクロックルートのみをActivateした例で、その周辺回路単体でのMCU消費電力も判ります。この時のクロック周波数は、MCU最高動作周波数です。周波数を下げることで消費電力も減らせますが、その分ソフトウェア開発の難易度は上がります。

機能的には似た周辺回路がある場合や、特に電力消費が大きい回路を比較・最適化し、MCUトータル消費を改善する手段としてもサンプルプロジェクトは利用できます。

MCU電力低減方法は、SDK/Config Toolsデフォルトの最高周波数でソフトウェアを開発し、次に周波数を下げるアプローチが適すと言えるでしょう。

Config ToolsのUpdate Code

SDKサンプルプロジェクトに何も変更を加えずに、Config Toolsをクリックしても、Update Codeボタンが「緑色」になる場合があります。Update Codeボタンの灰色は、上書きするSDKライブラリが無いことを示します。この場合は、変更を加えていないので、本来「灰色」のハズです。

これは、元々のSDKライブラリが手動生成、または旧Config Toolsで生成していて、IDE付属の最新Config Toolsの上書き版と(機能的には同じでも)異なる場合があるからです。例えば、ライブラリコメントが変わる場合などが相当します。

気になる方は、SDKサンプルプロジェクトを最初にIDEへImport後、直にConfig Toolsを起動し、Update Codeを一度実行しておけば、次回からユーザ変更が無ければ、灰色でボタン表示されます。

新規プロジェクトのConfig Tools

Config Toolsの使い方に本稿では、SDKサンプルプロジェクトのLチカサンプル点滅LED変更を例にしました。この使い方は、MCUXpresso IDEで新規プロジェクト作成時でも同じです。

新規プロジェクト作成時、初めからMCU内蔵周辺回路のSDKドライバを全て実装したとしても、消費(浪費)されるリソースはFlash/RAM容量のみです。周辺回路やクロックルートのほとんどは、Inactiveが初期値で、ActivateはUART0程度です。

そこで、IDE新規プロジェクト作成後、先ずConfig Toolsで使用予定の周辺回路やクロックルートをActivateし、それらに対応したSDKライブラリをUpdate Codeで上書き更新、最後にユーザ処理を記述するという順番になります。

MCUXpresso IDEソフトウェア開発要点

NXPのMCUXpresso IDEは、SDKベースのMCUソフトウェア開発を行います。

SDKには、多くのサンプルプロジェクトがあり、これらを上手く活用すると、効率的で汎用的なMCUソフトウェア開発が可能です。

SDKサンプルプロジェクトは、対象周辺回路とクロックルートのみを動作させる基本に忠実な作法で開発しているため、ユーザがプロジェクトへ変更を加える時、新たな周辺回路のActivateが必要な場合があります。

Config Toolsは、MCU全内蔵回路とクロックルートを、GUIで簡単にActivate/Inactive変更ができ、その結果として、更新の必要があるSDKサンプルプロジェクトのライブラリを上書き更新します。

NXPのMCUソフトウェア開発は、MCUXpresso IDEに備わったSDKとConfig Tools両方の活用が必須で、前稿と本稿の2回に分けてその使い方を説明しました。

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です。

NXPの日本市場位置づけと事業戦略

6月5日投稿NXPのFreeMASTERの最後の章で紹介したNXP新CEO)カート・シーヴァーズ(Kurt Sievers)氏へのEE Times Japanインタビュー記事が16日掲載され、NXPの日本市場位置づけと事業戦略が語られました。

  • 日本の自動車関連企業との強固な関係は、一層強める
  • 日本の産業・IoT関連企業との関係は、自動車関連企業と同様、強い関係を構築していく
  • 日本のロボティクス企業とNXPのエッジコンピューティング技術の親和性は良く、ともに成長できる

本ブログの投稿は、MCUソフトウェア開発者向けが多いです。が、今回はNXPビジネスをピックアップします。というのは、多くの開発者が使っているWindows 10の今後を考えるには、Microsoftビジネスを知る必要があるのと同じ理由です。NXPビジネスを知って、MCUの将来を考えます。

以下、2020年5月のNXP semiconductors corporate overview抄訳バージョンを使います。※EE Japan記事もこのNXP資料を使っています。

NXPターゲット4市場

NXPのターゲットは、P8記載のオートモーティブ、インダストリアル&IoT、モバイル、通信インフラストラクチャの4市場です。そして、これらを包括的にサポートする半導体デジタル/アナログ技術である、Sense、Think、Connect、Act全てをNXPは提供中です。

NXPのターゲット4市場(出典:NXP semiconductors corporate overview)
NXPのターゲット4市場(出典:NXP semiconductors corporate overview)
NXPの提供する半導体デジタル/アナログ技術(出典:NXP semiconductors corporate overview)
NXPの提供する半導体デジタル/アナログ技術(出典:NXP semiconductors corporate overview)
NXPの提供するフルシステムソリューション(出典:NXP semiconductors corporate overview)
NXPの提供するフルシステムソリューション(出典:NXP semiconductors corporate overview)

NXPの強み

NXPの強みは、ユーザである我々開発者へ、半導体技術をもれなく提供できることだと筆者は思います。この分野は近い将来、セキュア/セキュリティ無しでは存在しえません。ネットワークで繋がり、セキュリティが弱い箇所が一か所でもあれば、全てが使えなくなる危険性があるからです。

例えインタフェースが確立されていても、技術同士を接続すると、上手く動作しないことはよくあります。※俗に相性問題などとWindowsでは言われます。

全技術を他社より先に提供するNXP同志の技術接続は、競合他社間の技術接続より容易、低リスクであることは明らかです。後追いの競合他社は、差別化の特徴を持たないと生き残れず、この特徴が逆に他社との接続障害になることもあります。

P12に記載されたように技術単独では存在意味が弱く、各技術がセキュアに繋がって初めてソリューションとしての市場価値が生まれます。

EE Japan Times記事によると、AI関連技術は、NXPで独自開発を行うとともにM&Aも検討中のようです。このように、選択と集中、差別化戦略ではなく全ての半導体技術を開発し、ユーザである開発者へ提供できることがNXPの強みだと思います。

エッジコンピューティングMCUの将来

PC → スマホ → MCUへとセキュリティや半導体技術をけん引してきたデバイスは変わりつつあります。

COVID-19パンデミックで経済活動が停止したのは、コロナワクチンが無いからです。半導体製品にサイバー攻撃があった時、対応ワクチンや追加のセキュリティがThink主役のMCUへ必要となります。

これらからMCUは、今後さらなるセキュリティ実装やWiFi-6などの新しい無線LAN規格への対応など、より高性能化、低消費電力化へ進むと思います。NXPは台湾TSMCの5nm製造プロセスを次世代自動車用MCUに使う(2020/6/12)ことを明らかにし、実現へ向けてスタートしています。

NXP日本市場位置づけ、事業戦略、開発者の対策

以上のNXP概要を見たうえで、最初に示した日本市場位置づけ、事業戦略を振り返ると、NXPの提供する広範囲な半導体技術を自動車、産業機器、ロボティクスへ適用していくことがより解ると思います。

我々開発者は、NXP製品の第1次利用者です。MCU開発者は、次々に導入される新しい技術を焦ることなく効率的に習得・活用し、開発製品へ応用しましょう。そして、我々の製品利用者(NXP製品の第2次利用者)へ新しい価値を提供できるよう努めましょう。

EE Japan Times記事に記載はありませんが、残念ながら日本市場の相対的地位は、低下しつつあります。また、パンデミック再来に備え、開発者個人のスキルアップや自己トレーニング重要性も再認識されたと思います。より広く・早い開発技術の習得が、MCU開発者には必要となるでしょう。

Windows 10の将来

市場に溢れるWindows 10情報は、トラブル対策のものが殆どで、MicrosoftのOSビジネス情報は見当たりません。ただ、ここ数年のWindows 10状況は、最終PC利用者の価値を高めるというよりも、Windowsブロガへの記事ネタを増やすことに役立っています。

このWindows現状を、Microsoftがどのように回復するのか知りたいです。ビジネスなので、利益なしの解はありません。しかし、安心してWindows 10が使えないなら、PCのOSは、安定感のあるiOSやLinuxへ変わるかもしれません。

アプリケーションのマルチプラットフォーム化や、WindowsアプリケーションでもiOSやLinux上でそのまま動作する環境も整いつつあります。折しも、32ビットPC OSは、2020年で終焉を迎えようとしています。ハードウェア起因ならまだしも、ソフトウェア、特にOS起因の生産性低下は、許されないと思います。

MCUの5V耐圧ピン

弊社FreeRTOS習得ページで使う評価ボード:LPCXpresso54114(Cortex-M4/100MHz、256KB Flash、192KB RAM)は、FreeRTOSだけでなく、Mbed OSZephyr OSなどオープンソース組込みRTOSにも対応しています。多くの情報がありRTOSを学ぶには適した評価ボードだと思います。

LPCXpresso54114 Board power diagram(出典:UM10973に加筆)
LPCXpresso54114 Board power diagram(出典:UM10973に加筆)

さて、このLPCXpresso54114の電圧ブロック図が上図です。MCUはデフォルト3.3V動作、低電力動作用に1.8Vも選択可能です。一方、Arduinoコネクタへは、常時5Vが供給されます。

本稿は、このMCU動作電圧とArduinoコネクタに接続するセンサなどの動作電圧が異なっても制御できる仕組みを、ソフトウェア開発者向けに説明します。

MCU動作電圧

高速化や低電力化の市場要求に沿うようにMCU動作電圧は、3.3V → 3.0V → 2.4V → 1.8Vと低下しつつあります。同時にMCUに接続するセンサやLCDなどの被制御デバイスも、低電圧化しています。しかし、多くの被制御デバイスは、未だに5V動作が多く、しかも低電圧デバイスに比べ安価です。

例えば、5V動作HD44780コンパチブルLCDは1個500円、同じ仕様で3.3V動作版になると1個550円などです。※弊社マイコンテンプレートに使用中のmbed-Xpresso Baseboardには、5V HD44780コンパチブルLCDが搭載されています。

レベルシフタ

異なる動作電圧デバイス間の最も基本的な接続が、間にレベルシフタを入れる方法です。

TI)TXS0108E:8ビットレベルシフタモジュールの例で示します。低圧A側が1.8V、高圧B側が3.3Vの動作図です。A側のH/L電圧(赤)が、B側のH/L電圧(緑)へ変換されます(双方向なので、B側からA側への変換も可能です)。

8ビットレベルシフタTXS0108Eのアプリケーション動作(出典:TI:TXS0108Eデータシート)
8ビットレベルシフタTXS0108Eのアプリケーション動作(出典:TI:TXS0108Eデータシート)

レベルシフタ利用時には、電圧レベルの変換だけでなく、データレート(スピード)も重要です。十分なデータレートがあれば、1.8VのH/L波形は、そのまま3.3VのH/L波形へ変換されますが、データレートが遅いと波形が崩れ、送り側のH/L信号が受け側へ正確に伝わりません。

例えば、LCD制御は、複数のLCDコマンドをMCUからLCDへ送信して行われます。データレートが遅い場合には、コマンドが正しく伝わらず制御ができなくなります。

MCUの5V耐圧ピン:5V Tolerant MCU Pad

LPCXpresso54114のGPIOピンには、5V耐圧という属性があります。PIO0_0の[2]が5V耐圧を示しています。

LPCLPCXpresso54114の5V耐圧属性(出典:5411xデータシート)
LPCLPCXpresso54114の5V耐圧属性(出典:5411xデータシート)

5V耐圧を簡単に説明すると、「動作電圧が3.3/1.8V MCUのPIO0_0に、5Vデバイスをレベルシフタは使わずに直接接続しても、H/L信号がデバイスへ送受信できる」ということです。または、「PIO0_0に、1ビットの5Vレベルシフタ内蔵」と解釈しても良いと思います。

※ハードウェア担当者からはクレームが来そうな説明ですが、ソフトウェア開発者向けの簡単説明です。クレームの内容は、ソフトウェア担当の同僚へ解説してください😌。

全てのGPIOピンが5V耐圧では無い点には、注意が必要です。但し、ArduinoコネクタのGPIOピンは、5V耐圧を持つものが多いハズです。接続先デバイスが5V動作の可能性があるからです。

また、I2C/SPIバスで接続するデバイスもあります。この場合でも、MCU側のI2C/SPI電圧レベルとデバイス側のI2C/SPI電圧レベルが異なる場合には、レベルシフタが必要です。MCU側I2C/SPIポートに5V耐圧属性がある場合には、GPIO同様直接接続も可能です。

I2Cバスは、SDA/SCLの2本制御(SPIなら3本)でGPIOに比べMCU使用ピン数が少ないメリットがあります。しかし、その代わりに通信速度が400KHzなど高速になるのでデータレートへの注意が必要です。

LPCXpresso54114以外にも5V耐圧ピンを持つMCUは、各社から発売中です。ちなみに、マイコンテンプレート適用のMCUは、6本の5V耐圧GPIOを使ってmbed-Xpresso Baseboard搭載5V LCDを直接制御しています。

mbed-Xpresso Baseboard搭載5V HD44780コンパチLCDの3.3V STM32G071RB直接制御例
mbed-Xpresso Baseboard搭載5V HD44780コンパチLCDの3.3V STM32G071RB直接制御例

5V耐圧MCUデータシート確認方法

MCUのGPIOやI2C/SPIを使って外部センサやLCDなどのデバイスを制御する場合、下記項目を確認する必要があります。

  1. MCU動作電圧と被制御デバイス動作電圧は同じか?
  2. MCU動作電圧と被制御デバイス動作電圧が異なる場合、外付けレベルシフタを用いるか、またはMCU内蔵5V耐圧ピンを用いるか?
  3. MCU内蔵5V耐圧GPIOやI2C/SPIを利用する場合、そのデータレートは、制御に十分高速か?

5V耐圧ピンは、使用するMCU毎に仕様が異なります。MCUデータシートは、英語版なら「tolerant」、日本語版なら「耐圧」で検索すると内容確認が素早くできます👍。

MCU動作電圧と接続デバイス動作電圧が異なっても、MCUのH/L信号が被制御デバイスへ正しく伝わればデバイスを制御できます。

MCU動作電圧に合わせたデバイス選定やレベルシフタ追加ならば話は簡単ですが、トータルコストや将来の拡張性などを検討し、5V耐圧ピンの活用も良いと思います。