マイコンテンプレートの骨格

Wordには、名刺、カレンダー、パンフレットなどアプリ毎のテンプレートが用意されています。マイコンテンプレート開発時に悩むのが、どのようなアプリを意識してテンプレートを作るかです。できるだけオールマイティなテンプレートが目標です。

今回は、弊社マイコンテンプレートの骨格について説明します。

テンプレートの骨格

弊社マイコンテンプレートは、

(1)無償IDEのプログラムサイズ

(2)時分割の処理起動

(3)RAMでの関数間パラメタ渡し

(4)UARTメニュードリブン

の4つの骨格を持ちます。

(1)無償IDEのプログラムサイズ:弊社テンプレートは、IDE無償版で開発できるプログラムサイズを対象とします。これは、この程度が個人や少人数で開発/デバッグできる限界と考えるからです。これ以上大きくなると、開発/デバッグが指数的に困難となり、開発を収束させるために、例えばリアルタイムOSなどの別手段が必要になります。

最近は、無償版でも256KB程度の十分大きなサイズも開発できるようになりました。これは、IDEツールが高機能になり、API関数の自動生成や、既存ライブラリを簡単に使えるためです。これらIDE生成関数は、バグなしの完成品ですが、個人でカスタムメイドできるサイズは、今も昔もあまり変わらないと思います。経験的に無償IDEで開発できるサイズがこの上限サイズです。

(2)時分割の処理起動:マイコンは、CPUと周辺回路が「ハード的に並列動作」します。従ってCPUソフトを、周辺回路起動と処理完了確認の2つで関数化すると、複数の周辺回路を簡単に並列動作させることができます。起動から処理完了までの処理時間は、周辺回路毎に予想できますので、その間に別処理、例えばSleepをすれば電力効率もアップします。これらの処理を時分割で起動するのが弊社テンプレートです。

(3)RAMでの関数間パラメタ渡し:カスタムメイド関数のパラメタは、内蔵RAMを使って外部と入出力します。これで関数単体デバッグが簡単になります。RAM値をデバッガで確認/修正すれば、関数動作が把握できるからです。さらに、関数の中身が未完成の時でも、入出力値をRAMに設定しさえすれば、結合デバッグができるメリットもあります。

(4)UARTメニュードリブン:シリアルポートUARTを持たないマイコンはありません。Wi-FiやBluetoothモジュールをこのUARTへ接続すれば、ワイヤレス制御もできます。シリアル-USB変換ケーブルでマイコンとPCを接続し、メニュー形式で処理を選択するメニュードリブンをテンプレートに採用する理由は、2つあります。1つが、この「UARTが必ずあり、応用範囲が広い点」です。

もう1つが、メニュードリブンで開発すると「処理の移植が容易な点」です。テンプレート利用者は、メニューで示された処理のうち、必要な処理のみを簡単にテンプレートソースから見つけることができます。所望処理がUART受信コマンド解析関数から始まるからです。

そして、発見した関数(または関連関数)を、丸ごとご自身のソースへコピーすれば、動作させることができます。テンプレートは、多くの場合、この処理単位でファイル化していますので、ファイルを丸ごとコピーしさえすれば、必要な処理をテンプレートから抜き出すことも可能です。

評価ボードで実動作確認

入手性が良く低価格な評価ボードで、これらの骨格をもつテンプレートをボードへ実装し、動作確認を行い、詳細な説明資料付きで販売します。説明資料付きのテンプレートと評価ボードの組合せは、効率的に対象マイコンを習得でき、新規アプリ開発と評価に役立ちます。

販売テンプレートと開発テンプレート

現在、2種のテンプレートを販売中で、2種を年末までに開発、発売予定です。開発経過などを本ブログに記載しますので、ご参照ください。価格は、各1000円(税込)/1コピーです。

テンプレート名 ベンダ マイコン 動作確認評価ボード
RL78/G1xテンプレート Ver3 ルネサス RL78/G1x
(32MHz)
・RL78/G13 Stick
・RL78/G14 Stick
・QB-R5F100LE-TB
・QB-R5F104LE-TB
BB-RL78G13-64 (弊社推薦ボード)
LPC8xxテンプレート NXP LPC81x
Cortex-M0+
(30MHz)
・LPCXpresso LPC812  +  mX-BaseBoard
LPC1114テンプレート NXP LPC1114/5
Cortex-M0
(50MHz)
・LPCXpresso LPC1114  +  mX-BaseBoard
Kinetis/Eテンプレート(開発中) freescale Kinetis Eシリーズ
Cortex-M0+
(40MHz)
・FRDM-KE02Z40M  +  mX-BaseBoard

RL78/G1x開発役立ち4ドキュメント

2014/6/20ルネサス発行のRL78/G1x開発に役立つ資料を4つお知らせします。このページ一番下、その他に分類されている資料で、NEW!マークが付いた以下4タイトルです。

1.RL78ファミリ用CコンパイラCA78K0R SADDR領域とCALLT命令の使用

SADDR領域とCALLT命令の効果を解りやすく解説しています。

販売中のRL78/G1xテンプレートも、SADDR領域は使っていますが、CALLT命令は、コードサイズは小さくなるものの、速度が遅くなるので使いません。RL78/G1xは比較的大きなROMを持つマイコンなので、コードサイズよりも速度を優先して設計したためです。

有効なSADDR領域ですが大きさに限りがあるので、コンパイルオプションのROM/RAM使用量を表示し、上限に近い場合には、配置変数の選択も必要でしょう。

2.RL78ファミリ用CコンパイラCA78K0R データフラッシュへの定数の配置方法

ROM、RAM、データフラッシュの3領域を持つRL78/G1xデバイスで、データフラッシュ領域へconst定数を配置する方法を記載しています。

RL78/G1xテンプレートは、データフラッシュライブラリを使い4KBデータフラッシュ領域をEEPROM的に使っています。このような使い方が不要な場合には、巨大テーブルの定数配置などで解説の方法も使えそうです。

3.スタック領域の変更方法

4.リンク・ディレクティブの説明

どちらの資料もROM、RAMへのセグメント配置に関する基本的な解説です。文章や図にすると、説明が長くなるのが欠点ですが、まとまっているので理解し易いでしょう。

RL78/G1xテンプレートでは、コンパイラ領域がRAM内で連続するように、データフラッシュライブラリの占有領域を決めるリンク・ディレクティブ設定を行っています。また、作成する関数間インタフェースは、基本的に関数引数を使わずRAMを使います。従って、関数単独のデバッグが容易で、スタック使用量も引数利用に比べ少ないのが特徴です。結果として、スタック領域の配置は、コンパイラにお任せでも問題なく動作します。

RL78常設セミナテキスト改版

2014年5月30日発行のルネサスサポート情報 vol.197で、ルネサス常設セミナテキストの改版がレポートされました。レポートでは、「新規公開」とありますが、ダウンロードして旧版と比較した結果を示します。

セミナテキスト改版内容

コース名 レポート記事 旧版との比較結果
R8Cマイコンコース テキスト新規公開 2012年3月21日 Rev. 2.20と同じ
RL78マイコンコース テキスト新規公開 2013年12月18日 Rev. 1.30へ改版
RL78コンパイラコース テキスト新規公開 2014年3月13日 Rev. 1.07へ改版
RL78リアルタイムOSコース テキスト新規公開 2014年3月31日 Rev. 1.02へ改版

※R8Cマイコンコーステキストは、改版内容が不明で、公開テキストは前版と同じでした。

テキストの変更履歴がないので、具体的にどこを変更して改版したのかは不明です。しかし、どのテキストも内容が濃く、一読に値します

テキストですので、重要項目を1~10まで記載しています。初心者には、読むだけで大変で、理解にかけられる労力が不足することも多いと思います。そんな時は、各テキストの最重要箇所のみを抽出したコレに先ずザット目を通してください。特に、コンパイラコースのその1~3を理解した後に、テキストに戻ると理解が捗ると思います。

テンプレート活用のマイコン開発

限られた時間で効率的にマイコンを習得するには、手軽に用意できる開発環境と、テンプレートを活用するのも一つの方法です。ワードやパワーポイントには多くのテンプレートが提供されますが、組込みマイコンのテンプレートは少ないようです(サンプルソフトは、あくまでサンプルでテンプレートとは、別物です)。

そんな時は、販売中のRL78/G1xテンプレートを活用下さい。業務に使えて、テキストの重要箇所エッセンスをプログラムへ盛り込んだテンプレートになっています。世界標準のARM 32ビットマイコンLPC8xxテンプレートも販売中です。

LPC820 vs. RL78/G13 割込みコントローラ比較

NVICとRL78/G1xの割込みコントローラ比較

LPC820やCortex M0/M0+マイコンは、割込み処理性能を強化した新しいNVIC: Nested Vectored Interrupt Controllerを持っています。RL78/G1xは、4バンク構成の従来型割込みコントローラです。NVICは、これまでソフトで行っていた割込み 処理を、殆どNVICハードで行います。頻繁な割込みに対する効率化(テール・チェイン)などにより、割込み応答時間が均一になり、高速処理が可能です。

CPU LPC820 RL78/G13、RL78/G14
割込み回路 NVIC: Nested Vectored Interrupt Controller Interrupt Controller
レジスタバンク なし 4バンク(RB0/1/2/3)
レジスタ待避場所 スタック バンク
バンク使用時はスタック
PUSH/POP動作 ハード:NVIC処理(ソフト比、応答時間が均一で高速 ソフト処理
多重割込み受付 デフォルト許可 デフォルト禁止(受付はソフトでEI設定要)
テール・チェイン機能 あり なし
割込み優先レベル 4(高0/1/2/3低)、デフォルトレベル0 4(高0/1/2/3低)、デフォルトレベル3
ISR記述 規定ISR名でCソース記述(オーバーライド可能) __interruptを付加し、規定ISR名記述(オーバーライド不可)

 

割込み起因のバグは、再現性が低く、デバッグが厄介なものです。定量的な評価はできませんが、NVICの謳い文句やこの比較表以上に、割込み処理に対して、有効になると思います。

LPC820 vs. RL78/G13 I2C API比較

マイコンによるI2C APIの差

API比較
API比較

マイコンのI2CにEEPROMを接続する例でAPIを比較します。RL78/G13、RL78/G14、LPC820のI2C関連APIの関数名だけを抜き出して列挙しました。太字は初期化関数です。

RL78/G13とRL78/G14は、CubeSuite+のコード生成を使うと、両マイコンとも同じAPI関数でEEPROM制御ができますが、ここでは、あえて出典のアプリケーションノートを使った場合を示しました。これらアプリノートは、最近リリースされたものです。

この表からマイコン、メーカでAPIとアプリの切り口が、かなり異なることが判ります。例えば、RL78/G13の場合は、SCLのHigh/Low出力など、プリミティブなAPIがあります。RL78/G14は、上位/下位の2階層構成(_EepMdl_と_Drv_で分離、各層に初期化があるので太字関数は2つ)で、マルチスレーブが容易です。LPC820は、3つの中では最もシンプルなAPIでCubeSuiteのコード生成出力に近いものです。

一方、最もアプリに近いAPIは、似ています。例えば、R_EEPROM_R、R_IIC_EepMdl_Read、I2C_MstReceiveやR_EEPROM_W、R_IIC_EepMdl_Write、I2C_MstSendなど。

このように比較的よく使われるEEPROM接続でも、APIは様々です。従って、APIを利用するアプリケーションも、残念ながら異なるものとなります。マイコン選定に当たって、デファクトスタンダートや、開発者の経験で選ばれる理由がここにあります。

テンプレートは、市販の入手容易なボードと無償ツールを使って、結局はオーダーメードになるマイコンアプリの初期立ち上がりを加速するためのものです。人気のあるマイコン機種と使い方を厳選し、トリッキーな手法なしに、素のマイコン性能を引出せるテンプレートを目指します。テンプレートに対するご意見、ご希望などは、info@happytech.jp へお寄せください。

RL78/G13とRL78/G14の推薦開発ボード

RL78/G1x開発用に最適な市販ボードを見つけましたので紹介いたします。

RL78/G1x開発推薦ボード
RL78/G1x開発推薦ボード

秋月電子通商の、印)NGX社BlueBoard-RL78/G13_64pin、3800円です。LCD、UARTドライバ×2、ADC用ポテンショメータ、LED、ブサー、E1インタフェースなどが実装済みで、単独のRL78/G13CPUボードにブレッドボードなどでLCDやUARTドライバを追加するよりもお得です。また、RL78/G14も同じ基板で動作します。NGXサイトではRL78/G14用BlueBoardも販売中ですが、自信がある方は、ご自分でCPU載せ替えもできるでしょう。

1点だけ残念なのは、LCDインタフェースが、使用頻度の高い4ビットインタフェースではなく8ビットインタフェースになっている点です。実装マイコンが64ピンなので余裕があるためでしょう。弊社RL78/G1xテンプレートは4ビットインタフェースで開発しましたが、この8ビット版へも、sfr設定、LCD初期設定、LCDコントローラへ書込みの3関数の一部のみを変更して対応できました。

テンプレート最大動作クロック設定の目的

LPCOpenライブラリのスタートアップ処理変更

スタートアップ処理は、本来変更不要です。但し、唯一変更したい箇所が、デフォルト24MHzのシステム動作クロック設定:SystemSetupClocking()です。テンプレートは、CPU最大速度の30MHz動作にします(目的は、後述)。このシステム動作クロックは、ユーザプロジェクト処理のHdwInit()で再設定も可能です。しかし、一旦設定したクロックを再度設定するのは、なんとも気持ちが悪いです。このクロックはマイコン全ハードの動作を決めるので、SleepやPower_Downで止める以外は、安定発振が無難だからです。

LPCOpen APIとCubeSuite+コード生成の違い

LPCOpenサンプルソフトのシステム動作クロック設定関数SystemSetupClocking()を観ると、API関数に、やたらと1や2などの数値パラメタを代入しています(L103と112)。これは、CubeSuite+コード生成ではGUIで設定するパラメタを、LPCXpressoでは、API関数に直接代入して動作を変えるからです。GUIか、パラメタ代入か、どちらが簡単かは、意見の分かれるところですが、私はGUIが好きです。パラメタの場合は、マニュアルを読みながら値を設定する必要があるからです。

SystemSetupClocking()
SystemSetupClocking()

私のようなGUI好きな人向きに、システム動作クロックのパラメタを算出するExcelツールがあります。

システム動作クロックパラメタ算出ツール

Excelツールの使い方
Excelツールの使い方

Excelツールは、内臓PLLのMain CLKとFinを設定すると、システム動作クロック設定に必要となるMSEL、SPEL、DIVの3パラメタを算出します。2ページ構成で、1ページ目にPLL outのMain CLKとFinの入力セルがあります。ここへ60MHz、12MHzを設定します。するとPLLが安定動作する(緑エリア)MSELとPSELが4,1と判ります。また30MHz のSystem Clockには、SYSAHBCLKDIV=DIVのラジオボタンで2を選択すれば良いことも判ります。マニュアルを読むよりも簡単です。算出パラメタをAPI関数へ代入して、デバッガでSystemCoreClockをプローブすると、30MHzに変わったことが確認できました。

SystemCoreClockの確認
SystemCoreClockの確認

システム最大動作設定の目的

テンプレートは、システム最大動作速度の30MHzで開発します。これは、最短で処理を行うためです。そして、処理後はCPUをSleep(RL78/G1xはHALT)させます。この時は、周辺回路だけが動作します。Tick割込みでCPUのSleepは解除され、再び同じ動作を繰り返します。CPU最大速度とSleepの時間割合で最終的な消費電力が決まるわけです。つまり、CPUは時分割動作します。

例を示します。表示デバイスとして良く使うLCDの初期化には、数msec以上の待ち時間が必要ですが、この時間をCPUが待つのはムダです。そこで、この間はSleepし、数msec経過後に起き上がってLCD処理を行うなどです。これは、RL78/G1xテンプレートに添付したLCDアプリ例で実施しています。

テンプレートを当該アプリへ適用した後に消費電力を調整します。LPC8xxの場合は、Excelツールを使ってシステム動作クロックを徐々に下げ、時分割処理が達成でき、かつ、消費電力も低くなるシステム動作クロックを探します。システム動作クロックを下げればCPU消費電力は下がりますが、逆に処理時間は長くなりSleepが短くなるので、この方法で、両者のバランスがとれたクロック速度を探します。

RL78/G1xテンプレートの場合も同じです。CubeSuite+コード生成は、GUIで動作クロック速度を選択し、コード生成をクリックすると、ユーザプログラムに上書きされるので、作成ソースをいじることなく簡単安全にクロック速度の変更ができます。やはりGUIの方が楽ですね。

携帯やスマートフォン搭載のマイコンは、バッテリを長持ちさせるために、あらゆる方法を駆使して消費電力を下げる工夫をしています。ここで示したシステム動作クロックを下げるのも、その方法の1つです。

システム最大動作クロックをテンプレートに適用した後にアプリを開発すれば、消費電力を削減する方法が明確になりますし、その方法も簡単です。後は、この方法を成功させるように、CPU時分割処理向きのアプリを開発すれば良いのです。

サンプルソフトの構造

LPC8xxテンプレート開発時に参考にするサンプルソフトの構造について説明します。

サンプルソフトの構造
サンプルソフトの構造

RL78/G1xの無償IDEは、CubeSuite+、GUIで周辺回路のパラメタを設定すると、使用分の周辺回路APIが生成される優れものです。詳しくは、コチラの記事などを参照してください。一方、LPC8xxの無償IDEが、EclipseベースのLPCXpressoです。パソコンへのインストとアクティベーションなどは、トラ技2014年2月号やLPCXpressoサイトを参照してください。LPCXpressoもCubeSuite+と同様、サンプルソフトがIDEに付属しています。

スタートアップ処理とユーザプロジェクト処理

LPCXpressoをインストし、付属サンプルNXP_LPC8xx_SampleCodeBundle.zipをIDEへ展開後、そのソースを読む際のポイントは、サンプルソフトの構造です。構造の解説文が少ない(見あたらない)ので、説明を加えます(付属LPCXpresso User GuideはIDEの使い方解説書です)。

Blinkyを例に示します。組込みソフトは、2つの処理から成ります。「スタートアップ処理」と「ユーザプロジェクト処理」です。スタートアップ処理は、電源ONで自動的に実行されるResetISR()で、メモリなどの初期設定を行います。次にSystemInit()で、動作クロックなどのシステム関連の設定を行います。その後、ユーザプロジェクト最初の関数main()をコールします。

ユーザプロジェクト処理は、無限ループの前に2関数をコールします。HdwInit()で、使用する周辺回路の初期設定を行い、UserInit()でその他の初期設定を行った後に無限ループします(HdwInit()とUserInit()は、説明の都合上作成した関数名です)。

各関数は、NXP社提供のLPC8xxライブラリと、ARM社提供のCortex-M0+コアライブラリを使っています。またユーザが作成する関数も、これらライブラリを使って作成します。つまり、これらのライブラリがAPIを提供しているのです。ライブラリで初めから全てのAPIを提供しているところが、CubeSuite+と違う箇所です。

スタートアップ処理は、全てのサンプルプロジェクトでほぼ共通ですが、ユーザプロジェクト処理は、サンプルにより使う周辺回路が違いますので異なります。普通は、1個のサンプルプロジェクトで、1種類の周辺処理を紹介しますので、無限ループは文字通り簡単な無限ループで終わるものが殆どです。

スタートアップ処理の要は、最低限の動作ができる環境を作成するのが目的で、ブートストラップと呼ばれるゆえんです。パソコンのBIOSに相当する部分と言えば解り易いでしょうか? IDEのデバッガ動作時には、この部分は飛ばしてメイン関数の入口からデバッグを開始します。つまり、本来は、必要性が無い限り、変更不要と考えても良いでしょう。

ユーザプロジェクト処理も、無限ループ前を「周辺回路の初期設定:HdwInit()」と「その他のユーザ初期設定:UserInit()」に分けて考えると、参考にする部分がより明確になります。HdwInit()は、周辺回路の使い方が同じならそのままコピー利用もできます。但し、CubeSuite+と違って、LPCXpressoの場合はAPIパラメタで回路動作が変わるので、APIソースを解読する必要もあります。

サイズが大きいプログラムも、結局は無限ループ部分が大きいだけで、構造は同じです。大きな無限ループ部分の流用性や可読性を上げるために、ファイル分割などの技術を使っているだけです。

テンプレート工夫箇所

この構造が理解できると、サンプルプロジェクトの見通しが良くなります。そして、せっかく提供されているサンプルを上手く利用し、複数処理を実行するには、「無限ループ箇所を工夫すれば良さそうだ」、ということも判ります。組込み用のリアルタイムOSなども、この工夫の結果できたものと理解しても良いでしょう。但し、リアルタイムOS利用時は、OSの理解や面倒なオーバーヘッドも生じます。販売中のRL78/G1xテンプレートやLPC8xxテンプレート(近日発売予定)は、もっと手軽に複数処理を実現するものです。

入手性の良いマイコン分類図

入手性の良いマイコン一覧(チップワンサイトより抜粋)
入手性の良いマイコン一覧(チップワンサイトより抜粋)

組込みマイコンの分類図を、チップワンストップサイトで見つけました。この図は、チップワンストップで販売中のマイコンですので、「入手性が良いマイコン」と言えるでしょう。新規マイコン開発にあたり、どの機種を選択するかの残りの指標は、「入手価格」と「開発のし易さ」、「将来にわたる入手性」です。緑がARMコアマイコン、青がオリジナルコアマイコンを示しています。

コア差別から周辺回路差別へ

8/16ビットマイコンは、過去、現在と各社からいろいろな機種が発売されてきました。全て青のオリジナルコアマイコンで、開発手法やIDEも各社ハラバラでした。より性能の良いオリジナルコアにより、囲い込み戦略がとられていました。これら従来機の製造は、米)ロチェスター社との連帯により、将来にわたる入手性を保証する方法が、ルネサスなどで取られています。

一方、32ビットマイコンは、緑のARMコアが大半です。米)マイクロチップとオン・セミコンダクターを除く各社が、ARMコアのラインアップを提供しています。マイコンは、従来のコア差別から、周辺回路差別戦略へシフトしているといえます。実際、各社の周辺回路は、(少なくとも見た目は)16ビット機でも32ビット機でも同じものを使っています。米)サイプレス社などは、アナログ周辺回路を実装し、同じARMコア機でありながら十分な差別化も達成しています。

IoT時代の新マイコン

全ての機器がネットに繋がるIoT時代のマイコンには、通信制御は必須で、それなりの能力は必要です。これには、既存8/16ビット機で頑張るよりも、32ビット機が適しています。低消費電力と高速化の両方を追求し、IoT要求にマッチするコストパフォーマンスを満たすコアの解として、ARMコアは優れているのでしょう。また開発環境もほぼ同じなので、開発のし易さも(慣れれば)Betterです。さらにARM社は、32ビット機でありながら、8/16ビット市場を狙う低価格なCortex M0+を投入しましたので、新製品マイコンコアは、ARM独占になる可能性もあります。

ARM対Non ARMを記事へ

ARM派にとっては当たり前のことですが、世界標準と言われるCMSISを使ったアクセスやEclipse IDEなど、Non ARM派にとって「?!」を感じる箇所は多くあります。このブログではこの違和感を記載していきます。Non ARM派がARMを知る時、各自の取得技術側からARMを診ると、より効率的にARM習得ができるからです。

世界定番マイコンと日本産マイコン

ハード単体の制御に比べ、ソフトで柔軟に処理変更ができるマイコンは、優れた制御手段です。柔軟であるがゆえに、デバッグなどがリスクになることもあります。

所望の制御ができれば、どのマイコンでも構わないハズですが、実際は入手性や価格、開発環境の問題で数種類のマイコンが市場では優性です。トランジスタ技術2014年2月号によると、ARMは、「世界の定番マイコン」としての情報が豊富で、高速な32ビット動作、入手性や価格も問題なさそうです。今回は、この世界定番マイコンについて考えます。

日本産マイコン:RL78とCuteSuite+

日本産マイコンは、ルネサスエレクロトニクスに集約されました。個人的には、このルネエレの新しいマイコンRL78を応援しています。日本語情報の質、豊富さ、無償IDE:CubeSuite+、入手性、価格、性能どの項目でもRL78は優れています。特に、CubeSuite+のコード生成は、周辺機能のGUIによるパラメタ設定とAPI(Application Programming Interface)の生成により、マイコンプログラミングを変えたとも言えます。つまり、ユーザは、API利用と制御に重点を置いたプログラミングが可能となりました。「コード生成があるCubeSuite+があるのでRL78を使う」と言っても過言ではないでしょう。IDEは、世界標準のEclipse IDE版も提供し始め、グローバル化に努めていますが、コード生成なしでは使う気がしません。しかし、半導体は、大手が独り勝ちするビジネスです。今後どのようになるかは、誰にも判りません。

世界定番マイコン:ARMとEclipse IDE

一方、ARM搭載で国内入手性、価格が優れたマイコンは、トラ技にあるようにオランダNXPセミコンダクタ社のLPC8xxやLPC11xxです。秋月電子通商やマルツパーツ館で多くのLPCマイコンボードが販売中で、価格もデバッガ込みで2000円程度、Eclipseベースの無償IDEで開発します。プログラミングに便利な共通規約CMSIS(Cortex Microcontroller Software Interface Standard)使用、割込み専用回路NVIC(Nested Vectored Interrupt Controller)による高速多重割込み、32ビットなのに16ビット並みの消費電力、SWD(Serial Wire Debug)デバッグ機能など、世界定番たる実力を持っています。

英国ARM社の戦略の優れた点は、自らマイコンを製造せずに、半導体メーカにARMマイコンの設計図:コアを販売した点です。半導体各社は、このコアに独自周辺回路を付けてマイコン応用機器を開発/販売します。コアが同じARMなので、開発環境や使いこなし方はどれも同じ技術が使えます。その結果、32/64ビットのマイコンコアでは圧倒的なシェア(Wikipediaによると2004年で61%)を占めています。但し、コード生成機能は無く、ドライバはARM/NXPから提供されますが、CubeSuite+のように洗練はされていません。結局、ドライバを自作や改造する従来のマイコンソフト開発と同じです。

ところがCortex-M0+搭載のLPC8xxは、8/16ビットマイコン市場を狙ったデバイスで、低価格、更なる低消費電力で小型(8ピンから20ピン)、IOポートとペリフェラルを自由に割当てるスイッチ内臓、しかもUARTやI2CなどのAPIはROMで提供など、魅力的です。NXP社は、8/16ビット組込みマイコンキラーとも呼んでいます。全ての機器がネットで繋がる時には、このようなマイコンが使われるような気がします。

トラ技2014年2月号のLPC810も、8ピンマイコンとしては魅力的です。しかし、電源とSWDが専用ピンですので、汎用IOは4本になります。IOピン数が少ないので、18本の汎用IOピンを持つLPC820を診てみます。

LPC820とRL78/G13

LPC820とRL78/G13を比較し、世界定番マイコンの特性を考えます。

  LPC820:M101JDH20 RL78/G13:R5F100LEAFB 備考
入手性と価格 NXP直販、DigiKey等200円 ルネエレ直販、秋月電子等290円 (個人的に)入手性良いサイトの1個あたり価格(2014年1月現在)
チップ性能 32bit/30MHz動作ROM16KB,RAM4KB,Data Flash:なし汎用IO数:18 16bit/32MHz動作ROM64KB,RAM4KB,DataFlash4KB汎用IO数:48 ・LPC820はADCの代わりにアナログコンパレータ実装。・R5F100LCAFBは250円(ROM32KB,RAM2KB,DataFlash4KB)
IDE Eclipse:API自動生成なし言語:英語 CubeSuite+:API自動生成あり言語:日本語 ・LPC820は、UART、I2CはROMでAPI提供。・EclipseはGNUソフト。ルネエレも提供中。
レジスタアクセス CMSIS ルネエレ規定あり 機能的には同じもの
製造 蘭)NXP、英)ARM 日)ルネエレ ARMコアは、Cortex M0+

 

少ないIO対応の内蔵スイッチ、アナログコンパレータ、低価格設定など8/16ビットマイコン置換えを狙ったLPC820の戦略が判ります。Eclipseは、マイコンに限らずソフト開発の標準IDEになりつつありますし、LPC8xx情報の多くは英語で、API生成が無いことは残念です(GNUツール探すとあるかも…)。ルネエレは、RL78/G13以外にも多くの(日本向け)マイコンを国内製造していますので、この品種のみで評価するのはかわいそうですが、世界定番になるには不利な気がします。

良い物を戦略的に製造するグローバル企業連合に対して、様々なしがらみに縛られるルネエレの構図が現れていると言えそうです。国内自動車メーカはよく比較されますが、海外生産や現地モデルにより稼いでいるので威勢が良いです、しかし、国内資源で世界を相手にするルネエレは、とても頑張っていると言えます。

NXPマイコンのテンプレート

世界定番ARMマイコン:LPC820対応のテンプレートを開発するのも良さそうです。これには、既存RL78/G1xテンプレート機能を移植する予定です。その他、こんな機能を実装してほしい、というご要望などがございましたら、お気軽にお知らせください。