MCUXpresso IDE v11をLPC845 Breakout boardで試す

まとめ

NXPのMCUXpresso IDE v11.0.0 [Build 2516] [2019-06-05]を使い、LPC845の評価ボードLPC845 Breakout boardの動作を確認し、サンプルプロジェクト赤LED点滅を緑LEDへ簡単に変更できる、SDK:Software Development Kitメリットを示しました。

LPCOpenライブラリなどを使った旧IDEに比べ、SDKを使うMCUXpresso IDE v11は、より早く簡単にソフトウェア開発が可能です。また、IDE更新とSDK更新が別々なため、常に最新ドライバ、BSP:Board Support Packageでの開発ができます。これもSDKメリットの1つです。

SDKは、ソフトウェア開発速度を上げる専用ライブラリ集です。MCUXpresso IDE v11のSDKを習得し、効率的なソフトウェア開発に慣れる必要があります。
これには、実際に評価ボード専用SDKを作成し、サンプルプロジェクトへ変更/修正を加え、SDKメリットを実感するのが早道です。本稿で用いたLPC845 Breakout boardは、SDK習得に好適です。

LPC8xxをアップグレートしたLPC845(64KB Flash、16KB RAM)評価ボード:LPC845 Breakout boardは、タッチパッド+デバッガ付きで低価格(¥697)、少サイズ(65x18mm)です。このサイズならそのまま装置へ実装も容易です。現場での短時間制御系アップデートや修理交換などに応用できます。

LPC845 Breakout board

LPC845 Breakout board
LPC845 Breakout board(出典:LPC84X MCU TECHNICAL OVERVIEWへ加筆)

LPC8xxシリーズは、アップグレートしたLPC84xとコストダウンしたLPC80xの2方向へ発展しました(関連投稿:NFCを使うLPC8N04のOTA)。LPC845評価ボード:LPC845 Breakout board (Cortex-M0+/30MHz)を入手しましたので、最新のLPCXpresso IDE v11を使って動作確認します。

LPCXpresso IDE v11.0.0 [2019-06-05]

最新LPCXpresso IDEは、v11.0.0 [2019-06-05]です。旧IDEからSDK:Software Develipment Kit追加、Pin設定方法が変わりました。既に旧IDEを使い慣れた方は、SDK活用の新LPCXpresso IDE v11に少し驚きを感じると思います。

LPCXpresso IDE v11ダウンロードとインストール

LPCXpresso IDE v11のダウンロードとインストールは、普通のPCアプリケーションと同じです。旧IDEではインストール後、アクティベーション手順が必要でしたが、v11は不要です。

また、デフォルトではプログラム/workspace共に専用フォルダ:MCUXpressoIDE_11.0.0_2516へ展開されます。つまり、旧IDEと共存します。ストレージ使用量は多くなりますが、共存するので安心して新旧IDEを試すことができます。

インストール後、Help>Check for Updatesを実行しIDEの更新有無を確認します。

また、最初のMCUXpresso IDE v11起動時にセキュリティソフトが警告を出すことがあります。お使いのセキュリティソフトに応じて対応してください(筆者Windows 10 Pro 1903のAvastは警告を出しましたので、例外追加で対応しました)。

LPCXprsso IDE v11インストール起動画面
LPCXprsso IDE v11インストール後、最初の起動画面

SDK Builder

SDKは、周辺回路ドライバ、サンプルプロジェクト、評価ボードサポートパッケージ:BSPなどを含む開発支援ツールです(SDKユーザガイドはコチラ)。インストールしたMCUXpresso IDEとは別に、ネット上のSDK BuilderでLPC845 Breakout board専用SDKを作成します(要ログイン)。

SDK BuilderのSelect Development Boardをクリックし、LPC845BREKOUTを選択します。後は、Build MCUXpresso SDKをクリックすると、作成したSDKの圧縮ファイル:SDK_2.6.0_LPC845BREAKOUT.zipがダウンロードされます(2.6.0は版数)。
※評価ボードによっては、Amazon-FreeRTOS、Azure IoTなどのミドルウェアもSDKへ追加可能です。

SDK設定

ダウンロードしたSDK圧縮ファイルを、LPCXpresso IDEのInstalled SDKsビューへドラッグ&ドロップするだけでSDK設定は完了です。

LPC845 Breakout boardの赤LED点滅動作

SDKにはLPC845 Breakout boardの赤LED点滅させる、いわゆるLチカサンプルプロジェクトがあります。このLチカソフトで評価ボードの動作確認をします。

IDEのQuickstart Panelビュー、Import SDK example(s)…をクリックします。Lpc845breakoutを選択後Nextをクリックします。Examplesのdemo_appsを開くとled_blinkyが現れます。これがLチカサンプルです。

Led_blinkyに☑を入れFinishをクリックすると、workspace内にlpc845breakouty_led_blinkyプロジェクトが展開されます。

LPC845 Breakout boardのLED点滅サンプルプロジェクトのインポート
LPC845 Breakout boardのLED点滅サンプルプロジェクトのインポート

何も変更せずに、Quickstart PanelビューのBuildをクリックするとコンパイルが成功します。評価ボードをPCと接続しDebugのクリックでCMSIS-DAPプローブを自動認識し、デバッグモード画面へ変わります。

後は実行などで赤LEDが1秒毎に点滅する動作が確認できます。

SDKサンプルプロジェクトそのものの動作確認は、以上のように簡単です。SDKのメリットは、プロジェクト変更や機能追加が簡単にできることです。例を次に示します。

LPC845 Breakout boardの赤→緑LED点滅の変更

赤LEDへの制御を緑LEDへ変更するには、IDEをDevelop画面からPin画面へ切替えます。切替は、Open Pinsクリック、またはIDE右上のデバイスアイコンのクリックどちらでもOKです。

LED_LED点滅からGREEN_LED点滅変更のPin画面
LED_LED点滅からGREEN_LED点滅変更のPin画面

Pin画面は、プロジェクト使用中のピン名、周辺回路などがハイライト表示されます。

lpc845breakouty_led_blinkyプロジェクトの場合は、PIO1_2とGPIOで、IdentifierにLED_REDとあります。Identifireは、ソースコード中で使えるマクロです。LED_GREENやLED_BLUEが既にあるのも解ります。このように評価ボード実装済みのハードウエアが、あらかじめSDKで定義済みです。

赤LED→緑LED変更は、Pin11のLED_GREENに☑を入れ、表示されるPIO1_0選択肢からデフォルトのGPIO,PIO_1_0を選びます。次にUpdate CodeをクリックすればPin画面の変更がソースコードへ反映されます。

LED_RED点滅からLED_GREEN点滅へのピン変更
LED_RED点滅からLED_GREEN点滅へのピン変更

ソースコード表示のDevelop画面へ切替えるには、右上のDevelopアイコンをクリックし、L16をコメントアウト、代わりにL17の追記で赤→緑LED点滅への変更完了です。ビルドして緑LED点滅動作を確認してください。

LED_RED点滅からLED_GREEN点滅へのソースコード変更
LED_RED点滅からLED_GREEN点滅へのソースコード変更

このようにサンプルプロジェクトの変更は、SDKに評価ボード実装ハードウエアが定義済みなので、ボード回路図を確認せずにすぐにできます(回路図を確認すれば万全ですが…😅)。

さて、緑LED点滅動作が確認できた後にソースコードへ下記3か所の変更を加えてください。

BSPを使った赤LEDの点滅
BSPを使った赤LEDの点滅

これは、board.hで定義済みのBSPを使った赤LED点滅へのソースコード変更です。追記したLED_RED_INIT(0)とLED_RED_TOGGLE()は、board.hに記述があります。L80:GPIO_PortToggle()よりもL81:LED_RED_TOGGLE()の方が、ソースコード可読性が高いことが解ります。

BSPは、評価ボードで使用頻度が高い関数やマクロを定義します。BSP活用でソースコード可読性が高まりケアレスミスも減ります。BSPは、SDK作成時に生成されます。

LPC845 Breakout boardのSDK活用例を示しました。SDKメリットも実感できたと思います。

LPCOpenライブラリを使ったLPC8xxテンプレートも、新しいSDK対応へUpgradeする必要があるかもしれません。SDKは、新しい評価ボードから対応中なので、残念ながら少し待つ必要があるかもしれませんが…😅。

QUALCOMM、NXP買収断念

中国当局の承認さえ得られれば買収成立という段階までこぎつけた米)QUALCOMMによるオランダ)NXP買収が、買収断念の発表となりました。

QUALCOMM、NXP買収断念
QUALCOMM、NXP買収断念

米国と中国間の貿易紛争の影響です。先の投稿で示した7月25日買収期限を過ぎても、中国側の承認を得られなかった結果です。

買収破断の結果、NXPは、自動車やセキュリティ分野の強化を、QUALCOMMは、5Gなどの無線通信事業を柱にすることを発表したそうです。

我々MCU開発者にこの結果がどう影響するか、本ブログで扱うLPC8xxやLPC111x、Kinetisデバイスにどう影響するか、数年後には明らかになるかもしれません。

NFCを使うLPC8N04のOTA

5/31~6/21の4回に渡り行われたNXPセミコンダクターズ LPC80x WebinarでLPC80xシリーズ概要が解ります(8/16ビットMCUの置換えを狙う32ビットARM Cortex-M0+コア採用のLPC80xシリーズ特徴や商品戦略が解るWebinarスライドは、リンク先からダウンロード可能)。

LPC8xx Family History (Source:Webinar Slides)
LPC8xxは、LPC81x/LPC82xから、2017年高集積LPC84x、2018年価格高効率LPC80xへ展開(出典:Webinar Slides)

LPC8xxファミリは、2016年発売のLPC81x/LPC82xをベースに、2017年にLPC84xで高集積大容量化、2018年はLPC80xで価格効率を上げる方向に発展中です。

関連投稿:LPC80xの価格効率化の方法

ベースとなったLPC810、LPC812、LPC824に対して弊社は、LPC8xxテンプレートを提供中です。このテンプレートは、発展したLPC84xやLPC80xへも適用できると思います。

*  *  *

さて、本投稿は、今後IoT MCUの必須機能となる可能性が高いOTA(Over The Air)について、LPC8N04スライドにその説明がありましたので、速報としてまとめます。

NFCを使うLPC8N04のOTA更新

LPC8N04 は、近距離無線通信(NFC)機能を搭載し15MHz動作のLPC802/LPC804よりもコア速度をさらに8MHzへ下げ、NFCアプリケーション開発に適したMCUです。スマホとNFCで連動する温度センサーロガーの動作例がNXPサイトの動画で見られます。

関連投稿:LPC8N04の特徴

無線ペアリングが簡単にできるNFC搭載MCUは、家電や産業機器の故障診断、パラメタ設定などの分野へ急成長しています。Webinarスライドでは、このNFCを使った電力供給やMCUファームウェア更新方法(OTAテクニカルノート:TN00040)も紹介されています。

IoT MCUには、製品化後にも無線更新できるセキュリティ対策は必須です。OTAはこの実現手段の1つで、具体的にどうすればOTAができるのかがTN00040に簡単ですが記載されています。

前提条件として、LPC8N04のブートROMバージョンが0.14以上であること、OTA実行中は電池かUSBでの電力供給などが必要です。Androidを使ったNFC OTA動作例が下図です。

LPC8N04 FW Update Over NFC (Source:TN00040)
LPC8N04のNFCを使ったOTA更新(出典:TN00040)

更新には、LPC8N04のSBL(Secondary Boot Loader)を使い、通信は暗号化されていますので、OTA中のセキュリティも万全です。OTA用のアプリケーション開発には、通常開発にリビジョン番号(図の1.0.0、1.1.0)付与が必須など様々な制約(オーバーヘッド)があります。

OSを使わないアプリケーション開発の場合、開発者自らがこれらOTAオーバーヘッドの追加が必要になるなど煩雑ですが、決まり文句として納得するか、または、IoT MCU用RTOSとして期待されるAmazon FreeRTOS提供のOTAなどを利用するしかなさそうです。

関連投稿:Amazon、IoTマイコンへFreeRTOS提供

今回はLPC8N04のNFCによるOTAを示しました。IoT無線通信がどの方式になっても、おそらく今回のような方法になると思います。SBL利用や暗号化、更新NG時の対処など留意事項が多く、現場へ行ってIDEで再プログラミングする従来方法よりも洗練されている分、リスクも高くなりそうです。

NXP LPC80xの新しい動き

NXPからNFC機能搭載LPC8N04発表に続き、新たにLPC802とLPC804がLPC800 MCUファミリに追加されました。従来LPC8xxファミリのLPC810やLPC824から仕様の新しい変化が感じられます。

わずか30秒のLPC802評価ボードLPC804評価ボードの綺麗な動画を見るだけでもキーポイントが解ります。

LPC80x評価ボード価格(価格は全てDigiKey調べ)

仕様の変化

LPC8xxファミリのラインアップが下記です。

LPC8xx Family (Source:NXP)
LPC8xxファミリラインアップと新規追加LPC80x (Source:NXP)

15MHzコア速度

LPC8xxファミリは、32ビット ARM Cortex-M0+コアを用います。Cortex-M0+は、8/16ビットMCUの置換えが目的の低消費電力コアです。従来は最大動作周波数30MHzでしたが、LPC80xはこれが15MHzになっています。

最大動作のスペックで、運用時は必要に応じ消費電力を抑えため動作周波数を下げるのが常套手段ですが、LPC80xではこの最大スペックが初めから15MHzになっています。これは、性能と電力消費のバランスを見直し、32ビットコアならばこのスペックでも8/16ビットMCUに十分対抗できると判断したためと思われます。

8/16ビットMCU市場を32ビットMCUで獲得するには、「従来以上に消費電力の低さが必要」なのです。

EEPROM based Flash

従来はFlashと記述されたユーザプログラム領域が、EEPROM Flashに変わっています。
※LPC8xxファミリは、Flashがユーザプログラム領域、SRAMはユーザデータ領域、ROMはデバイスに始めから実装済みのNXP提供プログラム領域(簡単に言うとライブラリ)です。弊社LPC8xxテンプレートに使用例があります。
※LPC8N04の4KB EEPROMは文字通りデータ保存用のEEPROMデバイスをSoCでMCUへ内蔵したものです。LPC8N04はコチラの投稿を参照してください。

LPC802 and LPC804 Block (Source:Mouser Electorinics Japan)
LPC802 and LPC804 Block (Source:Mouser Electorinics Japan)

このEEPROM based Flashと明示の意味するところ、従来との差、目的など、現時点ではよく解りません。しかし、明示する訳があるハズです。判明次第、投稿予定です。

Programmable Logic Unit(PLU)内蔵

LPC804ブロック図では、ピンク色のProgrammable Logic Unit(PLU)、ユーザ変更可能なディスクリートロジック機能も内蔵しています(簡単に言うとPLD:Programmable Logic Deviceです)。

PLU Tool Schematic design (Stource:Part 3 PLU Tool Schematic design Video)
PLU利用のロジック例 (Stource:Part 3 PLU Tool Schematic design Video)

このPLUを使うと、WS2812 LEDやDCモータ制御、パターンジェネレータなどが簡単に実装できるようです。

レジスタプログラミング方式のサンプルソフト提供

ARMコアのソフトウェア開発は、CMSIS:Cortex Microcontroller Software Interface Standardで流用性を高める記述が標準的です。しかし、8/16ビットMCUのソフトウェアは、ハードウェアレジスタを直接アクセスするレジスタプログラミングが主流でした。このレジスタプログラミングを好む開発者も多いと聞いています。

LPC80xのサンプルソフトは、このレジスタプログラミング方式のCode Bundleで提供されます。

関連投稿:CMSIS構造や目的は、コチラの投稿の、“CMSIS”章を参照してください。

8/16ビットMCU市場置換えと開発者ニーズへの最適化LPC80xデバイス

8/16ビットMCUの市場置換えとその開発者ニーズを満たすという目的に、従来LPC8xxファミリよりもさらに最適化した32ビットMCU、これがLPC80xだと思います。評価ボードも低価格で提供中です。

また、日本時間、金曜午前0時~午前1時の1時間に、全4回のWebinarが予定されております。本投稿以降は、6月15日(金)と6月22日(金)の午前0時からです。英語ですが、使用スライドは4回全てダウンロードできますので興味がある方は登録し御覧ください。

NXPのQUALCOMMによる買収、取りやめ?

日経新聞4月20日に、“クアルコム、止まらぬ受難 NXP買収に暗雲”記事が掲載されました。
記事では、トランプ米大統領のBroadcomのQUALCOMM買収禁止命令の報復として、中国当局が承認に難色を示し、7月25日まで買収期限を再延長し、最悪の場合、買収が取りやめになることもあるそうです。

2017年半導体売上高ランキング

2017年の半導体売上高ランキングもEE Times Japanで発表されました。日経記事に登場したイスラエル)NVIDIAが10位、オランダ)NXPは9位、米)QUALCOMMは6位、Broadcomは5位です。

半導体売上高トップ10ランキング(出典:記事)
半導体売上高トップ10ランキング(出典:記事)

仮にNXPの買収が取りやめになった場合、NXPにとってそれが良いのか悪いのかは、判りません。ただ急成長する自動車分野の制御にMCUの老舗、NXPの名前が残るのは悪くないと思います。※ルネサスMCUが、日立、NEC、三菱の統合であり、3社の名前の記憶が薄くなっていくのもさみしいものですから。

決着は、今年の夏頃(2Q 2018)になりそうです。

技術レベルとは異なる政治、経済次元での買収結果が、MCU技術にどのように影響するかは、注意深く見守る必要があります。

NXPのMCUXpresso Support Devices Table(Mar. 2018)へ更新

NXPのMCUXpresso Support Devices Tableが、3月9日更新されました。Change Logページ記載のとおりLPC80X、LPC8N04、LPC540XXが更新され、本ブログ対象のLPC8xxにもSDKやCFGが2Q 2018に提供予定です。LPCOpenライブラリのバグ問題が、新しいSDKで解決されることを期待しています。

NXP MCUXpresso Supported Devices Table (Mar 2018).
NXP MCUXpresso Supported Devices Table (Mar 2018). Product Family filtered with LPC 8xx.

関連投稿

NFC機能搭載マイコンLPC8N04、LPC800シリーズに追加

NFC機能搭載マイコンLPC8N04、LPC800シリーズに追加

近距離無線通信(NFC)機能搭載のLPC8N04がLPC800シリーズに追加されました。
スマホで測定温度を表示するデモソフト付きのLPC8N04評価ボード:OM40002がNXPから直接購入可能(2304円)です。

LPC8xxシリーズラインナップとLPC8N04評価ボード

LPC8xxシリーズ
LPC8N04が追加されたLPC8xxシリーズMCU。コア速度の8MHz低速化、EEPROM、NFC/RFID、温度センサ搭載などの特徴がある。(出典:LPC800 Series MCUs)
LPC8N04評価ボード
LPC8N04評価ボード。Component Sideにコイン電池ホルダーがある。Top Sideは5×7 LED Arrayを搭載し動作表示。(出典:UM11082)

LPC8N04マイコンの特徴

  • 4電⼒モード(sleep、deep sleep、deep power-down、battery off)のARM 8MHz Cortex-M0+コア
  • 32KB Flash、8KB SRAM、4KB EEPROMを統合
  • 広範囲なタギング/プロビジョニング・アプリケーションをサポートするエナジーハーベスト機能付きNFC/RFID ISO 14443 Type A通信
  • 精度±1.5℃の温度センサを統合
  • 2個のシリアル・インターフェースと12個のGPIO
  • 1.72V〜3.6Vの動作電圧範囲と-40℃〜+85℃の周囲温度範囲
  • 低コスト、⼩フットプリントのQFN24パッケージ
LPC8N04ブロック図
LPC8N04のブロック図。従来LPC8xxシリーズと異なり、8MHz動作コア、NFC機能とEEPROM搭載などが特徴。(出典:Product data sheet)

スマホと連動した評価ボードの動作動画はコチラ

個人的には、従来の汎用LPC8xxシリーズとは異なり、NFCアプリケーション特化マイコンのような気がします。Cortex-M0+コア8MHzによる超低消費電力動作、EEPROM、NFC/RFIDなどがその理由です。面白いアプリケーションが期待できそうです。

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割付ですが、最も応用範囲が広い割付とも言えます。さらに、上述のようにソフトウェア開発、新規プロジェクト作成に対しても多くのメリットがあるのがその理由です。

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