トランプ米大統領、BroadcomのQualcomm 買収禁止を命令

トランプ米大統領は、米国時間3月12日、シンガポール)Broadcomによる米)Qualcomm 買収を、国家安全保障上の観点から禁止する大統領命令を出しました

まさか本ブログでトランプ米大統領の関連記事を投稿することになるとは、さらに、BroadcomのQualcomm 買収も即時かつ永久に放棄せよとは、まさかまさか(まさかの2乗)の展開です。

Broadcom、Qualcomm、NXP買収
Broadcom、Qualcomm、NXP買収

Wi-FiチップのBroadcomが、モバイルSoCのQualcomm を買収するとスマホ向け半導体最大手になる

ウィキペディアによるとBroadcomは、シンガポールではなく米国会社との記述もあります。

有線/無線のコンピュータネットワークおよび通信ネットワーク全般をカバーする通信向け半導体の大手Broadcomが、SoC:System on Chipでモバイルコントローラ大手のQualcomm を買収した場合には、Intel、Samsungに次ぐ3番手の半導体メーカとなり、スマホ向け半導体では業界最大手になります。

この買収劇が、トランプ米大統領命令により禁止されました(過去形で記述して良いものかは不明ですが、米大統領令ですので…)。
残るのは、米)Qualcommによるオランダ)NXP買収の、中国の独占禁止法当局の承認だけになりました。

NXP LPC111xテンプレートV2改版

ARMコア制御の入門マイコンとして適しているNXP LPC1114/5マイコンのテンプレートを改版しました。

このLPC111xテンプレートV2は、従来テンプレートの必須機能のみを実装したTiny(小さな)テンプレートの適用、最新開発環境MCUXpresso IDE(v10.1.1_606)での動作確認が改版目的です。

近日中に旧LPC111xテンプレートご購入者様で、無料アップグレード対象者様には、お知らせとLPC111xテンプレートV2の無償配布を行います。暫くお待ちください。

LPC1114とLPC1115の違い

NXP LPC111xテンプレートの対象マイコンは、ARM Cortex-M0コア50MHz動作のLPC1114(ROM/RAM=32KB/8KB)とLPC1115(ROM/RAM=64KB/8KB)です。

以前の投稿で紹介したNXPマイコンの推薦開発環境をLPC1114/5でフィルタしたものが下図です。

LPC1114 and LPC1115 Recommended Software
LPC1114 and LPC1115 Recommended Software

※赤線は、評価ボード搭載マイコン、青線は、単体購入可能マイコン

NXPのLPC1100シリーズは、LPC1110/11/12/13/14/15の6種の型番と、同じ型番でも低消費電力の技術進化によりLPC1100/1100L/1100XLの3つの世代があるので複雑です(通常→L→XLでより低消費電力)。

但し本ブログは、個人でも入手性が良く低価格、良い評価ボードもあるマイコンが対象です。このふるいにかけると、フィルタの下線を付けたLPC1114/302、消費電力LPC1100L搭載のNXP評価ボードLPCXpresso1114(秋月電子2000円)、デバイス単体では、DIP28ピンパッケージLPC1114/102、消費電力LPC1100L(400円)とSOP28ピンパッケージLPC1114/102、消費電力LPC1100L(190円)の3種類がそれぞれ秋月電子より購入できるので対象となります。
※LPC1114/102は、どちらもRAM=4KBで評価ボード搭載のLPC1114/302の8KBの半分に注意

LPC1115は、LPC1114のROMを2倍の64KBにし、電力消費を第3世代に進化させたマイコンです。NXP評価ボードのLPCXpresso1115には、LPC1115/303、消費電力LPC1100XLが搭載されています。
※型番/xxxの最後の数字が消費電力を示し、1が通常、2がL、3がXLを意味します。

LPCXpresso1115の入手性はあまり良くありません。しかし、開発環境MCUXpresso IDEでAvailable boardsに現れる評価ボードはLPCXpresso1115とLPCXpresso11C24のみで、LPCXpresso1114はありません。

MCUXpresso IDE Available Boards
MCUXpresso IDE Available Boards

従って、入手性が良いLPCXpresso1114評価ボードで新プロジェクトを作るには、評価ボードからでなく、Preinstalled MCUsからLPC1114/302を選択する必要があります。

LPCXpresso1114のMCUXpresso新規プロジェクト作成方法

Select LPC1114/302
Select LPC1114/302

Preinstalled MCUsから評価ボード搭載のLPC1114/302選択後>Next>LPCOpen – C Project>Project name追記と進み、Import…をクリックします。

Click Import...
Click Import…

ArchiveでLPCOpenからlpcopen_v2_00a_lpcxpresso_nxp_lpcxpresso_11c24.zipを選択しNextをクリックします。

Import lpcopen_v2_00a_lpcxpresso_nxp_lpcxpresso_11c24.zip
Import lpcopen_v2_00a_lpcxpresso_nxp_lpcxpresso_11c24.zip

使用ライブラリにlpc_chip_11cxx_libとnxp_lpcxpresso_11c24_board_libを選択後、ダイアログに従っていけば評価ボードLPCXpresso1114/302上に新プロジェクトが作成できます。

LPCXpresso1114とLPCXpresso1115評価ボードの回路図は全く同じです。違いは、搭載ターゲットマイコンのみでIO割付も同じ、PLC-Linkと呼ぶ評価ボード付属デバッガも同じです。またImportして使用するライブラリも同じです。

ならば、Available boards のLPCXpresso1115を選択して新プロジェクトを作成し、LPC1114評価ボードへダウンロードも可能だと思われるかもしれません。しかし、これはデバッガ接続時にエラーが発生します。

MCUXpressoの右下にターゲットマイコンNXP LPC1114/302が示されており、これ以外へはデバッガ接続ができない仕組みになっています。

Target NXP LPC1114/302
Target NXP LPC1114/302

このため、同一ソースコード、使用ライブラリも同じであっても、ターゲット毎にプロジェクト作成が必要です。逆に、LPC1114評価ボードで動作確認したソースコードでライブラリも同じなら、ターゲットさえ変えれば、LPC1115評価ボードでも動作すると言えます。違いは、ROM容量のみだからです。

評価ボード搭載のLPC1115/303とLPC1114/302の機能差はROM容量以外にもありますが、LPC111xテンプレートの応用例は、この差が生じる機能は使用しておりません。

従って、テンプレート応用例のシンプルテンプレート/Baseboardテンプレートを、LPC1114評価ボード、LPC1115評価ボードそれぞれに提供します。LPC111xテンプレートProject Explorerの様子が下図です。

LPC111xTemplate Project Explorer
LPC111xTemplate Project Explorer

LPC1100シリーズの位置づけと開発環境の良さ

NXP ARMコアエントリレベルのLPCマイコンラインナップを、LPC Cortex-M microcontrollers — Discover the differenceより抜粋しました。

LPC1100 Series (Source:LPC Cortex-M microcontrollers — Discover the difference)
LPC1100 Series (Source:LPC Cortex-M microcontrollers — Discover the difference)

LPC1100シリーズは、最も基本的で適用範囲も広いCortex-M0コアマイコンです。電力効率は、LPC800シリーズのCortex-M0+に及びませんが、低電力技術の進化でCortex-M0+に近い低電力動作も可能です。Cortex-M0とM0+の機能差は、コチラの投稿も参照してください。

また、LPCOpenライブラリもLPC8xxに比べ安定(≒バグ無し)しています。DIPやSOPパッケージの入手が容易で低価格、手実装も可能です。LPCXpresso1114/5評価ボードとLPC111xテンプレートを使えば、ARM Cortex-M0マイコンの早期習得とプロトタイピング開発ができると思います。

評価ボードの半分は、切り離して単体デバッガとしても使えます。デバッガとターゲットの接続は、ARMコア標準のSWDインタフェースなので、LPCマイコン以外の他社ARMコアにも使うことができます。100mAまでの電力供給と、実質4本の接続でデバッグとオブジェクトダウンロードが可能です。

LPC111xテンプレートV2のまとめ

改版したNXP LPC111xマイコンテンプレートV2構成を示します。

テンプレート名 対象マイコン(ベンダ/コア) テンプレート応用例 評価ボード:動作確認ハードウェア
LPC111xテンプレートV2(LPCOpen v2.00a利用) LPC1114(NXP/Cortex-M0) ・シンプルテンプレート
・Baseboardテンプレート
LPCXpresso1114(LPC1114/302)
+ Baseboard
LPC1115(NXP/Cortex-M0) ・シンプルテンプレート
・Baseboardテンプレート
LPCXpresso1115(LPC1115/303)
+ Baseboard

ARM Cortex-M0コアのLPC1114/302(ROM/RAM=32KB/8KB)実装のLPCXpresso1114評価ボードは、低価格で入手性良く、開発環境MCUXpressoも他社EclipseベースIDEと比べ使い勝手良く、ライブラリも安定しています。また、評価ボードとBaseboardを接続すれば、色々な周辺回路制御も手軽に学べます。

今回の改版でテンプレート本体は、より解り易く、利用し易くなりました。テンプレートを使うと、複数のサンプルソフトをそのまま流用した並列処理が簡単に実現できます。

テンプレートの特徴や仕様は、LPC111xテンプレートサイトを、使い方などはサイトのテンプレート関連情報を参照してください。

ARMコア制御の入門用として適しているLPC111xテンプレートとLPC1114評価ボードは、Cortex-M0の習得、プロトタイピング開発のお勧めキットです。

STM32マイコンへ深層学習実装、「走る」「歩く」動作判断

日刊工業新聞3月7日電子版掲載の日本で2桁成長を狙っているSTマイクロエレクトロニクス、このSTMが、STM32シリーズマイコンへディープニューラルネットワーク:DNN(深層学習)を実装し、マイコンの「走る」「歩く」状態を正確に判断するデモを展示しました。

STM32F7(Cortex-M7)搭載時計でユーザ動作を正確に判断(記事より)
STM32F7(Cortex-M7)搭載時計でユーザ動作を正確に判断(記事より)

マイコンDNN実装の3課題と解決ツール

記事によるとSTM32マイコンへDNNを実装する時の3つの課題、

  • マイコン実装のためのコードサイズ実現
  • ソフトウェア最適化
  • マイコンとクラウドの相互運用性

解決のため、STM32CubeMx.AI(現在αバージョンで2018年後半リリース予定)ツールを使うそうです。

このSTM32CubeMx.AIは、STM32CubeMXの機能拡張版だと思います。
現在のSTM32CubeMXも、全てのSTM32シリーズで共通に使えるAPIを自動生成します(STM32CubeMXのTipsはコチラの投稿も参照)。機種共通API生成とソフトウェア最適化は、既にSTM32CubeMXでも実現済みです。

従って、弊社STM32Fxテンプレートも、STM32CubeMXを使えばSTM32シリーズ全般にテンプレートが適用できるハズです(STM32F0とSTM32F1のみ実機検証済み。APIが共通なので機種差は、インクルードするヘッダーファイルなど数点のみ。他機種は未検証です念のため…)。

※STM32マイコンの開発環境は、弊社ブログのカテゴリで、“STM32マイコン”をクリックすると投稿がカテゴライズされ読みやすくなります。投稿ページの初めの方に開発環境構築方法などの投稿が集まっています。

STM32マイコン重点分野

電子版によるとSTM32マイコンは、自動車、産業用、スマートホームなどのIoT分野を重点にして市場拡大を狙うそうです。STM32マイコンに、上記クラウドAI技術が適用され、その開発環境の使い勝手も良いとなると、かなり期待ができます。

IoTマイコンとセキュリティ

NXPは、2018年3月2日Bluetooth 5/Thread/Zigbee 3.0サポートのコンシューマ/産業IoT向けセキュリティ強化ARMディアルコア(M4とM0+)搭載のKinetis K32W0x MCUを発表しました。

Kinetis K32W0x Block Diagram
Kinetis K32W0x Block Diagram

この新製品は、以前投稿したCypressのPSoC 6:Cortex-M4とCortex-M0+のディアルコア、セキュリティ強化、BLE 5サポートのCypress PSoC 6によく似た製品です。

Cypressに続きNXPもARMディアルコアを採用したことで、強固なセキュリティが必須のIoTマイコンは、シングルコアよりもディアルコア搭載が標準になりそうです。IoTマイコンのセキュリティ関連情報を調査し対処方法を検討します。

PSoC Creator 4.2

PSoC 6搭載評価ボードCY8CKIT-062-BLEPSoC Creator動画では、デュアルコアのIDEでの扱い方やデバッグ方法などがいまいち不明でしたが、最新版PSoC Creator 4.2(2018年2月13日)で正式にPSoC 6がサポートされました。コアにより別々のフォルダにソースコードを作成し、デバッガはどちらかの一方のコアに接続します。

Cypress PSoC Creator 4.2 for PSoC 6 (Source, Creator Release Notes)
Cypress PSoC Creator 4.2 for PSoC 6 (Source, Creator Release Notes)

各コアの役割や機能配分が明確でないと、シングルコアよりもデバッグが大変になりそうです。

色々なセキュリティ強化方法

今年初めから騒がれた投機実行機能の脆弱性起因の対策は、まだ収束していません。Cortex-M系コアはこの脆弱性に関してはセーフでしたが、後追いが宿命のセキュリティ対策には終わりがありません。組込みマイコンにも、常時アップデートができるOTA:Over The Air更新機能が必須になるかもしれません。

Windows更新でも失敗があることを考えると、このOTA機能はリスクが高く、マイコン処理能力や導入コストもかなり必要です。

一方Maximは、セキュア認証専用ICを1ドル未満で提供することを発表しました。言わばMCU固有の指紋を使うことで安価にセキュリティ強化が可能です。評価キットも用意されています。

NXPもA71CHで同様のICと開発キットを用意しています。

少し古い資料ですが2012年11月発表の、“つながる時代のセキュリティ、チップと組み込みOSの連携で守る”を読むと、セキュアブート、効率的な暗号化、仮想化を使ったデータ保護サブシステムをセキュアに分離する技術など、半導体チップで提供されるセキュリティ機能を最大限に活用すべきだとの指針が示されています。

MCUセキュリティ対策の費用対効果

2年から数年でハードウェアが更新される個人情報満載のスマホやユーザ自身がセキュリティ対策を行うパソコンと、組込みマイコン:MCUのセキュリティ対策は、守るべき情報内容、管理運営方法が大きく異なります。

IoTマイコンのソフトウェアやハードウェア開発能力だけでなく、導入するセキュリティ対策の費用対効果を見極めるスキルも必要になりそうです。本命がハッカー次第で変わるなど、セキュリティは厄介で面倒な技術です。

NXP LPC8xxテンプレートV2.5改版

小ROM/RAM向けに従来マイコンテンプレートの必須機能のみを実装したTiny(小さな)テンプレートは、テンプレート本体処理が解り易いと好評です。ルネサスRL78/G10やSTM32Fxテンプレートには既に適用済みで、販売各マイコンテンプレートの改版を機に、順次この好評なTinyテンプレートへ変更したいと考えています。

LPC8xxテンプレートV2.5は、Tinyテンプレートの適用、対象マイコンの追加、シールドテンプレートの開発予告、この3つを目的に改版しました。

RL78/G10(ROM/RAM=4KB/512B または 2KB/256B)とLPC810(ROM/RAM=4KB/1KB)

小ROM/RAMで本ブログ対象のマイコンは、ルネサスRL78/G10とNXPのLPC810です。
※RL78/G10へ適用済みのTinyテンプレートは、コチラの投稿を参照してください。

16ビットのルネサスS1コアRL78/G10と違い、LPC810は僅か8ピンDIPパッケージですが、中身は32ビットARM Cortex-M0+コアですので、RL78/G1xのように500B以下でテンプレート実装はできません。

テンプレート本体は同じ単純なC言語ですが、機能させるための必須ライブラリ量が、ルネサス独自開発S1コアとARM Cortex-M0+コアでは大きく異なるからです。

そこで、LPC810テンプレートに限り前回投稿のコンパイラ最適化を“最適化なし(O0)”から“1段階最適化(O1)”へ変更したところLPCOpenライブラリv2.15利用debug configuration時、ROM=2460B、RAM=12Bに収めることができました(テンプレート応用例としてWDT:ウオッチドックタイマ制御は実装)。

LPC810 Template by LPCOpen v2.15 (Optimize -O1)
LPC810 Template by LPCOpen v2.15 (Optimize -O1)

残りのROM1.6KB、RAM1KBへユーザ処理を追加すればアプリケーション開発が可能です。この残り量でも、最適化(O1)の結果、結構なユーザ処理を記述できます。

LPC810は、入手性の良いNXP評価ボードがありません。そこでLPC810テンプレートのみは、上記1段最適化でコンパイル成功したLPC810テンプレートプロジェクトを提供します。LPC810独自開発ボードへの実装方法は、前回投稿を参照してください。

LPCOpenライブラリv2.15採用理由

LPC8xxテンプレートV2.5では、LPCOpenライブラリv2.15(2015/01/08)を用いました。主な採用理由は、2つです。勿論これ以外の開発環境は、最新版MCUXpresso IDE(v10.1.1_606)、Windows 10(1709)です。

  1. LPCOpenライブラリv2.15の方が、同じソースコードでもコンパイル出力が小さい
  2. 原因不明のリンカーエラーが発生する時がある

先に示したLPC810ソースコードでLPCOpenライブラリのみv2.19に変更した最適化結果が、ROM=3024B、RAM=16Bです。

LPC810 Template by LPCOpen v2.19 (Optimize -O1)
LPC810 Template by LPCOpen v2.19 (Optimize -O1)

また、v2.19では、v2.15でコンパイル成功するソースコードでも、下記原因不明のリンカーエラーが発生することがあります。

LPCOpen v2.19 Linker Error
LPCOpen v2.19 Linker Error

LPCOpenライブラリv2.19起因のこの1/2の現象は、同じソースコードでv2.15と比較しないと判明しません。

LPC8xxマイコン開発でつまずいている開発者の方は、是非LPCOpenライブラリv2.15で確かめてください。※LPCOpenライブラリは、v3系が最新版ですが、v2.9からのバグは継続していると思います。

LPC824(ROM/RAM=32KB/8KB)テンプレート応用例はシンプルテンプレート

LPC824は、十分なROM/RAM=32KB/8KBがありますので、MCUXpressoデフォルトの“コンパイラ最適化なし(O0)”でテンプレート実装ができます。

テンプレート応用例として、NXPのLPCXpresso824-MAX評価ボード実装の3色LEDとユーザSWで動作するシンプルテンプレートを提供します。Baseboardテンプレートは、LPCOpenライブラリバグのため、今回は提供を見合わせます。
※LPC824のLPCOpenライブラリバグに関してはコチラの投稿を参照してください。

LPCXpresso824-MAXは、Arduinoシールドコネクタを実装しています。ここへ今後のマイコン開発で必要性が高いSPIインタフェースのシールドを使ったテンプレート応用例の方が、Baseboardで応用例を示すより実用的だと考えています。これが、今回LPC824をシンプルテンプレートのみで見切り発車的に発売するもう1つの理由です。シールドテンプレートは、次版で提供予定です。

NXP LPC8xxマイコンテンプレートV2.5のまとめ

V2.5改版のLPC8xxマイコンテンプレート構成一覧を示します。

テンプレート名 対象マイコン(ベンダ/コア) テンプレート応用例 評価ボード:動作確認ハードウェア
LPC8xxテンプレートV2.5
(LPCOpen v2.15利用)
LPC810(NXP/Cortex-M0+) WDT実装(1段最適化プロジェクト) なし(テンプレートプロジェクト提供)
LPC812(NXP/Cortex-M0+) シンプルテンプレート
Baseboardテンプレート
LPCXpresso812
+ Baseboard
LPC824(NXP/Cortex-M0+) シンプルテンプレート
(シールドテンプレート※次版予定)
LPCXpresso824-MAX
(+SPIシールドテンプレート※次版予定)

前版V2.1と比べると、以下の特徴があります。※V2.2~2.4は、欠番です。念のため…。

  • 対象マイコンにLPC810とLPC824が加わり、LPC8xxテンプレートらしくなった(テンプレート本体はLPC8xxで共通)
  • テンプレート本体処理が解り易く、ご購入者様の応用や変更が容易となった
  • LPC824はテンプレート応用例がシンプルテンプレートのみだが、LPCXpresso824-MAX評価ボード単独で全ての動作確認可能
  • 今後LPCXpresso824-MAXのようなArduinoシールドコネクタ付き評価ボードは、SPIインタフェースシールドで機能拡張予定(従来はBaseboard機能拡張)

あとがき

マイコン内蔵周辺回路とGPIOをマトリクススイッチで接続するLPC8xxシリーズマイコンの狙いは、8/16ビットマイコンのARM32ビット置換え市場です。

そのためか、または前述のLPCOpenライブラリバグのためかは不明ですが、LPCOpenライブラリ利用よりもレジスタ直接アクセス方式のCode Bundleライブラリ利用がNXP推薦(SDK)です。

テンプレート本体は、利用ライブラリに依存しないC言語開発ですので、どのライブラリを利用しても適用可能です。しかし弊社は、他のCortex-Mシリーズコアと同様、LPC8xxシリーズもLPCOpenライブラリ利用が本来の開発姿だと思いLPCOpenライブラリのバグが取れるのを昨年から待っていました。

今回LPC8xxテンプレートV2.5への改版に際し、このバグ解消を待つよりも、LPC810とLPC824への対象マイコンを増やすこと、高速なSPIインタフェース利用テンプレートの開発予告の方が重要だと判断しました。

ベンダ提供のマイコン評価ボードは、Arduinoシールドコネクタ付きが一般的になりました。弊社も従来のBaseboard応用例よりも、SPIシールドを利用したテンプレート応用例の提供へ移行します。SPIインタフェースの重要性はマイコン技術動向(SPI/I2C)コチラの投稿を参照ください。

近日中にLPC8xxテンプレートご購入者様で、無料アップグレード対象者様には、お知らせとLPC8xxテンプレートV2.5の無償配布を行います。暫くお待ちください。

独自開発ボードのMCUXpressoプロジェクト作成方法

今回はNXP評価ボード以外の“独自開発マイコンボード”を使って、MCUXpressoの新規プロジェクトを作成する方法を、LPC810を例に示します。

New Project by Available boards
New Project by Available boards

上図NXP評価ボードを使ったMCUXpressoの新規プロジェクト作成は簡単です。現在LPC8xxマイコンには、6種のNXP評価ボードがあり、これらの中から使用ボード選択し、Nextクリックでダイアログに従っていけば新規プロジェクトが作成できます。

Preistalled MCUsプロジェクト作成

一方、LPC810(ROM/RAM=4KB/1KB)で独自開発したマイコンボードへ新規プロジェクトを作成する場合は、Preinstalled MCUsからLPC810を選びます。

New Project by Preinstalled MCUs
New Project by Preinstalled MCUs

Nextクリック>LPCOpen – C Project>Project name追記>Import>BrowseでLPCOpenライブラリをImportします(最新版LPCOpenライブラリはv3.02ですが、ここではMCUXpresso IDE v10.1.1 にプリインスト済みのv2.19を使っています)。

Import LPCOpen Library
Import LPCOpen Library

Importするのは、lpc_chip_8xx (lpc_chip_8xx/)です。lpc_board_nxp_lpcxpresso812は、NXP評価ボード利用時、lpc_chip_8xx関数を利用したマクロ関数です(マクロ関数は後述)。

インポートが完了するとNew Projectダイアログに戻ります。ここでLPCOpen Chip Library Projectのlpc_chip_8xx_libの_lib部分を削除すると、Nextボタンが“有効”になるのでクリックします。ポイントは、_libを削除することです。削除しないと、Nextは無効のままで先に進めません。

Import lpc_chip_8xx
Import lpc_chip_8xx

この後は、デフォルト設定のままでNextを何回かクリックすれば、独自開発ボードでの新規プロジェクトが作成できます。

なおLPC810は、ROM4KB、RAM1KBと極少ですのでデフォルトで使用となっているMTBやCRPは未使用に変更すると良いでしょう。

ちなみに、MTB、CRP未使用でLPC810へ弊社LPC8xxマイコンテンプレートのみを実装した時のメモリ使用量は、ROM88%、RAM2%です(debug configuration時)。これでは、残り部分へユーザ処理を追加するとすぐに容量オーバーになります。

対策は、コンパイラ最適化をデフォルトの“最適化なし(O0)”から“、1段階最適化(O1)”へ変更することです。
Project >Properties>C/C++ Build>Settings>Tool Settings>Optimization>Optimization Levelで最適化レベルが変更できます。O1レベルでも、かなりの使用量空きが確保できます。

Optimize for Debug
Optimize for Debug

但し、最適化には副作用も伴います。変数にvolatile宣言を付記するなどして、ツールが行う勝手な最適化への対策をしましょう。対策の詳細は、コチラなどを参照してください。

マクロ関数

LPCOpen Library Stack
LPCOpen Library Stack

LPCOpenライブラリは、層構成になっています。BOARD layerは、CHIP layerを使って上位の各ExampleへAPIを提供します。例えば、LPC812評価ボード実装済みのLED出力の初期化関数:Board_LED_Init()が、chip layerのChip_GPIO_…()を使っているなどです。

Macro Function
Macro Function

本投稿では、Board_LED_Init()をマクロ関数と呼びます。NXP評価ボードは、NXPから多くのマクロ関数が提供されますが、独自開発ボードでは、これらも必要に応じて自作する必要があります。

また、自動生成ソースコードにインクルードされるファイルも、NXP評価ボードでは無いためboard.hからchip.hに代わっていることにも注意しておきましょう。

MCUXpresso Generated Source
MCUXpresso Generated Source

ベンダ提供評価ボード活用の独自開発ボード

独自開発マイコンボードと、NXP評価ボードのIO割付が同じならば、MCUXpressoの新規プロジェクト作成時に本投稿で示したような神経を使う必要はありません。多くのマクロ関数もそのまま利用できます。独自開発ボードの新規プロジェクト作成でも、NXP評価ボードと全く同じになるからです。

独自にマイコンボードを開発する前に、ベンダ提供の評価ボードIO割付を調査し、独自開発へ適用できるか否かの検討をすることをお勧めします。

ベンダ提供評価ボードは、標準的なIO割付ですが、最も応用範囲が広い割付とも言えます。さらに、上述のようにソフトウェア開発、新規プロジェクト作成に対しても多くのメリットがあるのがその理由です。

マイコンソフトウェア開発の基礎知識と開発方法、配布開始

1月末に3回に分けて投稿した「マイコンソフトウェア開発の基礎知識と開発方法」を1つのpdf資料にまとめました。弊社マイコンテンプレートサイトのアプリケーション開発手順のページから、どなたでも無料ダウンロードが可能です。

Sample Software First and MCU Template
Sample Software First and MCU Template

この資料は、Sample Software Firstについて説明しています。マイコンテンプレートを使ったアプリケーション開発手順と合わせて読んで頂くと、マイコンソフトウェアの開発方法がより解り易くなると思います。

今後、ご購入頂いたマイコンテンプレートの付属資料としてこの資料も添付する予定です。

マイコンテンプレート購入検討中の方、既に購入された方でも、ご活用ください。

NXPとルネサスのMCU開発動向

NXPとルネサス、両社幹部が語ったMCU開発動向記事から、弊社ブログARM Cortex-Mシリーズ、16ビットMCU RL78関連部分をピックアップしました。動向記事は下記です。

NXPのMCU開発動向

記事によると車載MCUは、製品群をS32 Automotive PlatformでARMアーキテクチャ(Cortex-A、Cortex-R、 Cortex-M)に全て統一し、基本的なペリフェラル、メモリインタフェースを共通化、S32デバイス間ならソフトウェアの90%を再利用できるそうです。

同時にS32 MCUは、自動車用機能安全規格である「ASIL-D」に対応し高度セキュリティを担保、また完全なOTA(Over the Air)機能もサポート予定です(OTAはコチラの投稿参照)。

S32製品は、2018年1Qサンプル出荷、2019年から量産予定です。

Common Hardware Architecture Platform (Source: NXP)
Common Hardware Architecture Platform (Source: NXP)

この車載MCU開発動向は、本ブログ対象の家庭や個人向けCortex-MコアMCUへも影響を与えると思います。NXPはFreescale買収後、LPCとKinetisの2つのCortex-Mシリーズ製品を提供中です。

ARM Cortex-M Core Kinetis and LPC
ARM Cortex-M Core Kinetis and LPC

S32製品の強み、ハードウェア共通化、ソフトウェア再利用、セキュリティ確保、OTAは、そのまま現状NXPの 2製品並立Cortex-Mシリーズへも適用される可能性が高いと思います。その方がNXP、新規ユーザ双方にとって開発リソースを集中し易いからです(現行ユーザには多少インパクトがありますが、Cortex-Mコアは同じなので、SDKなどが変わるかも?!しれません…)。

ペリフェラルが共通化されれば、サンプルソフトも同じになるでしょう。ソフトウェア90%再利用は、ライブラリ充実化も見込めます。差分の10%は、Cortex-コア差、セキュリティレベル差、応用範囲などになる可能性があり、期待できそうです。

ルネサスのMCU開発動向

ルネサスは、2018年夏発売予定のRZファミリで、組込みAIによる推論モデル処理能力を10倍、2019年末までに更に10倍、2021年で10倍にし、推論処理能力を1000倍にするそうです。このために動的に再構成可能なプロセサ技術「DRP(Dynamically Reconfigurable Processor)」を汎用MCU製品へ取り込んでいくそうです。

RZファミリ:現状ARM Cortex-A9 400MHz採用の家電、カーオーディオなどが対象のMCU。

Cortex-AコアのRZファミリとRL78の比較(Source: Runesas)
Cortex-AコアのRZファミリとRL78の比較(Source: Runesas)

能力向上したAI推論により、振動などの画像データを扱えるようになり、さらにはそのフレームレートも高められ、例えば、熟練工のノウハウをエンドポイントで自動化できるようになる。1000倍ともなれば、現在はエンドポイントでは難しいとされる学習も行えるようになるそうです。

産業機器分野では、自動化やロボット化の実現に関わる異常検知、予知保全、認知検査などにAI処理能力を適用予定です。

1月14日投稿のルネサスe2 studioのAI利用無償プラグインで開発環境を提供しますが、弊社対象のRL78ファミリでどの様に実現されるかは不明です。

AI処理能力を1000倍化(Source: Runesas)
AI処理能力を1000倍化(Source: Runesas)

正常進化のNXPと差別化のルネサス

NXP、ルネサスともにARMコアMCUの開発動向は似ています。ルネサス幹部が、汎用MCU統括のため、あえて産業分野にフォーカスして語っただけと思います。

差分は、NXPがARMアーキテクチャの正常進化とも言えるソフトウェア資産の共通化を全面に推しているのに対し、ルネサスは、差別化DPR技術で推論機能の1000倍化を目指す点です。
※正常進化の根拠は、コチラの投稿のCMSIS参照

この差別化がガラパゴスになるのか、それとも光る技術になるか、今年夏頃の新製品RZファミリに注目します。

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買収

マイコンソフト開発の基礎知識と初心者、中級者向け開発方法(最終回)

前回までで初心者、中級者向けマイコンソフトの基礎知識と開発方法に、俯瞰視野でサンプルソフトを選び、サンプルソフト初期設定とループ内処理をライブラリとして評価ボードで動作確認しながら開発するサンプルソフトファーストの方法を述べました。

この方法は、サンプルソフトをジグソーパズルのピースとし、各ピースを弊社マイコンテンプレートへ入れさえすれば開発できるので、楽しくラクにマイコンソフトウェア開発ができます。

サンプルソフトを組合せるマイコンソフトウェア開発
サンプルソフトを組合せるマイコンソフトウェア開発

日本人は、サンプルソフトのコメントや概要記述の英語が苦手です。最終回は、ソフトウェアに使われる英語、特にサンプルソフト英語の扱い方を示し、本開発方法を総括します。

マイコンサンプルソフトの英語コメントは重要

初期設定+無限ループ内の1周辺回路制御という構造:フォーマットが決まっているマイコンサンプルソフトは、英語圏開発者によるものが殆どです。

彼ら彼女らにとって母国語英語ベースのC言語サンプルソフトは、ソースコードだけでも理解に支障はありません。また、関数をモニタ1画面(80字x 25行)以内の行数で記述する傾向もあります。ページスクロールせずに関数全体が見渡せるからです。

C関数の行数
C関数の行数

このような英語圏開発者があえて追記するコメントは、重要事項のみです。数行にまたがるコメントならなおさらです。つまり、なぜコメントしているかを理解することが大切です。といってもソースコードのコメント英語は、解り難いのも事実です。

英語コメントはブラウザ翻訳で日本語化

ブラウザアドレス窓に「翻訳」と入力すると、ブラウザ上で翻訳ができます。長い数行の英文でも瞬時に日本語になります。

ブラウザ翻訳
ブラウザ翻訳

サンプルソフトの英語コメントが解り難い時は、ブラウザ翻訳を使い日本語で読むと内容理解に効果的です。

マイコンソフト開発の基礎知識と初心者、中級者向け開発方法(総括)

従来のマイコンソフトウェア開発は、マイコンデータシートなど理解が先、次に理解した情報のプログラミングという順番でした。この方法は正攻法ですが、初心者、中級開発者には、限られた開発期間で理解対象が多いため開発障壁が高く、プログラミングの時間も相対的に短くなります。

マイコン応用製品の早期開発には、プログラミングを先にする方法へ見直すことが必要です。

それには、初心者、中級開発者が元々持つ俯瞰視野とサンプルソフト、ライブラリ、評価ボード、ブラウザ翻訳などの既存資産を上手く利用すれば良いのです。Arduinoシールドを使えば評価ボードへの機能追加も簡単で、製品版に近い開発環境でのプログラミングも可能です。

本投稿は、初心者、中級者向けのマイコンソフト開発の基礎知識として、サンプルソフト資産が多数あること、多くのサンプルの中から対象を絞り、一種のライブラリとして動作確認しながらソフト開発をするサンプルソフトファーストの方法を示しました。

IoT時代は、RTOSやセキュリティ知識など、より多くの情報を取り込んだマイコンソフトウェア開発になります。個々の情報の相対的な重要性さえ理解していれば、情報内容の理解よりも開発するソフトウェアへ組込む能力の比重が、ますます高まるでしょう。

開発者がこだわるべきは、短い期間内で開発するソフトウェア出力です。情報理解は、開発後でもOKです。