マイコンテンプレートのサイト立上げのお知らせ

マイコンテンプレート関連の情報を、1ページにまとめた専用サイトを2つ立上げました。

ブログは、マイコンテンプレートの開発情報や開発経緯、Tipsなどを時系列で記載します。
ブログを最後まで読んでいただく手間を省くため、重要内容を抽出し再編しました。
紆余曲折の検討結果が、最新版テンプレートの状況になり、専用サイトにまとめられたと考えてください。

マイコンテンプレートサイト

マイコンテンプレート専用サイト
マイコンテンプレート専用サイト

記載マイコンテンプレートは、下記です。

  • Cortex-M0/LPC111xテンプレート
  • Cortex-M0+/LPC8xxテンプレート
  • S2/S3コア RL78/G1xテンプレート
  • Cortex-M0+/Kinetis Eテンプレート

サイトの「もくじ」をクリックすると、記載位置へジャンプします。スマホなどの小さい画面でも観やすいように、解像度の高いテンプレート動作中写真も掲載しております。

アプリケーション開発手順サイト

マイコンアプリケーション開発手順サイト
マイコンアプリケーション開発手順サイト

マイコンアプリケーションの開発手順を1ページにまとめました。
マイコンテンプレートを使ってアプリを開発する時の、10手順と、2補足を掲載しています。

LPCXpresso_7.5.0へ更新

10月29日、LPCXpressoが7.4.0からv7.5.0_254へUpdateされました。販売中のLPC8xxテンプレートLPC111xテンプレートともにこの最新版7.5.0での正常動作を確認しました。今回は、LPCXpressoのUpdate方法を説明します。

Update間隔

2014年のLPCXpressoのUpdateは、4月(7.2.0)→7月(7.3.0)→9月(7.4.0)→11月(7.5.0)など約2か月毎と結構頻繁にありました。時々、Welcome画面のLPCXpresso Downloadsリンクを開いて最新版を確認したほうが良いでしょう。私はあまり気にしませんが、意味不明なWarningなどが改善されることもあります。また、テンプレート使用中のLPCOpenライブラリ版数確認も下記リンクで可能です。

Welcome画面
Welcome画面

ちなみに、テンプレートのLPCOpenライブラリは、最新版の使用を確認しました。

Update方法

Update方法は下記です。ライセンスは、バブリックフォルダに保存されているので維持されます。

  1. 旧版を付属UninstallerまたはWindowsのプログラムと機能で削除
  2. 新版をインストール

新版は、旧版とは別フォルダへインストールされます。もし、この旧版インストールフォルダ内に手直ししたサンプルソフトなどを保存している場合には、削除前に別の場所へ保存する必要があります。

ライセンスは、パブリックフォルダ内のNXPLPCXpressoフォルダに記録されています。このフォルダは勝手に作成されますが、消去しないようにしてください。ライセンス保持のままUpdate完了すると、Welcome画面でfully activatedが確認できます。

ライセンス保持でUpdate完了の確認方法
ライセンス保持でUpdate完了の確認方法

IoT向けの無償ARMマイコンOS

弊社、販売中のLPC8xxテンプレートLPC111xテンプレートのライバルが、ARMから無償提供されます。ARM mbedの組込みOS「mbed OS」がそれです。

mbed OSとは

mbed OSに関する記事、「ARMがIoT向けにOSを無償提供開始」と、「ARMは「mbed」フラットフォームでIoT時代を実現させる」によると、ARM社が提供し(つまり、CMSISのOS版になるかも…)、

Cortex-M0/M0+向け、モジュラー構成で必要に応じて選択組込み可能、セキュリティ機能あり、イベントドリブン型OS、mbed Device Server(こちらは有償)との通信によりクラウドサービス利用可能、現在はα版で2015年10月に正式版の予定、NXP/freescaleなどのmbedベンダも参加、オープンソース開発、などなどIoTデバイス開発コスト低減化に効果あり。

かなり強力ライバルです(勝手にライバル視しましたが、ARM社様、ご容赦を…)。今後、ウオッチを続けたいと思います。

組込みマイコンのマルチタスク化

確かに組込みマイコンに多くの機能を実装する時、OSがあれば楽だと思うことがしばしばあります。Windowsデスクトップアプリ開発などを経験すると、より一層感じられることで、IoT時代のマイコンにはmbed OSなどの組込みOSが、必須プラットフォームになるでしょう。

ただ、OSを利用しようとすると、それなりの基礎知識が必要になります。有名な組込みマイコンOS:FreeRTOSなども、使い始めのステップが結構高く、大規模/多人数ソフト開発なら便利でしょうが、普段使いには躊躇します。

さらに、ベンダや機種毎に異なる基礎知識、商用Windowsの例では、OS更新時の手間など、実アプリ開発着手の前段階、メンテで労力を使い果たしてしまいます。これらに関しては、mbed OSで統一されれば、明るい見通しはあります。

マイコンテンプレートの市場

そんな背景で開発したのが、マイコンテンプレートです。簡易マルチタスク化、デバッグ容易、サンプルソフト流用得意、などの特徴があります。イメージ的には、以下の範囲での適用が市場です。

テンプレート市場と対応マイコン
テンプレート市場と対応マイコン

先の記事に、ARM mbedとIntel市場の違いをKris Flautner氏が説明されていましたが、(勝手に無断)引用させて頂くと「mbed OSは非常にハイエンドのモノで、それに対して弊社テンプレートがフォーカスするのは、無償IDEで開発できるプログラムサイズの低価格な組込みマイコンの市場。両者は全く異なる。」と言えます。

販売中のテンプレートの骨格説明と、一覧はコチラをご覧ください。

LPCXpresso_7.4.0リリースとデバッガ接続トラブル

9月16日、LPCXpressoの最新版LPCXpresso_7.4.0_229がリリースされました。販売中のLPC8xx、LPC111xテンプレートともに、最新版で動作確認完了しました。しかし、デバッガ接続時、注意することがあります。

デバッガ接続時のトラブル

デバッガ接続時、以下のエラーメッセージが表示されGDBへ接続できません。

デバッガ接続エラーメッセージ
デバッガ接続エラーメッセージ

これは、セキュリティソフトAvastが原因で、以下の方法で回避できます。

デバッガ接続トラブル回避方法
デバッガ接続トラブル回避方法

Avastの「常駐保護を無効にするに設定」(10分間~再起動まで停止は任意)すると、これまでの旧版LPCXpressoと同様デバッガに接続できます。Avastバージョンは、2014.9.0.2021です。

トラブル発生の開発環境は、Windows7 Ultimate 64/32ビット、Windows8 Pro 64ビットです。他のセキュリティソフトでも同様のトラブルが発生する可能性がありますので、ご注意下さい。これは、Avast側のバージョンアップで発生しなくなる可能性もあります。

セキュリティソフト、結構やっかいな相手です。

PS: Welcome画面、旧版LPCXpressoは、CloseしてもOKでしたが、新版はCloseするとIDEがダウンします。Welcomeは表示し続ける必要がありそうです。

NXP ARMコアマイコン利用メリット検証(その2)

ARMコアマイコン利用メリット検証の2回目は、テンプレート開発で気がついたCortex-M0+とM0の差分を示します。

GPIOセット/クリアレジスタの有無

32ビットマイコンのCortex-M0/M0+は、GPIOレジスタに対して、ビット単位のセット/クリア処理が必要です。レジスタのビット位置が、IOピンの操作に対応しており、ピン単位の入出力方向や初期値設定を行うからです。

後発のCortex-M0+のLPC820には、GPIOポートセットレジスタ:SET0、クリアレジスタ:CLR0、トグルレジスタ:NOT0が追加されました。これらは、先に開発されたCortex-M0のLPC1114にはありません。

LPC820GPIOのセット、クリア、トグルレジスタ
LPC820GPIOのセット、クリア、トグルレジスタ

これら追加レジスタを使うと、特定ビットを変更するビット演算時に、ソフト記述が簡単です。例を示します。

ARMマイコン Cortex-M0+ / LPC820 Cortex-M0 / LPC1114
ビット演算例 ビット演算1 ビット演算2
説明 ビットクリア、セットともにビット演算子「|=」を使う ビットクリア時は、演算子「&=~」、ビットセット時は、演算子「|=」を使う

 

このように、LPC820は、同じオペランド「|=」を使って、ビット単位のセット/クリア/トグルを表現できます。一方、LPC1114は、セット時は「|=」、クリア時は、「&=~」を使い分ける必要があります。

これらレジスタは、Cortex-M0+の特徴の1つ、「Single-cycle fast I/O access port」の実現手段かもしれませんが、ここでは、ソフト記述の容易さに着目して差分を説明しました。

I2C APIの差

これは、前回記事に記載したように、LPCOpen版数の差に起因していると思いますので、簡単に現状での差分を示します。

ARMマイコン Cortex-M0+ / LPC820 Cortex-M0 / LPC1114
I2C APIマスタライト例  マスタタイト1  マスタタイト2

 

主観評価

販売中のテンプレートで使った差分を示しました。これ以外はそのまま使えるので、差分がデメリットになるほど労力がいらないこと、後発マイコンCortex-M0+には、ソフト記述が容易になるようなレジスタが追加されたことがお判りになったと思います。

つまり、GPIOの場合、Cortex-M0からM0+への移植:ポーティングは、LPC1114でポート番号が0~3あったものが、LPC820では0のみになったことに注意すれば、殆どそのまま使えます。但し、新たに追加されたGPIOセット/クリア/トグルレジスタを活用すれば、より簡単にソフトが記述できます。LPC8xxテンプレートも、これらレジスタを活用しています。

新しいCortex-M0+マイコンほど、よりソフト開発が容易なっていると言えるでしょう。

NXP ARMコアマイコン利用メリット検証(その1)

ARM Cortex-M0搭載のLPC111xテンプレート発売で、同一ベンダNXPでのARMコアCortex-M0+からCortex-M0へのテンプレート移植が完了しました。そこで、NXP ARMコアマイコン利用のメリット/デメリットについて、数回に分けて示します。

NXP Cortex-M0+マイコンのテンプレート移植

NXP Cortex-M0+マイコンからCortex-M0マイコンへの移植
NXP Cortex-M0+マイコンからCortex-M0マイコンへの移植

同一ベンダのCortex-M0/M0+ソフトの差

一言で言うと、NXP Cortex-M0/M0+のソフト差は、殆どありません。ルネサスのRL78/G13(S2コア)とRL78/G14(S3コア)と同じ程度と言えば、RL78/G1xユーザには判っていただけるでしょう。

差がある箇所(概要)

アナログ入力は、コンパレータとADCで内蔵周辺回路が異なるため、制御ソフトは異なります。

一方、内蔵周辺回路名が同じでも、後発のLPC820では異なるものがあります。LPC820のGPIOクリアレジスタがそれで、LPC1114にはありません。これは、ソフト記述がより簡単になるように専用レジスタが追加されたと推測します。

また、テンプレートではLPCOpenライブラリの版数が異なるため、I2C関連のAPIも異なります。これは、版数が同じになれば、同一APIになると思います。敢えて、異なるAPIにする意味はないためです。対策に変換関数を自作すれば済むことですが、一方に合わせずに素のAPIをそれぞれのテンプレートに使いました。

これら差分箇所は、次回以降、詳細に示していきます。

一致する箇所

マイコンコア制御、つまりCMSISライブラリに相当する部分については、APIレベルで一致します。従って、Cortex-M0+とCortex-M0のARMコア差はソフトでは見えなくなります。

主観評価

半導体は、ムーアの法則にしたがって、微細加工とハード集積化が進みます。マイコン半導体ベンダは、市場が、動作電圧や、周辺回路などのハード互換性要求が強いため、これまではこのムーア則を、主としてハード低価格化、利益増加へ使っていたと思います。

しかし、徐々にソフト開発の要求も、この法則へ適用しつつある気がします。例えば、LPC820のGPIOクリアレジスタ追加や、ROMライブラリ追加などがそれです。これらハード追加により、従来ソフトがそのままでは使えませんが、同じ機能を、より高速、かつ簡単なソフト記述でできます。

ARM Cortex-M0+のLPC8xxシリーズは、Cortex-M0のLPC111xシリーズよりも後発であるため、これらの恩恵を受けて、より効率的なソフト開発ができます。また、従来Cortex-M0ソフト資産を活かしてM0+へ移植する際も、少ない手間でポーティングできるでしょう。

ARMコア利用メリットは、後発ハードの性能向上、既存ソフト資産の継承のし易さ、これら両者がもたらす「確実な処理能力の向上」にあると思います。機種が異なるマイコンへのソフト移植は、処理能力が本当に向上するか否かは、実際に開発完了するまでは「賭けの要素」もありました。

しかし、少なくともARMコアを使う限り、この「掛けのリスク」がかなり減るということを、今回のテンプレート移植は、M0+からM0という時間を逆に遡る方向でしたが、実感しました。

 

本記事は、同一ベンダNXPのARMコア利用のメリットを概観しました。デメリットに相当する差分の詳細は、次回以降に示します。また、別ベンダで同一ARMコアのテンプレート移植例として、freescaleのKinetis Eシリーズ/Cortex-M0+で評価します。

テンプレート移植(Cortex-M0+ → M0編)

ARM Cortex-M0+のLPC8xxテンプレートをCortex-M0テンプレートへ移植するに際し、使用評価ボードを比較し、既存テンプレートのどこに変更が必要かを把握します。

評価ボード比較

評価ボード LPCXpresso LPC820 REV A LPCXpresso LPC1114 REV A
ボード写真(LPC-Link部除く)

LPCXpresso LPC820
LPCXpresso LPC820

LPCXpresso LPC1114
LPCXpresso LPC1114
実装マイコン LPC820
LPC812M101JDH20 TSSOP20
LPC1114 LPC1100L(第2世代)シリーズ
LPC1114FBD48/302 LQFP48
CPUコア ARM Cortex-M0+ 30MHz(max) ARM Cortex-M0 50MHz(max)
動作電圧 1.8~3.6V 1.8~3.6V
実装水晶発振子 12MHz 12MHz
内蔵発信器 12MHz 12MHz
内蔵フラッシュ・メモリ 16KB 32KB
内蔵RAM 4KB 8KB
内蔵EEPROM なし なし
GPIO 18本(5V-tolerant I/O)
GPIO0_0~GPIO0_17
42本(5V-tolerant I/O)
GPIO0_0~GPIO0_11
GPIO1_0~GPIO1_11
GPIO2_0~GPIO2_11
GPIO3_0~GPIO3_5
アナログ入力 アナログ・コンパレータ
5ビット×1チャネル
ADC
10ビットx8チャネル
汎用タイマ 16/32ビット・タイマ(SCT)×1 16ビット・タイマ(CT16Bx)×2
32ビットタイマ(CT32Bx)×2
実装LED 3色(RED:P0_15、GRN:P0_17、BLU:P0_16) 1色(RED:P0_7)
シリアル通信 USART×1チャネル USART×1チャネル
SPI クロック同期式×1チャネル クロック同期式×1チャネル
I2C フルスペック×1チャネル フルスペック×1チャネル
消費電流
(マイコン単体)
通常時(3.3V/30MHz):3.3mA
スリープ・モード:1.8mA
ディープ・スリープ:150μA
パワーダウン・モード:0.9μA
ディープ・パワーダウン:170nA
通常時(3.3V/50MHz):7mA
スリープ・モード:5mA
ディープ・スリープ:2mA
パワーダウン・モード:なし
ディープ・パワーダウン:220nA
デバッグ機能 SWD SWD
スイッチ・マトリクス あり なし
USB なし なし

LPC820評価ボードのCortex-M0+は、Cortex-M0をさらに小型、省電力するための見直しが行われた結果、M0に比べ消費電流の少なさが際立ちます。

一方、Cortex-M0のLPC111xも、低消費電力とフラッシュ大容化の方向に進化中で、比較マイコンは、第2世代LPC1100Lシリーズです。トラ技2012年10月号掲載のLPC1114は、一つ前の第1世代でした。LPC111xには、第3世代LPC1100XLシリーズやフラッシュを64KBに増加したLPC1115などのバリエーションがあります。

しかし、このシリーズの基本は、第2世代のLPC1114 LQFP48で、シリーズ最大IOピン数の48で関連情報も多く、LPCOpenライブラリもありますので、Cortex-M0テンプレートの評価ボードは第2世代LPC1114を選びました。

なお、この評価ボードの代わりに、回路図が同じLPCXpresso LPC1115を使うこともできます。この場合の注意事項はコチラを参照して下さい。

テンプレート変更項目

テンプレートのライブラリは、LPCOpen最新版V2.xxを使用しますので、Cortex-M0+とM0のARMコア差はライブラリが収集してくれるハズです。つまり、APIがそのまま使えます。すると、テンプレート移植で変更が必要な個所は、ボード比較から差がある個所で、以下となります。

項目 変更内容
CPUコア動作周波数 30MHz動作を50MHz動作へ変更
GPIO GPIOポート番号0が0~3へ増加
アナログ入力 アナログ・コンパレータからADCへ変更
タイマ SysTickTimerは、同じものを使用するので変更なし
評価ボード実装LED 3個LED出力を1個出力へ変更
評価ボードとBaseBoardの接続 BaseBoard実装SWやその他信号線の割付変更

LPC8xxテンプレートで使ったBaseBoardは、LPC111xテンプレートでも使います。従って、BaseBoardのUART入出力、アナログ入力、LCD出力、EEPROM入出力、ブザー出力等をLPC1114評価ボードに割付けます。

こう見ると、コア動作周波数を除けば、ADCやタイマなどの周辺回路が違いますので、その制御は必要ですが、殆どIO関連です。APIが同じだと1から作るのに比べ、とても楽という気がします。M0+からM0に変わっても、既存Cortex-M0+テンプレートの殆どがそのまま使えるからです。