マイコンテンプレート活用プロトタイピング開発(3)

マイコンテンプレートを使ったプロトタイプ開発の第3回は、シールド基板Joystick機能のテンプレート追加です。

Joystick for HMI (Source:Adafruit)
4方向入力とプッシュ操作ができるジョイスティック(出典:Adafruit)

要旨

STM32Fx用テンプレートを題材にしましたが、他テンプレートでも同様です。説明が長くなったので、先に本投稿の開発手順と要旨を示します。

  1. シンプルテンプレートをRenameし、「機能追加用テンプレートを作成」
  2. API作成ツール、サンプルソフトやレファンレンスなどを利用し、「追加機能を理解」
  3. 「追加機能ファイルを作成」し、追加処理をプログラミング
  4. ユーザ関数起動「Launcher()で追加処理を起動し、デバッグ」

要旨:マイコンテンプレートをプロトタイプ開発に利用すると、既に基本動作する枠組みやライブラリが準備済みなので、機能追加の開発効率が上がり、追加処理が1ファイルに閉じ込められるため、ソフトウェア資産として流用性も高まる。

シールド基板構成

機能追加に使うシールド基板は、SDカードに液晶表示画像が保存されており、カードから画像を読込み、それを液晶に出力する、これにMCUのSPIインタフェースを使う構成です。Joystickは、液晶表示の選択肢を入力するためのHMI(Human Machine Interface)に使います。

Shield Fabrication Print
TFT液晶出力、SDカードのデータ入出力、Joystickでの5SW入力、これら3機能ハードウェアを追加するシールド基板(Source:Adafruit)

回路図からも解るようにJoystickは、シールド基板のSDカードやTFT液晶とは完全に別物です。1個のJoystickで「上下左右」と「プッシュ」の5入力を1本のADC入力だけで処理できますので、効率的で低価格なHMI実現手段の1つと言えます。

本投稿は、このJoystickのADC入力を弊社STM32Fxシンプルテンプレートへ追加し、ADC_Joystickプロジェクトを作り動作確認します。

関連投稿:テンプレート活用プロトタイピングの開発方針:第1回ソフトウェア概要:第2回

テンプレート変更準備

今回は、初めてですので、少し丁寧に説明を加えます。

最初に、ワークスペースへシンプルテンプレートを取込み、これに「変更を加える前」にプロジェクト名をADC_JoystickへRenameします。

Template Project Rename
Template Project Rename

Renameを選択すると、プロジェクト名の入力ダイアログが現れますのでADC_Joystickと入力します。

さらに、「手動」でcfg/ico/pdf/txtの4ファイル名をADC_Joystick. cfg/ico/pdf/txtに変更します。

最後に、ADC_JoystickをClean ProjectとBuild Projectすると、正常にコンパイルされ、シンプルテンプレートからADC_JoystickへRenameが成功したことが確認できます。

Tips:リネームプロジェクト名は、「追加周辺回路_装置」としました。プロジェクト名を見れば、時間が経過した後でも、内容が解りやすいメリットがあります。

関連投稿:Eclipse IDEプロジェクトのImportやRename方法

また、レファレンスプロジェクトとしてTFTシールドサンプルソフトもワークスペースへ取込みます。方法は、
File>Import>Existing Projects into Workspaceで
Repository>STM32Cube FW F0 V1.9.0>Project>STM32F072RB-Nucleo>Demonstrations>STM32F072RB-Nucleoを選択しImportしてください。

以上で、2プロジェクトがワークスペースへ入り、ADC_Joystickに変更を加える準備ができました。

Renamed to ADC_Joystick Project
ADC_JoystickプロジェクトとTFTシールドサンプルソフト(STM32F072RB-Nucleo)がワークスペースへ入る

STM32CubeMXでADC追加

Joystickで利用するADCを、STM32CubeMX(以下CubeMX)でADC_Joystickプロジェクトへ追加します。

CubeMXを起動し前章で手動変更したADC_Joystick.icoをLoadすると、シンプルテンプレートのCubeMX設定がロードされます。これに周辺回路ADCを追加します。

ADCのIN8に☑を入れると、PB0ピン、PB.00を使うことが解ります。このPB.00がArduinoコネクタA3に接続されており、Joystickのアナログ値がADCへ入力されます。

STM32CubeMX Setting
STM32CubeMX Setting

通常は、ここでADCを利用するサンプルソフトなどを参照し、詳細設定を調べます。しかし今回は、もっと直接役立つレファレンスプロジェクトのADC関連ソースを読みます。

※レファンレンスソースは一部しか抜粋しませんので、解りにくいと思いますが、文章が分かれば十分です。

TFT_ShieldDetect Logic
TFT_ShieldDetect Logic

ADC関連は、最初にmain.cのL120でシールド基板の実装有無を確認し、実装(SHIELED DETECTED)ならばTFTを初期化(BSP_LCD_Init())し、SDカードから画像読込み(SDCard_Config())を実行します。

L116のコメントから、PB.00電圧レベルで基板有無を確認していることが解ります。そこで、ShieledDetect()を読むと、アナログ入力として使う予定のPB.00を、ここでGPIO入力+プルダウンへ初期設定した後、電圧レベルを読込み、0以外で基板実装と判断しています。

PB.00をアナログ入力に設定しているのは、TFT_DisplayImages()の中、L304のBSP_JOY_Init()です。

つまり、最初にPB.00をGPIO入力+プルダウンに設定し、入力が0以外で基板実装と判断し、次に同じPB.00をADCのIN8に再設定(stm32f0xx_nucleo.cのL841)します。アナログ入力では基板有無の判定ができないのです。
プルダウンが設定できるGPIO入力なら基板無し(電圧レベル=0)の判定が可能です。また、ADC設定は、CubeMXのデフォルト設定で良いことも解ります。

Tips:「同じピン機能をADCからGPIOに切替えて実装有無を判断するテクニック」は、今回だけでなく他でも使えるので覚えておくと役立ちます。

以上、レファンレンスからADCの使い方が解りました。CubeMXへADC追加後のConfigurationタブを示します。CubeMX ProjectをセーブしGenerate Code、Generate Reportを実行し、初期化コードを生成して下さい。

STM32CubeMX Configuration
STM32CubeMX Configuration

シールド基板実装判定GPIOとADCの切り替え

ADC_Joystickのmain.cには、PB.00のADC初期化コードMX_ADC_Init()がCubeMXにより自動追加されます。では、どこで基板実装有無を確認するかというと、L232のUserInit()で行います。

UserInit()
テンプレートに準備済みのUserInit()

UserInit()は、無限ループ実行直前に、何らかの独自設定をユーザが行うための関数です。テンプレートには初めからこの関数が準備されています。

Shield Detection Logic in UserInit
Shield Detection Logic in UserInit

UserInit()のL128で基板実装判定のため、PB.00を再度GPIOに設定し直します。そして、判定結果をUSB経由のCOMポートへ出力します。テンプレートには、COMポート出力機能がありますので、簡単に判定結果が出力できます。

基板実装を確認したら、L146でPB.00を再再度ADCに設定します。

つまり、PB.00はCubeMXでADCとして初期設定しますが、UserInit()で基板実装判定のためGPIOに再設定し、実装済みならもう1度ADC初期設定をします。ADC初期設定コードは、CubeMX自動生成コードですので、将来ADC設定に変更が生じたとしてもCubeMXを変えれば良いだけで、ソースはそのまま使えます。

後は、ADCの値を読んで、stick位置を判断し、その結果も基板実装結果と同様、COMポートへ出力すればJoystick関連の追加処理は完成です。

STM32F0とSTM32F1のBSP

BSPはBoard Support Packageのことで、評価ボード用のライブラリです。
STM32F0用は、Drivers>BSP>stm32f0xx_nucleo.c/hです。STM32F1用は、stm32f1xx_nucleo.c/hです。

関連投稿:BSP解説は、コチラの投稿のSTM32Fxファームウエア構成やHAL Examplesの章を参照。

Joystickのstick位置判断関数BSP_JOY_GetState()もこのBSPで提供されますが、面白いことに、F0用とF1用のBSP_JOY_GetState()の閾値が異なります。どちらも同一条件で動作するので異なる必要はありません。また、if~else if~else文で分岐するのも、処理時間が長くなります。

Difference Between F0 BSP_JOY_GetState() and F1
Difference Between F0 BSP_JOY_GetState() and F1

そこで、F0用のより広い判断閾値を使い、if文とgoto文で分岐する方法を用いました。

Stick Position Judgement
Stick Position Judgement

ADC_Joystickプロジェクト動作確認

Joystickのみ機能追加する場合に備え、stick位置のCOMポート出力、STM32F0xとF1xで共用のための#ifdef~#endifなどの関連処理を新規追加のJoystick.cファイルに集め、ADC_Joystickプロジェクトへ加えました。

ADC_Joystick File Configuration
ADC_Joystick File Configuration

シールド基板を実装すると評価ボード上の青SWが操作できませんので、ユーザ関数を起動するLauncher()のSwScan()はコメントアウトし、代わりに40ms周期起動にstick位置の取得判断関数:JoystickSacn()を入れました。

完成したADC_Joystickプロジェクト動作中のCOMポート出力例を示します。

ADC_Joystick COM Output Example
ADC_Joystick COM Output Example

まとめ

STM32Fxシンプルテンプレートを使って、シールド基板のJoystick機能のみを追加しました。

長文説明になりましたが、実際に行った処理は、下記のようにとても簡単で単純です。

  1. テンプレートプロジェクトをRenameし、ADC_Joystickプロジェクト作成
  2. STM32CubeMXで、作成プロジェクトへADC機能を追加
  3. レファレンスプロジェクトのADC関連部分を読み、使い方と設定理解
  4. 機能追加/削除を容易にするため、Joystick.cファイルを新規追加し、ADC関連処理記述
  5. Launcher()で起動し、必要に応じて処理結果をCOMポートへ出力し、追加処理の動作確認

テンプレートには、COMポート出力やUserInit()などの基本的な処理と枠組み、BSPなど開発に必要となるライブラリが既に準備済みなので、「追加する処理にのみ集中して開発できる」ことがお判り頂けたと思います。

Joystickファイルを新規追加すると、機能の追加/削除、他プロジェクトへの応用も簡単です。ユーザが手動で変更する箇所は、ユーザ関数を起動するLauncher()やUserInit()、COMポートへの出力メッセージ程度で、初期化コードなどはAPI作成ツールSTM32CubeMXが自動的に生成します。

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回全てダウンロードできますので興味がある方は登録し御覧ください。

マイコンテンプレート活用プロトタイピング開発(2)

マイコンテンプレートがプロトタイピング開発に適すシリーズ投稿第2回は、開発に活用流用できるソフトウェア=ライブラリの概要を示します。説明するライブラリが下記です。詳細説明が必要になった時は、それに応じて追記するので、今回は概要を示します。

  1. Arduinoシールド付属C++ライブラリ
  2. SW4STM32付属デモソフト
  3. STM32CubeMX:初期化Cコード生成ツール
  4. HAL:Hardware Abstraction LayerとBSP:Board Support Package
  5. Middleware Components:ミドルウェア:FatFs
  6. STMicroelectronicsアプリケーションノート
  7. STMicroelectronics Communityやネット情報

ソフトウェアは、ドライバーやミドルウェアなど階層構造や使い方に応じて色々な呼び方がありますが、本投稿では、開発に使える可能性のあるソフトウェアや情報を、全てライブラリと呼びます。つまり、開発者自らが開発するソフトウェアと、その開発に使えるライブラリの2つに大別して説明します。

開発着手時は、各ライブラリ概要をおおよそ把握し、自分で開発するソフトのイメージが捉えられれば十分です。後はそのイメージをソフトの形にしてテンプレートに追加すれば、プロトタイピング開発完成です。

1.Arduinoシールド付属C++ライブラリ

Arduinoは、オープンソースハードウェアのシングルボードコントローラです。Arduinoコネクタにシールド基板を実装すれば、誰でも簡単に機能追加できるのがウリです。もちろんハード制御に必須なソフトウェア=ライブラリもシールド基板とともに提供されます。

TFTシールド基板ライブラリは、ArduinoのAPIを利用しC++で記述(左下:shieldtest参照)されています。Arduino IDEにこのライブラリを追加しさえすれば簡単に基板の動作確認ができ、ソース変更も容易です。しかし、これを対象マイコン用に変更するのは、簡単ではありません。API変更とC++が問題です。

Adafruit TFT shieldtest Sketch running
Adafruit TFT shieldtest Sketch running

2.SW4STM32付属デモソフト

SW4STM32には、TFTシールド基板のデモソフトが付属しています。UM1787にデモファームウェアが紹介されており、利用や変更、修正など開発者が自由に使って良いライブラリです。

TFT Shield Demonstration running (Source:UM1787)
TFT Shield Demonstration running (Source:UM1787)

但しこのデモソフトは、デモの表示画像やテキストの変更は簡単でも、一部機能の切出しや新機能の追加、例えばUART入出力処理の追加などは容易ではありません。また、最新の開発ツールSTM32CubeMXベースで開発されたのもでもなく、エキスパートが自作したものです。

このデモソフトのような既存ファームウェアがあっても、そのまま流用活用しにくいというのは、MCUソフトウェア開発ではよくある話です。既存ファームウェアやライブラリの解析に手間と時間がかかるため、新たな環境で新たなソフトウェアを開発したほうが早く済むこともよくあります。

ナゼか? それは、流用性や資産とすることを念頭に置いてソフト開発をしないからです。MCU処理能力の低さやメモリ量の少なさが主な原因ですが、これらは今後改善されます。MCUソフトも流用性を重視し、ソフトウェア資産、部品化を考慮した開発が今後必要です。

3.STM32CubeMX:初期化Cコード生成ツール

STM32CubeMXは、STM32シリーズの全MCUに対して、GUIでパラメタを設定しさえすれば周辺回路の初期化Cコードを自動生成するツールです。また、SW4STM32を含め全IDE(TrueSTUDO、MDK-ARM、EWARM)で共通に使えるなど守備範囲も広く「STM32ソフトウェア開発の要」です。

UM1718に解説があります。このUM1718のTutorial 2に、MCUはSTM32F4ですが、本開発に使えるSTM32CubeMXの設定方法があります。

関連投稿:STM32CubeMX設定については、コチラの投稿も参照してください。

4.HAL:Hardware Abstraction LayerとBSP:Board Support Package

HALは、文字通りハードウェア隠蔽機能を提供する階層です。CortexコアといえどM0/M0+/M3/M4などハードウェアは異なります。この異なるハードにも関わらずHALが同じAPIを上位層に提供するので、性能不足などでコア変更が生じても同じソフトが流用できる訳です。UM1749に詳しく解説されています。

BSPは、このHALのAPIを組み合わせた評価ボード特有機能のマクロ関数です。評価ボードを制御系にそのまま利用する時に便利です。

HALやBSPを使うとオーバーヘッドも生じます。しかし、流用性向上のメリットの方が大きいと思います。

関連投稿:HALのオーバーヘッドは、コチラの投稿の、“STM32CubeMXの2種ドライバライブラリ”を参照してください。

5.Middleware Components:ミドルウェア:FatFs

FatFsは、MCU向けの汎用FATシステムモジュールでフリーソフトウェアです。MCUハードには依存しないので、どのマイコンでも使えるのが特徴です。FatFs APIを使うと、SDカードなどのファイルシステムに簡単にアクセスできます。

STM32CubeMXでは、MiddleWaresのFatFs、User-definedに☑を入れると使えようになります。

STM32CubeMX MiddleWare FatFs
STM32CubeMX MiddleWare FatFs

6.STMicroelectronicsアプリケーションノート

UM1721は、“Developing Applications on STM32Cube with FatFs”と本開発にはピッタリの内容です。3.3にサンプルソフトがあります。これは、FatFsを使って開発したソフトの単体テストに使えます。

7.STMicroelectronics Communityやネット情報

STMicroelectronics Communityなどのベンダーコミュニティは、開発者同士の情報交換、質問の場です。各ベンダーは、提供ツールのバグ情報や更新方針などもこのコミュニティーから収集していますので、時々閲覧すると参考になります。開発でつまずいた時など解決方法が見つかることもあります。

また、検索エンジンでは様々なネット情報が得られます。最新情報などを取集すると、開発動向の把握も可能でしょう。

開発ソフトウェア構成とイメージ

今回のソフトウェア開発に役立つライブラリ概要を示しました。

直ぐにソースコードを書きたい気持ちを少し我慢して、ほんの少し事前調査をすると、視野が広がり使えそうなライブラリの見当もつきます。使えるモノを流用すれば、より重要箇所に集中できます(前回投稿の「選択と集中」ができます)。

本開発は、SPIシールド基板で追加する3機能毎にSTM32CubeMXを用いてソフト開発し、テンプレートへ追加します。また、流用性を上げるため追加機能毎にファイル化し、単体機能の追加削除も容易な構成とします。これをまとめたのが前回投稿の開発方針図です(再掲します)。

Development policy
初期設定生成ツール:STM32CubeMXや、評価ボード開発支援ライブラリを活用しテンプレートへ機能追加

MCUのライバル

プレッシャーをかけるつもりはありませんが、競合他社のMCUだけがライバルではありません。

ArduinoコントローラやRaspberry Pi 3などのMPUは、後発の利点を活かし、ソフトウェア/ハードウェア開発が、誰でも早く簡単にできる工夫が施されています。どちらも低価格で開発環境が整います。MCU開発者の方は、是非どちらか試して、MCUに比べ開発の簡単さを実感してください。

MCU Rivals_R1
MCUのライバルは、競合他社だけでなく、ArduinoコントローラやRaspberry Pi 3などもある。

制御系

特徴

開発障壁

ソフトウェア流用性

MCU

低消費電力
アナログ/デジタル周辺機能豊富

高い

低い

Arduino/Genuino

オープンソースハードウェア基板
豊富なシールド基板で機能追加が容易

低い

高い

Raspberry Pi 3 B/B+

OS搭載シングルボードコンピュータ
動画再生や複雑な技術計算も可能

とても低い

高い

最新Arduinoの動きとしては、SonyのSPERSENSEなどがあります。また、Raspberry Pi 3 B+では、コア速度やLAN高速化、PoEなどのIoTに向けた性能向上も図られています。

MCU評価ボードにArduinoコネクタの採用が増えたのは、豊富なシールドハードの簡単追加が目的です。また、ARM CMSISもMCUソフト流用性を高める方策の1つです。

関連投稿:ARM CMSISの目標については、コチラの投稿の、“CMSIS”を参照してください。

CMSIS実用化に伴い、MCUソフトウェア開発者も、個人レベルでソフト資産化と各種ライブラリ活用技術を身につけないと、先行するArduinoやRaspberry Piへ顧客が逃げてしまいます。

逆に、ArduinoやRaspberry Piのソフトウェアやライブラリを積極的にMCUへ流用するアプローチも(簡単にできれば)良いと思います。

いずれにしても、MCUソフトウェア開発は、既存ライブラリや様々な資産をより活用して、開発効率化を上げることが必要でしょう。

マイコンテンプレート活用プロトタイピング開発(1)

Adafruit 1.8 Color TFT Shield with microSD and Joystick
Adafruit 1.8 Color TFT Shield with microSD and Joystick (Source: Adafruit)

前投稿で、プロトタイピング開発に、マイコンテンプレートが適すと説明しました。その理由は、テンプレートの既に出来上がった汎用処理へ、顧客要求機能を追加しさえすれば、早期に顧客ソフトウェア開発がほぼ完成するためです。つまり、顧客仕様の開発に、より集中できるのです。

働き方改革と、今後も増える仕事量、このバランスを開発者が保つには、選択と集中です。
集中すべきは顧客独自仕様、それ以外は既存資産をより流用活用するテクニックを身につけることです。

具体的にこのこと説明するため、今回から数回に分けて、マイコンテンプレートと評価ボードに、上図Arduino SPI接続シールド基板を追加する開発例を使って、プロトタイピング開発にテンプレートが適すことを説明します。

テンプレート活用開発例の前提条件

途中、別内容の投稿もありますので、3カ月程度の期間で7~10件程度のシリーズ投稿を予定しております。

STM32F072RB/Cortex-M0コアを用いますが、STM32FxテンプレートのCortex-M3コア/STM32F103RBでも同様です。また、投稿カテゴリーはSTM32マイコンですが、他マイコンのテンプレートを使用中、検討中の方も参考にしてください。

様々なシールド基板がある中で、SPI接続シールドを選択した理由は、マイコンでも従来のGPIOによるLCD表示から、よりリッチなSPI:Serial Parallel InterfaceによるカラーLCD表示に変わりつつあることが背景です。詳細は、コチラの投稿を参照してください。

Arduino SPI接続シールド基板構成

Adafruitの1.8“カラーTFTシールド(128×160ドット)、microSDカードスロットとジョイスティック搭載基板(3,680円)は、秋月電子から入手できます。

Shield Fabrication Print
3ハードウェア機能を追加するSPIシールド基板 (Source:Adafruit)

このシールド基板は、TFT液晶出力、SDカードのデータ入出力、Joystickでの5SW入力、これら3機能を、マイコン評価ボードArduinoコネクタに装着するだけでハードウェアの追加ができます。

そこで、テンプレートへシールド3機能のソフトウェアを追加していきます。これにより、Joystickのみ、SDカードのみ、あるいは全機能の追加などいろいろなバリエーションの開発例を説明します。

サンプルソフト、レファレンスソフト構成と開発方針

本開発に使えるサンプルソフトや既存ライブラリを一覧にし、開発方針を図示しました。

Development policy
初期設定生成ツール:STM32CubeMXや、評価ボード開発支援ライブラリを活用しテンプレートへ機能追加

Arduinoのシールド基板には、C++ライブラリが付属していますが、これはArduinoでの動作が前提なので、マイコンにはそのまま使えません。

上手いことに開発環境SW4STM32には、使用するArduino SPI接続シールド基板のデモサンプルソフトが付属しています。但し、このデモソフトは、エキスパートが自作したExamples and Demosなので、部分的に機能を切出そうとすると、解析や変更に手間取ります。

せっかく初期設定生成ツール:STM32CubeMXや、評価ボード開発支援ライブラリのBSP:Board Support Packageがあるのですから、これらツールやライブラリを活用しない手は無いでしょう。
そこで、図示したようにデモソフトは、レファレンスとして活用し、極力STM32CubeMXやBSPを使ってエキスパート自作ソフトと同じものを、初心者でも開発できることを開発方針とします。

シリーズ投稿の予定内容

実際に着手しないと投稿内容は確定しませんが、一応の目安として、下記内容の投稿を目標、予定しています。

第1回、シールド基板、サンプルソフト、レファレンスソフト構成と開発方針(←今回の投稿)
第2回、BSP、FatFs、STM32CubeMX、デモソフト、アプリケーションノートなどの活用/流用可能ソフトウェア概要
第3回、Joystick機能のテンプレート追加:Joystickのみ追加希望の方は、ココまでで開発できることを目標にします。
第4回、SDカードリード/ライト機能のテンプレート追加:SDカードのみ追加希望の方は、ココまでで開発できることを目標にします。
第5回、TFT表示機能のテンプレート追加:TFT表示のみ追加希望の方は、ココまでで開発できることを目標にします。
第6回、SPIシールドテンプレート構成:シールド3機能全てを追加する場合のテンプレート構想
第7回、SPIシールドテンプレート開発:シールド基板活用のTipsなどの資料も含むテンプレート化を目指します。

このように、現在のGPIO LCDを使ったテンプレート応用例Baseboardテンプレートに加えて、最終回にはSPIシールドテンプレートとして発売できれば完成です。ご期待ください。

Yano E plus 2018.5にHappyTech掲載

シンクタンクの矢野経済研究所様の月刊誌Yano E pulsの2018.5、注目市場フォーカス:MCU(マイコン)市場の6-7に、弊社HappyTechが掲載されました。MCUの現状、2021年までの市場予測、ベンダー各社動向などがまとめられたレポートです。お近くに冊子がある場合には、ご覧ください。

ARMが考えるIoTの3課題と4施策

ARMはMCUコア開発会社ですが、製造はしません。開発したコアのライセンスをMCUメーカーへ供給し、このコアに自社周辺回路を実装し各メーカーがMCUデバイスを製造販売します。コア供給元のARMが考えるIoTの3つの課題記事を紹介します。

ARMの課題と施策

本ブログ掲載MCUでは、NXP、STM、CypressがARMコア、ルネサスがNon ARMコアです。いまやARMコアがMCU世界のデファクトスタンダードです。つまりARMの考えは、MCUメーカー各社に多大な影響を与えると言うことです。

ARMが考えるIoTの課題が、「デバイスの多様性」、「エンドツーエンドセキュリティ」、「データの適切な利用」の3つです。そしてこれら課題に対して、「Cortex」、「Mbed OS」、「Mbed Cloud」、「PSA:Platform Security Architecture」の4つの施策で対応します。
課題と施策の内容は、Arm、IoTプラットフォーム「Arm Mbed Platform」アピールの記事に説明されています。

上記記事で、最も印象に残ったのが、ARM)ディペッシュ・パテル氏の下記コメントです。

「専門知識がないユーザーでも、デバイスメーカーが提供するデバイスを購入して、Mbed OSを使えばすぐに利用できる。重要なことはシンプルであることだ。」

MCU開発者の課題と施策

さて、これらARMの施策に対してエンドポイントMCUソフトウェア開発者である我々の課題と施策は何でしょうか?

ARMの課題「デバイス多様性」や「セキュリティ」には、Cortexコア習熟や、セキュリティ理解などが必要です。また、最近更新が盛んなMbed OS習得も加わるでしょう。

記事記載の市場規模は大きくなっても、開発時間はこれまで以上に短く、また、顧客要求も多様化、複雑化するハズです。

従って、従来のような開発方法よりむしろ、スピード重視のプロトタイピング開発が求められると思います。これには、既存ライブラリやサンプルソフト流用、活用技術を磨く必要があるでしょう。前々から言われるソフトウェアの部品化開発手法です。

流用する中身に多少不明な点があっても気にすることはありません。パテル氏コメントの「シンプルであること」を常に念頭に置きながら開発を進めることが重要です。シンプルであれば、様々な状況変化へも対応できます。開発が終わった時に振り返ると、不明内容はおぼろげながら見えるものです。

具体的な手段

弊社は、プロトタイピング開発への具体的な実現手段として、ARMコアのNXP、STM、Cypress各社、およびNon ARMコアのルネサスに対してマイコンテンプレートを提供中です。テンプレートと評価ボードを使えば、早期開発着手と汎用開発部分の使いまわしも簡単で、プロトタイピング開発に最適です。

汎用処理が出来上がったテンプレートへ、顧客要求実現の開発部分を組込めばソフトウェア全体がほぼ仕上がる仕組みです。

また、Mbed OSの仲間であるFreeRTOSを例に、マイコンRTOS習得ページもテンプレートサイトに掲載しております。ご活用ください。

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シリーズに追加

IoTデバイス向け高速軽量改ざん検出技術

NECが、IoTデバイス向け軽量改ざん検出技術を開発しました。以下の特徴があります。

  1. 機器動作に影響を与えない⾼速改ざん検知(2KB実装サイズ機能を、約6msecで検査)
  2. 改ざん検知機能⾃体の保護と軽量実装の両⽴(Cortex-M23/33のTrustZone活用、4KB以内で実装)

TrustZoneのSecure World

セキュリティ強化のARMv8-MプロセッサCortex-M23とCortex-M33には、TrustZoneと呼ぶメモリ保護領域:Secure Worldの作成機能があります。このSecure Worldがあることが前提条件です。

2KBサイズ機能を6msecで検査できるのは、検査領域の絞り込みと実行コードのみのシンプルな監視方法のためで、遅延がゆるされない搬送ロボットなどのIoT機器にも適用できるそうです。

高速改ざん検出(出典:NECサイト)
高速改ざん検出。2KB実装サイズ機能を、約6msecで検査可能。(出典:NECサイト)

Secure World内へ、改ざん検出機能、ホワイトリスト、サーバ通知機能合わせて4KB以内に実装できるので、メモリ容量が少ないIoT機器にも適用できるそうです。

改ざん検知機能⾃体の保護と軽量実装(出典:NECサイト)
改ざん検知機能⾃体の保護と軽量実装。改ざん検出機能、ホワイトリスト、サーバ通知機能合わせて4KB以内に実装できる。(出典:NECサイト)

高速かつ軽量のため、低電力消費で24時間監視とリアルタイム改ざん検出の結果、IoT機器の信頼性を高めることができます。

ARM Cortex-M23/33のTrustZoneを活かしたセキュリティ強化機能です。検査機能限定の実装方法などは、全てのMCUソフトウェア開発へも応用できます。

Secure World領域があってこその技術ですが、TrustZone無しのCortex-M0/M0+/M3へも使えれば嬉しいです。Intelは、古いCPU向けのSpectre対策パッチは提供しないそうですが、既に稼働済みのCortex-M0/M0+/M3機器に向けて、せめてものセキュリティ強化策として使えるかもしれません。

関連投稿

ARM Cortex-M23の特徴

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などがその理由です。面白いアプリケーションが期待できそうです。

マイコン評価ボード2018

マイコン装置を開発する時、ベンダ提供のマイコン評価ボードは重要です。良いハードウェア、良いソフトウェアは、評価ボードをレファンレンスとして活用した結果生まれるからです。

今回は、ARMコア対Non ARMコアという視点で最新マイコン評価ボードを分析します。掲載マイコン評価ボードは下記です(価格は、調査時点の参考値)。

デバッガの2機能

ベンダ評価ボードには、デバッガ付属とデバッガ無しの2タイプがあります。デバッガは、

  1. デバッグ機能:ソースコードのダウンロード、ソースコード実行とブレークを行う
  2. トレース機能:プログラムカウンタ実行履歴を記録する

の2機能を提供します。

トレース機能は、プログラムカウンタ遷移を記録し、ハード/ソフトの微妙なタイミングで発生するバグ取りなどに威力を発揮します。が、本ブログで扱うマイコンでは利用頻度が低く、サポートされない場合もありますので、デバッグ機能に絞って話を進めます。

各社が独自コアマイコンを供給していた頃は、各社各様のデバッガが必要でした。しかし現在は、ARMコアマイコンとNon ARMコアマイコンの2つに大別できます。

ARMコアマイコンの評価ボード

ARMコア評価ボードは、ARM CMSIS規定のSWD:Serial Wire Debugというデバッグインタフェースでコアに接続します。SWDを使うと、他社ARMコアとも接続できます。このため、評価ボードのデバッガ部分と対象マイコンを切り離し、デバッガ単独でも使えるように工夫したものもあります。

ARMコア評価ボードの多くは、対象マイコンにSWDインターフェイスのデバッガが付属しています。これは、対象マイコンが変わってもデバッガは全く同じものが使えるので、量産効果の結果、デバッガ付き評価ボードでも比較的安価に提供できるからです。

CY8CKIT-146
SWDデバッガ付属評価ボードCY8CKIT-146 (出典:CY8CKIT-146 PSoC® 4200DS Prototyping Kit Guide)

また、統合開発環境:IDEもEclipseベースを採用すれば、実行やブレークのデバッガ操作方法も同じになり、例え異なるベンダのARMコアでも同じようにデバッグできるので開発者にも好評です。

以上が、マイコンのデファクトスタンダードとなったARMコアとEclipseベースIDEを多くのベンダが採用する理由の1つです。

Non ARMコアマイコンの評価ボード

一方、Non ARMコアマイコン評価ボードは、本来コア毎に異なるデバッガが必要です。そこで、評価ボードには対象マイコンのみを実装し、その購入価格は安くして、別途デバッガを用意する方法が多数派です。

機能的には同じでもコア毎に異なるデバッガは、サポートするコアによりデバッガ価格が様々です。例えば、ルネサスのE1デバッガは、RL78、RX、RH850、V850の4コアカバーで12600円ですが、RL78とRXコアのサポートに限定したE2 Liteデバッガなら、7980円で購入できます(2018年3月の秋月電子価格)。

RL78/G11評価ボードとE1
RL78/G11評価ボードとE1

ルネサスもE1/E2 Liteデバッガ付きのRX用低価格評価ボード2980円を2018年3月に発表しました(マルツエレック価格)。

E1、E2 Liteデバッガ付きRX評価ボード
E1、E2 Liteデバッガ付きRX評価ボード (出典:Runesasサイト)

※RX評価ボードは、無償CコンパイラROM容量制限(≦128KB)に注意が必要です。入手性は良いので容量制限を撤廃してほしいです。

個人でマイコン開発環境を整える時は、購入価格は重要な要素です。マイコンがARMコアかNon ARMコアか、デバッガ搭載かなどにより、評価ボード価格がこのように異なります。

標準インターフェイスを持つマイコン評価ボードの狙い:プロトタイピング開発

最近の傾向として評価ボードの機能拡張に、Arduinoコネクタのシールド基板を利用するものが多くなりました。様々な機能のシールド基板とその専用ライブラリが、安く入手できることが背景にあります。

ARMコア、Arduinoコネクタ、EclipseベースIDEなどの標準的インターフェイスを持つマイコン評価ボードの狙いは、色々なマイコン装置の開発を、低価格で早期に着手することです。既存で低価格なハード/ソフト資産の入手性が良いのが後押しします。

中心となるマイコン評価ボードへ、機能に応じたシールド基板を実装し、早期にデバッグしてプロトタイピング開発し製品化が目指せます。

CY8CKIT-046
Arduinoコネクタを2個持つCY8CKIT-046、緑線がArduinoコネクタ (出典:CY8CKIT-046 Qiuck Start Guide)

ルネサスもEclipseベースのIDE:e2Studioを提供中ですが、これは世界中のEclipse IDEに慣れた開発者が、ルネサスマイコンを開発する時に違和感を少なくするのが主な狙いだと思います。Non ARMルネサスマイコン開発の不利な点を、少しでも補う方策だと推測します。

関連する過去のマイコン評価ボード投稿

あとがき

ルネサス最新汎用マイコンRL78/G11は気になります。従来のRL78/G1xに比べアナログ機能を大幅に強化し、ローパワーと4μsの高速ウェイクアップを実現しています(詳細情報は、コチラ)。開発資料の多くがe2Studioで、CS+ではありません。Non ARMコアなので他社ARM比、特に優れたマイコンの可能性もあります。

 

汎用マイコンかアプリケーション特化マイコンか

大別するとマイコン:MCUには、汎用マイコンとアプリケーション特化マイコンの2種類があります。

弊社は、下記理由から汎用マイコン:General Purpose MCUを主として扱います。

  1. 対象ユーザとマイコンが多い
  2. 低価格で入手性の良い評価ボードが多い → オリジナルハードウェア開発にも役立つ
  3. 無償開発環境:IDEでもマイコンソフトウェア開発ができる
  4. 応用範囲が広い汎用マイコン開発の方が、顧客、開発者双方にとって有益である

汎用マイコンとは何か?に対しては、マイコンベンダ各社サイトのGeneral PurposeのMCUを指します。一方、アプリケーション特化マイコンとは、モータ制御、ワイヤレス制御、5V耐性などが代表的です。

かつては5Vマイコンが普通でしたが、現在は3.3V動作以下です。その結果、5V耐性がアプリケーション特化マイコンにカテゴライズされました。このように、時代や多数派に合わせて汎用の定義は変わります。高度なセキュリティや無線通信が必須のIoTマイコンも、いずれこの汎用マイコンにカテゴライズされると思います。

本投稿は、4番目の理由の追風となる記事を見つけたので紹介します。

汎用マイコンの動向記事

  1. “G”と”L”で考える発展途上の産業エレクトロニクス市場、2018年3月13日、EE Times Japan
  2. 産業FAは「汎用」「多数」の時代に、国産マイコンが変化を支える、2018年2月5日、TechFactory

最初の記事の”G”は、Global、”L”は、Localを意味します。マイコンベンダも、マイコンを使うユーザも、どのマイコンを使うかは暗中模索で混迷しているが、いずれはLocalからGlobalへ移行すると筆者は考察しています。

2の記事は、産業用FAが専用、少量装置から、AI:人工知能を利用した汎用、多数装置の時代に入ったと分析し、ルネサスRZ/AシリーズにAI機能を組込んでこの時代変化に対応すると宣言しています(関連投稿のSTMはコチラ、ルネサスはコチラを参照)。

どちらの記事も、アプリケーション特化マイコンより汎用マイコンの方が、より多く利用されると予想しています。マイコンベンダにとっても、汎用品で大量生産ができ供給コストも下げられます。

お勧めはプロトタイピング開発

FPGAにソフトウェアIPを組込み、より柔軟制御を目指したことや、高分解能ADCマイコンで精密測定などの開発も行いましたが、技術的に得るものは多くても開発時間が予定より長くなり、結局収支は赤字だった経験があります。

パソコンCPUと同様、汎用マイコン処理能力やセンサ能力も半導体製造技術とともに年々向上します。特に処理能力が必要なIoTマイコンは、コア動作速度を上げる、ディアルコアを採用するなど、ここ数年で急激に向上しています(PSoC6は、Cortex-M0+ 100MH動作、Cortex-M4 150MHz動作)。

弊社も今後の組込開発は、汎用マイコンを使い、より早く低コストで装置化する方が、顧客、開発側双方にとって有益だと考えます。開発期間が長いと、その間により高性能マイコンが発売されたりするからです。つまり、プロトタイピング開発をお勧めします。

プロトタイピング開発した装置が仮に能力不足であった場合は、その不足部分のみに改良を加える方がリスクも低く、確実に目的を達成できます。プロトタイピングの意味は、この能力不足部分を明確にし、低コスト低リスクで成功への道筋を探すことも含まれています。

汎用マイコンテンプレート

開発の立ち上げを早くすることがプロトタイプ開発の第1歩です。弊社マイコンテンプレートは、

  • 汎用マイコンの評価ボード上で動作確認済み
  • 複数サンプルソフトウェアをそのまま使った時分割の並列処理可能
  • 開発のつまずきを防ぐ豊富なTips満載のテンプレート説明資料添付

などの特徴があります。汎用マイコンテンプレートを活用し、効率的なプロトタイピング開発ができます。