NXPマイコンのNXP推薦開発環境

NXPは、Freescaleを買収しARMコアのマイコンラインアップが増えました。昨年発表の新しい統合開発環境MCUXpressoで増加ラインアップに対応中です(MCUXpressoサポート状況Excel表がコチラ)。

IDE、SDK:Software Development Kit、CFG:Config Toolsの3ツールから構成されるMCUXpressoのサポート状況から、新生NXPのARMマイコン開発環境を考察します。

もっと早く気が付いていれば…

このExcel表を見つけたのは、今年1月中。LPC824の最新LPCOpenライブラリv3.02に、昨年から継続するバグ解消が無いことが理由でした。何か変だと思い、NXPサイト検索で発見したのが同表です。

2017年7E目標のLPC824対応マイコンテンプレート開発前にこの表を見つけていれば、対応が変わっていただけに残念です(orz)。LPC800でフィルタリングしたのが下図です。

LPC8xx Recommended SDK
LPC8xx Recommended SDK (Source: Version 14)

LPC8xxシリーズは、LPCOpenライブラリはAvailableなものの、NXPはCode BundleがRecommended SDK:推薦Software Development Kitです。推薦環境以外でテンプレート開発したことになります。

Change Logページを見てもいつCode Bundleへ変わったか不明です。しかし、LPC8xxテンプレートV1開発時の2014年5月10日時点では、「LPCOpenがLPC812のSDK」でした(Legacyフォルダはあっても、Code Bundleなどありませんでした)。

LPC8xxシリーズは、IDEのみMCUXpresso IDEでSDK、CFGの計画はありません。つまり、NXP推薦Code BundleかLPCOpenを使いソフト開発が必要です。

Code BundleとLPC8xx

Code Bundleは、C:\nxp\MCUXpressoIDE_10.1.1_606\ide\Examples\CodeBundlesにあります。特徴は、ハードレジスタを直接アクセスするLegacyスタイルなので、従来の8/16ビットマイコン開発者に馴染み易く、これらマイコン置換え狙いのLPC8xxには、このスタイルの方が歓迎される可能性があります。

但し、LPC81x、82x/83x、84xとハードレジスタが微妙に変化していますので制御ソフトも変化します。LPCOpenのようにAPIでハード差を吸収する思想は少ない(無い)ようです。

気になる点が2つあります。最初は、サンプルソフトのヘッダーが簡素なことです。

ベンダ提供のサンプルソフトヘッダーは、細かな注意点などが30行程度記載されているのが普通です(左:Code Bundle、右:LPCOpen)。

Sample Software Hader
Sample Software Hader

Code BundleのHeaderは弊社マイコンテンプレートと同様簡素(上図は9行)で、間に合わせで開発した感があります。また、ソース内コメントも数人のエキスパート:上級者で分担してサンプルソフトを作成したように感じました。

Code Bundleの全サンプルソフトを動作テストした訳ではありませんが、LPCOpenのようなバグは(今のところ)ありません。SDKとしてLegacyスタイルに慣れた8/16ビットマイコンユーザが使うのは問題なさそうです。

2点目は、NXP推薦開発環境でCode Bundleなのが、LPC8xxシリーズのみの点です。

他のARMマイコンは、LPCOpenかまたはMCUXpresso SDKが大半です。旧NXPマイコンは、LPCOpenまたはMCUXpresso SDK、旧FreescaleマイコンはMCUXpresso SDKが主流です。

LPC8xxシリーズのみ今後もCode Bundleにするのか、または、他の旧NXPマイコン同様LPCOpenになるのかは、ハッキリ言って判りません。

LPC8xxマイコンテンプレートの対処

現在LPCOpenライブラリを使いLPC812のみ対応中のLPC8xxマイコンテンプレートV2.1を今後どうするかの案としては、

  1. LPC812、LPC824ともにLPCOpenライブラリバグ解消を待って改版
  2. LPC812、LPC824ともにCode Bundleを使い改版
  3. LPC812は現状LPCOpen維持、LPC824は、Code Bundleを使い改版(中途半端)

いずれにするか、検討中です。決定には、もう少し時間が必要だと思っています。

ミスリード(Mislead)のお詫び

これまで弊社は、LPC8xxシリーズのSDKはLPCOpenと思い投稿してきました。この投稿で、読者の方に誤った開発方向へ導いた場合には、お詫び申し上げます。申し訳ございません。

LPC8xxテンプレートをご購入頂いた方のテンプレート本体は、C言語のみでライブラリは使っておりませんし、マイコンにも依存しません。ご購入者様は、他マイコンも含めて流用/活用はご自由です。

LPCOpenで開発された関数を、Code Bundleへ変えたとしても、テンプレート本体はそのまま使えます。

あとがき

Code Bundleは、ハードレジスタをユーザ開発ソフトで直接いじる20世紀マイコン開発スタイルです。21世紀の現在は、ハードウェアに薄皮を被せAPI経由で開発するスタイルに変わりました。メリットは、ハードが変わってもユーザ開発ソフト側変更が少なく、マイグレーションに有利です。

ARMコアのマイコンは、全てこの21世紀スタイル:ARMスタイルです。ARMがCMSISなどを発表しているのは、ARMコアに依存しないユーザ開発ソフトを、資産として活用することが目的です(CMSISはこちらの投稿を参照)。

マイコンRTOSがWindowsのようにハードアクセスを全面禁止にすることはあり得ませんので、20世紀スタイルでRTOS化しても問題ありません。が、スイッチマトリクスが気に入っているLPC8xxシリーズだけが20世紀スタイルを使い続けるとは思えません。つまり、Code Bundleは、NXPサポート体制が整うまでの暫定措置だと思います。

この混乱の原因が、QUALCOMMによるNXP買収に絡んでないことを祈っています。

QUALCOMMのNXP買収、EUで一歩前進

2018年1月19日、米QUALCOMMの蘭NXPセミコンダクター買収計画がEU(欧州連合)当局で承認の記事が日経電子版に掲載されました。残るのは、中国の独占禁止法当局の承認だけです。遅れていた買収成立が一歩前進しました。

QUALCOMMのNXP買収
QUALCOMMのNXP買収

BLEとThreadソフト開発者必見動画

IoT通信規格のBLE 4.2とThread(802.15.4)両方をサポートするNXP)Kinetis KW41Z搭載の評価ボードを使ったBEL4.2とThreadメッシュ接続の開発Video(タイトルが以下Lesson 1~10)を紹介します。

Kinetis KW41Z Video Lesson Contents
Kinetis KW41Z Video Lesson Contents

BLEやThreadソフト開発者必見のLessons

内容、質ともに優れたVideoでMCUXpressoとSDKの使い方も良く解ります。特に興味深い内容とその出所が以下です。

  1. Bluetooth ClassicとBluetooth Low Energyの本質的な違い(Lesson 3、3分ごろ)
  2. Bluetooth ClassicとBLE間を接続するBluetooth Smart Ready(Lesson 3、6分ごろ)
  3. BLE接続の具体例(Lesson 3、19分ごろ)
  4. BLE/Thread接続に必要な知識(Lesson 3, 6)
  5. Threadが生まれた背景(Lesson 6、2分ごろ)
  6. Cortex-M0+/48MHz、512MB ROM、128KB RAM、FreeRTOSで実現するBLE/Thread IoT端末(Lesson  5, 9, 10)

BLEやThreadに関する情報は多くありますが、ソフト開発者の立場からは、本Lessonsが最も要領よくポイントをまとめています。

Kinetis KW41Z

KINETIS KW MCU FAMILY BLOCK DIAGRAM
KINETIS KW MCU FAMILY BLOCK DIAGRAM

Kinetis KW41Zの評価ボードは、以下の2種(Digi-Key価格)です。

低価格で有名なFRDM評価ボードですが、さすがに両プロトコル対応のKW41Z搭載ボードとなると$100以上します。Videoで使っているR41Z-EVALは、約$60と安く入手できます。但し、Lesson 10のBLEとThreadメッシュ切り替え接続の動作確認を行うには、同時に3台の評価ボードが必要です。

ThreadのみサポートのKW21、BLEのみのKW31もありますが、無線規格が乱立していて、どれが本命かを見極めるのが困難な現状では、両プロトコルサポートのKW41が安全でしょう。

API for IoT

MCUXpressoとSDKを使って、BLEまたはThread通信機能を持つIoT端末を開発する際に、プロトコルのどの部分の変更/修正が必要で、それがソース上のどこにあるか、全体の開発手順などはVideoを観ると良く解ります。

BLE Protocol Stack
BLE Protocol Stack

また、LEDなどのGPIO制御を行うSDKデモソフトとIoT通信の並列処理は、FreeRTOSを使って実現していることも解ります。簡単なIoT端末なら、このデモソフトに、外部センサ値をAD変換し、その変換データをクラウドのサーバーへIoT経由で送信する機能を追加しさえすれば、直ぐに開発できそうです。
※簡単なIoT端末は後述

BLEやThreadは、IoT通信の有力な候補です。しかし、IoTの通信プロトコルが何になるにせよ、IoT通信向けのAPIが決まれば、あまり気にする必要がない、というのが全Lessonを通しての私の感想です。

その理由は、デモソフト実装済みのGPIO制御はそのまま使えますし、FreeRTOSを使っていますので、外部センサ入力を定期的にADCする処理(ADCスレッド)と、ADC変換データをIoT通信APIへ出力する処理(IoT出力スレッド)の2処理を追加開発すれば良いからです。

ADCスレッドは、IoT通信規格には無関係です。一方、IoT出力スレッドは、Uart出力と同様のIoT APIが使える(用意される)と思います。NXP)LPC8xxマイコンのUart APIの例で示すと、Chip_UART_SendBlocking()が、Chip_IoT_SendBlocking()に代わるイメージです。IoT API利用条件が初期設定で満たされれば、ユーザは、通信速度や、通信プロトコルを意識せずにIoT通信を使えるようになると思います。

*  *  *

IoT通信規格が不確定な状況で、少しでも早くIoTやRTOSに慣れるには、R41Z-EVALは良い評価ボードです。また、FreeRTOSを使えば、48MHz動作のCortex-M0+、512MB ROM、128KB RAMで簡単なIoT端末が開発できそうな見通しもこれらLessonは、与えてくれました。是非、ご自分でご覧になってください。

簡単なIoT端末のイメージ

データ入力とGPIO出力を行うMCU端末で、IoT無線通信機能を備える。通信セキュリティを確保できるAES-128などの機能も備え、対象機器から取得したデータを安全にクラウド内のサーバーへ送信する。
サーバーは、対象機器データを人工知能を使って予測分析し、結果を端末へ送信する。
端末は、受信結果を基にLEDなどのGPIO出力を行い、オペレータまたはロボットが対象機器メンテナンス作業の手助けをする。