SPI/I2Cバスの特徴と最新表示デバイス

IoT MCUは、従来の2×16文字のLCDから、SPIバス接続でよりリッチな表示ができるものへと変わりつつあると前投稿で述べました。

SPIバスは、従来MCUでも実装しています。ただし、多くの場合I2Cとポート共用で、センサやEEPROMとI2C接続するサンプルソフトが多数派でした。IoT MCUでは、センサ接続とリッチ表示を同時にサポートするので、I2C/SPIポートを2個以上装備するMCUが多くなりました。

本稿は、SPI/I2Cバスの特徴と、SPI接続の最新表示デバイスを示します。

SPIバスとI2Cバスの特徴

SPI Bus vs. I2C Bus (Source: Wikipedia)
SPI Bus vs. I2C Bus (Source: Wikipedia)

SPI(3線式)とI2C(2線式)は、どちらも制御ボード内で使うシリアル通信インタフェースです。少ない線数で複数デバイスを接続できますので、制御ピン数を少なくしたいMCUには適しています。
※SPI:Serial Peripheral Interface
※I2C:Inter-Integrated Circuit

仕様の解説などは、ネット内に数多くありますので省略します。

前投稿のNXP Swiss Army Knife Multi toolのWebinarで示されたSPIとI2Cの特徴に、MCU使用例を加筆したのが下表です。

SPI vs. I2C (Source: NXP Swiss Army Knife Multi tool Webinar)
  SPIバス I2Cバス
長所

・高速

・5V/3.3V デバイス混在可能

・2線でバス接続可能
短所

・デバイス毎にチップセレクト必要

・4動作モードがあるためバス接続時面倒

・低速

・同一Vddでデバイスプルアップ

使用例 リッチ液晶ディスプレイ, SD/MMCカードなど EEPROM, 加速度センサ, 気圧センサなど

※NXPは、当初I2Cバスで液晶ディスプレイ接続を試みたが、結局SPIバス接続になったそうです。Webinarだと、アプリケーションノートに記載されないこのような貴重な情報が入手できます。

SPI接続の最新表示デバイス

検討の結果NXPは、128×64ドット1.3“のOLED: Organic LED(有機LED)ディスプレイをMicro SDカードとSPIバス接続しています(前回投稿Swiss Army Knife Multi tool Block図参照)。
※有機LEDは、輝度や視野角、消費電力などの面で優れた特性を持つLEDです。

SPI OLED Display
SPI OLED Display

*  *  *

一方CypressのCY8CKIT-062-BLE Webinarでは、264×176ドットのE-INKディスプレイシールドが使われました。E-INKディスプレイは、電源OFFでも表示が残る画期的な表示デバイスです。しかもシールド基板なので、Arduinoコネクタを持つMCU評価ボードへの装着も可能です。

E-INK Display Shield
E-INK Display Shield

記載インタフェース信号名から、このE-INKディスプレイもSPI接続であることが解ります。

SPI E-INK Display
SPI E-INK Display (Source: PSoC® 6 BLE Pioneer Kit Guide, Doc. # 002-17040 Rev. *B, Table 1-3)

CY8CKIT-062-BLEは、このE-INKディスプレイのシールド基板付きで8,600円(Digi Key調べ)で入手可能なのでお得です。

しかし、E-INKディスプレイの制御方法が、PSoC Creatorの専用ライブラリ経由で、PSoC MCUファミリで使うには(多分)問題ありませんが、他社評価ボードでこのシールドを使う時は、専用ライブラリの詳細解析などが必要になると思います。

まとめ

SPIバスとI2Cバスの特徴と、SPI接続の最新表示デバイスを2つ示しました。

MCU評価ボードで使われた有機LEDディスプレイやE-INKディスプレイには、I2Cよりも高速なSPIバスが接続に使われています。

有機LEDディスプレイは、輝度や視野角、消費電力などの面で従来LEDディスプレイよりも優れています。

E-INKディスプレイシールドは、電源OFFでも表示が残りArduinoコネクタを持つ他社評価ボードにも装着可能ですが、Cypress制御ライブラリの解析が必要になります。

そこで、SPIバス接続を使ったArduinoシールド基板で、リッチ表示可能、サンプルソフトなどの情報多数、入手性が良く低価格、という条件で調べたところ、Adafruit(エイダフルート)の1.8“カラーTFTシールド(128×160ドット)、microSDカードスロットとジョイスティック搭載(秋月電子3,680円)を見つけました。

1.8" TFT Shield Schematic
1.8″ TFT Shield Schematic

TFT コントローラICのST7735Rのデータシートも開示されていますので、OLEDやE-INKシールドよりも使いやすいと思います。

しかも、メニュー表示した画面に、付属ジョイスティックを使ってユーザが処理選択することもできるので、お勧めのSPI接続表示シールド基板です。

Broadcom、Qualcomm、NXP買収戦略

半導体の業界動向についての最新記事を3つ紹介します。

パックマン(古い!)とBroadcom、Qualcomm、NXPでこの状況を表すとこんな感じでしょうか?

Broadcom、Qualcomm、NXP買収戦略
Broadcom、Qualcomm、NXP買収戦略

企業買収は、巨大な初期投資が必要な半導体業界での生き残り、かつ主要技術確保のための戦略の1つです。BroadcomがQualcommを買収すれば、Intel、Samsungに次ぐ3番手の半導体メーカとなり、スマホ向け半導体では業界最大手になるそうです。

QualcommによるNXP買収は、NXPのMCU競合他社(例えば、STエレクトロニクス、Cypress、我ら日本勢のルネサスエレクトロニクスなど)が嫌がり、また不安を抱く事柄(戦略)だと言うことは、つまり、この買収がMCUソフト/ハードの開発者である我々にも直接影響が大きいと言うことです。

NEC、日立、三菱各社のマイコンが、ルネサスになった時のことを思い出しましょう。

目先の開発案件だけに囚われず、大きなMCU技術動向、業界動向も把握しておかないと、ガラパゴス技術者になりかねません。

 

動きが早く激しい外国勢に対して、メモリー事業を売却して生き残った東芝は、

東芝の自動車用パワー半導体戦略
東芝の自動車用パワー半導体戦略

東芝やルネサスなどの日本半導体メーカには、我々日本MCU技術者がガラパゴス化しないためにも、生き残るだけでなく、例えば、マツダのSKYACTIV-Xのような、業界を引っ張っていく光る技術力を示してほしいと思います。

マイコンデータシートの見かた(その2)

現役STマイクロエレクトロニクスの「メーカエンジニアの立場」から記載された、ユーザ質問の多かった事項を中心にマイコンデータシートの見かたを解説する記事(連載2回目)を紹介します。

全3回の連載記事内容

第1回:凡例、絶対最大定格、一般動作条件、電源電圧立上り/立下り(2017年10月1日投稿済み
第2回:消費電流、低消費電力モードからの復帰時間、発振回路特性(← 今回の投稿)
第3回:フラッシュメモリ特性、ラッチアップ/EMS/EMI/ESD、汎用IO、リセット回路

記事タイトル:データシート数値の “裏の条件” とは

先入観を与える前に、記事を読んでください。消費電流、復帰時間、発振回路特性の留意点が記述されています。記事タイトルの “裏の条件” とは何でしょうか?

私は、データシート数値は、理想的動作環境のマイコン単体の最高数値、これが裏の条件と理解しています。
例えば、車の性能を燃費で比較する方は、普通の運転では絶対に達成できないカタログ燃費で車を評価します。マイコンも同じです。データシート数値は、このカタログ燃費相当だと思います。

カタログ燃費(出典:日本自動車工業会)
カタログ燃費(出典:日本自動車工業会)

実際は、この最高数値にマージンを入れて考える必要があります。どの程度のマージンを入れるかが問題で、安全側評価ならデューティ50%、つまり性能半分位が良いと思います。

但し、これもマイコン単体の話で、マイコン:MCUと電源、発信器や必須周辺回路を含めた制御系で考えると、どの程度マージンを入れるかは複雑怪奇になります。

そこで、ベンダ開発の評価ボードを手本とする考え、つまり、10月1日投稿で示した評価ボードをハードウエアテンプレートとして用いる考え方を、私は提案しています。

10月15日記事のように、評価ボードでもWi-Fi起動時電流に電源部品の余裕が(短時間ですが)少ないものもありますが、大方のベンダ評価ボードは、実用に耐えられる厳選部品が実装済みです。そこで、プロトタイピング時には、この評価ボードで制御系を作り、実装部品のマージンが十分かを評価するのです。

マージンが足りない場合には、同じ評価ボードへ、より高性能な部品を載せ替えるなどの対策が簡単にできます。制御される側もこのようなモジュールで開発しておけば、モジュール単位の設計、変更が可能です。

ソフトウエアも同様です。評価ボードを使えば、少なくとも最低限のソフト動作環境は整いますので、プロトタイピングのソフトをなるべく早く開発し、動作マージンを確認しておきましょう。

完成・出荷時には、ソフトへ様々な機能が後追加されるので、プロトタイピング時はハード同様デューティ50%、つまりROM/RAMの残りに50%位は残しておくと安心です。

ソフトウエアのプロトタイピング開発には、弊社マイコンテンプレートが最適です。

連載第2回範囲のデータシートの見かたまとめ

  • 水晶振動子のMCUクロック供給は、発振波形が正弦波に近いため貫通電流が増え消費電流大となる。
  • 未使用GPIO端子は、外来ノイズ対策に10k~100kプルアップorダウンし、電位固定が望ましい。
  • データシート低消費電力復帰時間がクロックサイクル規定の場合はそのまま使え、㎲規定の場合は参考値。
  • 外付け水晶振動子の利用時は、ベンダ推薦部品を使う。
  • 内蔵発振回路の利用時に、MCU温度変化やリフローによる機械的応力による周波数変動が無視できない場合は、周波数トリミングソフトを組込む。
  • PLL動作最低/最高周波数の設定ミスは多いが、マージンがありそのまま動作するので注意。

ESP-WROOM-32と評価ボードESP32-DevKitC

トランジスタ技術2017年11月号特集のWi-FiとBLE4.2両方搭載のIoTマイコン:ESP-WROOM-32(秋月電子550円)とその評価ボード:ESP32-DevKitC(秋月電子1480円)の記事をまとめます。

ESP32-DevKitC and ESPWROOM-32
ESP32-DevKitC and ESPWROOM-32

無線通信Wi-FiとBluetooth 4.2搭載で単価550円のマイコン

Wi-Fiは、802.11b/g/nの2.4GHzのみ、通信中の消費電流実測値は、起動時800mA、定常時200mAなのでマイコン電源にある程度の余裕が必要です。評価ボードは、1A出力のNCP1117(ONセミコンダクタ)を使っていますが、50%デューティで考えると、もう少し余裕が必要かもしれません。Bluetoothは、BLE4.2です。アンテナも内蔵です。

Tensilica製80MHz~240MHz動作32ビットディアル(!)コア、ROM: 448KB、RAM: 520KB、NXP)LPC8xxシリーズのスイッチマトリクス相当のGPIO_matrixを実装しており、デジタル周辺回路入出力を34本あるGPIOへ割り付け可能です。AD/DAなどのアナログ周辺回路は、ピン固定です。

製造は中国Espressif Systems社、従業員数約120人のファブレスメーカで、2016年米ガードナーが「IoT産業における最もクールな企業」に選出しました。Cortex-M系コアでありませんが、確かに機能/価格:コスパは凄いです。マイコン単体、評価ボードどちらも秋月電子からの入手性が良いので、人気が出るかもしれません。

プログラミングはArduino IDEとCLIのESP-IDFの2種

評価ボードESP32-DevKitCのプログラミングは、Arduino IDEのスケッチベースと、コマンド ライン インターフェース:CLIを使うEspressif Systems社提供ESP-IDF(IoT Development Framework)の2通りがあります。イーサネット、BLE4.2やI2Sを使う場合は、ESP-IDFでの開発が必要です。

評価ボードは、前述の1A電源とUSBシリアル変換デバイスのみ実装ですので、LEDやSWなどをブレッドボードなどで追加し、開発プログラムの動作確認をします。記事4章では、I2C接続で2種類の加速度センサー、1000円台で購入できるMMA8451Q(NXP)、または、20ビット高分解能のADXL355(アナデバ)を使い、簡易IoT地震計を開発しています。I2C経由の加速度データ取得方法は、他のマイコン制御時にも参考になります。

ディアルコア超高性能マイコンですので、評価ボードに1.8インチのSPIカラー液晶モジュール:M-Z18SPI-2PB(aitendo、950円)を接続し、動画を再生しているのが5章です。7章は、AD/DAを使って、今はやりのスマートスピーカーを開発しています。

11月号は、10ドルコンピュータのラズベリーパイZero Wを使った記事も記載されていますが、本ブログはマイコンが対象ですので割愛します。

マイコン開発のポイントは、ライブラリ活用/流用

コマンドラインインターフェース:CLIを使ったソフト開発は、慣れが必要です。しかし、これは慣れの問題です。例えArduino IDEでも、初めての人には戸惑う部分もあるでしょう。Arduino IDEが隠して(見えなくして)いる部分が他に比べて多いので、比較的簡単に慣れるようになるだけの話です。

慣れた後はどちらの開発環境も、豊富なライブラリや、サンプル・プログラム、サンプルソフトを使ってソフト開発をします。個人が1からソフトを全部開発するのではなく、既にあるソフト資産を活用/流用する、これが全てのマイコン共通の現代的なマイコンソフト開発方法です。

これはソフトウエアに限ったことではありません。ハードウエア開発でも、評価ボードやArduinoソケットは、1種のライブラリとも言えます。ソフト、ハードともに使える資産は活用し、これで得た(得をした)開発時間は、独自性を活かす部分に使います。

ライブラリ活用/流用には、ライブラリを使う側の骨格:スケルトンを理解していることが前提条件です。記事P48のArduinoスケッチの書き方で言えば、図Aのsetup()やloop()関数のようにマクロ的にソフト構造を捉えた後に、ミクロな問題へと詳細化することです。

骨格:スケルトンを理解していれば、後は必要な機能をライブラリの中から選び、必要に応じてライブラリを修正し、骨格に付け加えれば、動くモノが完成します(完成度で言えば65~79%:良判定)。

マイコン開発はこの動くものから、完成・出荷段階(完成度80%以上:優判定)にするのに結構な手間と時間が掛かります。

従って、ライブラリを上手く使ってなるべく早い段階で良段階へ到達し、ここからは腰を落ち着けて80%以上の完成度になるように開発時間の配分をしましょう。
また、骨格理解や習得にも十分な時間を割きましょう。

弊社マイコンテンプレートは、様々なサンプルソフトを流用/活用した早期ソフト完成、いわゆるプロトタイピング開発に役立ちます。是非ご活用ください。

マイコンデータシートの見かた(その1)

現役STマイクロエレクトロニクスの「メーカエンジニアの立場」から記載された、ユーザ質問の多かった事項を中心にSTM32マイコンデータシートの見かたを解説する記事(連載1回目)を紹介します。

全3回の連載記事内容

予定されている第2回、第3回の解説内容が下記です。

第1回:凡例、絶対最大定格、一般動作条件、電源電圧立上り/立下り(← 今回の記事)
第2回:消費電流、低消費電力モードからの復帰時間、発振回路特性
第3回:フラッシュメモリ特性、ラッチアップ/EMS/EMI/ESD、汎用IO、リセット回路

今回の第1回を読むと、データシートの読み誤り易いポイントが説明されており、興味深いです。ハードウエアに興味がある、または、ハードも自分で設計するソフトウエア開発者は、読むことをお勧めします。

マイコンハード開発を数回経験すると、おおよその感触とデータシートの見る箇所が解ってきます。私も新人の頃は、網羅されたデータシートの、”どこの何を見れば良いかが判らず”困惑したものでした。

ハードウエアテンプレートは評価ボードがお勧め

私は、使用するマイコンの評価ボードを、ハードウエアのテンプレートとして使います。
例えば、STM32F072RB(=NUCLEO STM32F072RB)は、配線パターン(=gerber files)や使用部品リスト(=BOM)もサイトに公開されています。

これらのデータは、「短納期を要求される開発者の立場」なら、網羅的記載のデータシートよりも、効率よく回路設計をする手助けとなります。

データシートを見ることは、間違いなく重要です。

しかし、具体的にハードウエア設計をする時は、評価ボードのような既に設計済みの「ブツ」を参考にしながら、なぜこの部分はこうなっているのか?などの疑問を持ってデータシートを見る方が、効率が良く、しかも、分厚いデータシートのポイントを理解するのにも役立ちます。

アナログとデジタル電源の1点接地や、パスコン実装位置などは、文字で注意書きをいくらされても解り難くいものです。この点、実物は、文字に勝ります。

ソフトウエアテンプレートはマイコンテンプレートがお勧め

ソフトウエア開発は、マイコンテンプレートの宣伝をするな!と思われた、勘のいい読者の方は、コチラのサイトを参照してください。

サンプルソフトは、”メーカ立場での提供ブツですが、”開発者の立場からの実物として、STM32ファミリ、サイプレスPSoC、NXPのLPC8xx/LPC111x/Kinetis、ルネサスRL78/G1xの各種マイコンテンプレートを、ソフトウエア開発者様向けに提供中です。

連載第1回範囲のデータシートの見かたまとめ

第1回記事の範囲で、マイコンハード開発ノウハウをまとめると、以下になります。

  • マイコン外部接続ハード駆動能力は、I2C、USART、数点のLED直接駆動可能端子を除いては極小で基本的には直接駆動はしない。
  • 外部接続ハードの駆動と接続方法は、Baseboard(mbed – Xpresso Baseboard)や、各種Arduinoシールドを参考にする。
  • マイコン電源は、評価ボードのパターン、実装部品も含めてまねる。
  • 開発製品版の未使用(空き)端子処理は悩ましいが、ソフトはデフォルト、ハードはソルダーブリッジ経由で接地。

私は、今後の連載を読んで、未使用(空き)端子処理の見識などを深めたいと思っています。

BLEとThreadソフト開発者必見動画

IoT通信規格のBLE 4.2とThread(802.15.4)両方をサポートするNXP)Kinetis KW41Z搭載の評価ボードを使ったBEL4.2とThreadメッシュ接続の開発Video(タイトルが以下Lesson 1~10)を紹介します。

Kinetis KW41Z Video Lesson Contents
Kinetis KW41Z Video Lesson Contents

BLEやThreadソフト開発者必見のLessons

内容、質ともに優れたVideoでMCUXpressoとSDKの使い方も良く解ります。特に興味深い内容とその出所が以下です。

  1. Bluetooth ClassicとBluetooth Low Energyの本質的な違い(Lesson 3、3分ごろ)
  2. Bluetooth ClassicとBLE間を接続するBluetooth Smart Ready(Lesson 3、6分ごろ)
  3. BLE接続の具体例(Lesson 3、19分ごろ)
  4. BLE/Thread接続に必要な知識(Lesson 3, 6)
  5. Threadが生まれた背景(Lesson 6、2分ごろ)
  6. Cortex-M0+/48MHz、512MB ROM、128KB RAM、FreeRTOSで実現するBLE/Thread IoT端末(Lesson  5, 9, 10)

BLEやThreadに関する情報は多くありますが、ソフト開発者の立場からは、本Lessonsが最も要領よくポイントをまとめています。

Kinetis KW41Z

KINETIS KW MCU FAMILY BLOCK DIAGRAM
KINETIS KW MCU FAMILY BLOCK DIAGRAM

Kinetis KW41Zの評価ボードは、以下の2種(Digi-Key価格)です。

低価格で有名なFRDM評価ボードですが、さすがに両プロトコル対応のKW41Z搭載ボードとなると$100以上します。Videoで使っているR41Z-EVALは、約$60と安く入手できます。但し、Lesson 10のBLEとThreadメッシュ切り替え接続の動作確認を行うには、同時に3台の評価ボードが必要です。

ThreadのみサポートのKW21、BLEのみのKW31もありますが、無線規格が乱立していて、どれが本命かを見極めるのが困難な現状では、両プロトコルサポートのKW41が安全でしょう。

API for IoT

MCUXpressoとSDKを使って、BLEまたはThread通信機能を持つIoT端末を開発する際に、プロトコルのどの部分の変更/修正が必要で、それがソース上のどこにあるか、全体の開発手順などはVideoを観ると良く解ります。

BLE Protocol Stack
BLE Protocol Stack

また、LEDなどのGPIO制御を行うSDKデモソフトとIoT通信の並列処理は、FreeRTOSを使って実現していることも解ります。簡単なIoT端末なら、このデモソフトに、外部センサ値をAD変換し、その変換データをクラウドのサーバーへIoT経由で送信する機能を追加しさえすれば、直ぐに開発できそうです。
※簡単なIoT端末は後述

BLEやThreadは、IoT通信の有力な候補です。しかし、IoTの通信プロトコルが何になるにせよ、IoT通信向けのAPIが決まれば、あまり気にする必要がない、というのが全Lessonを通しての私の感想です。

その理由は、デモソフト実装済みのGPIO制御はそのまま使えますし、FreeRTOSを使っていますので、外部センサ入力を定期的にADCする処理(ADCスレッド)と、ADC変換データをIoT通信APIへ出力する処理(IoT出力スレッド)の2処理を追加開発すれば良いからです。

ADCスレッドは、IoT通信規格には無関係です。一方、IoT出力スレッドは、Uart出力と同様のIoT APIが使える(用意される)と思います。NXP)LPC8xxマイコンのUart APIの例で示すと、Chip_UART_SendBlocking()が、Chip_IoT_SendBlocking()に代わるイメージです。IoT API利用条件が初期設定で満たされれば、ユーザは、通信速度や、通信プロトコルを意識せずにIoT通信を使えるようになると思います。

*  *  *

IoT通信規格が不確定な状況で、少しでも早くIoTやRTOSに慣れるには、R41Z-EVALは良い評価ボードです。また、FreeRTOSを使えば、48MHz動作のCortex-M0+、512MB ROM、128KB RAMで簡単なIoT端末が開発できそうな見通しもこれらLessonは、与えてくれました。是非、ご自分でご覧になってください。

簡単なIoT端末のイメージ

データ入力とGPIO出力を行うMCU端末で、IoT無線通信機能を備える。通信セキュリティを確保できるAES-128などの機能も備え、対象機器から取得したデータを安全にクラウド内のサーバーへ送信する。
サーバーは、対象機器データを人工知能を使って予測分析し、結果を端末へ送信する。
端末は、受信結果を基にLEDなどのGPIO出力を行い、オペレータまたはロボットが対象機器メンテナンス作業の手助けをする。

STM32Fxテンプレート発売

2016年MCUシェア第5位のSTマイクロエレクトロニクス(STMicroelectronics、本社スイス)のSTM32F0:Cortex-M0とSTM32F1:Cortex-M3向けのテンプレートを開発しましたので、販売開始します。従来テンプレートと同額の1000円(税込)です。

STM32Fxテンプレートの特徴

STM32Fxテンプレート構成
STM32Fxテンプレート構成
  • Cortex-M0とCortex-M3両コア動作のテンプレート
  • 移植性、可読性が高いHALドライバを使ったので、他コアへの流用、応用性も高い
  • カウントダウンループを使ったCortex-M系コードテクニックで開発

従来テンプレートは、ARM Cortex-M0/M0+とルネサスS1/S2/S3コアが対象でした。

つまり、8/16ビットMCUの置換えを狙ったCortex-M0/M0+と、RL78汎用MCUへテンプレートを供給していました。しかし、IoTの通信処理や要求セキュリティを考慮すると、より高性能なMCUも視野に入れた方が良いと感じていました。また、Cortex-M3デバイスの低価格化も期待できます。

初めてCortex-M3のSTM32F103RB:NUCLEO-F103RBへもベアメタルのテンプレートを開発したのは、以上のような背景、理由です。

ST提供のHAL:Hardware Abstraction Layerドライバは、移植性、可読性が高く、Cortex-M0/M3両対応のテンプレートも簡単に開発できました。Cortex-M3よりもさらに高性能なMCUが、ベアメタル開発を行うかは疑問ですが、HALを使ったので適用できると思います。

動作確認評価ボードは、STM32F072RB:Cortex-M0/48MHzとSTM32F103RB:Cortex-M3/64MHzですので、これはあくまで私見、見込みですが…、HALドライバならば問題なく適用できるハズです。

HALドライバ作成にSTM32CubeMXを使うと、異なるコア動作速度(M0:48MHz、M3:64MHz)でも、同じ周辺回路ならば、同じHAL APIが使えます。

今日現在、このSTM32CubeMX周辺回路のGUI設定に関する詳しい資料が見当たりません。そこで、テンプレート添付資料では、テンプレートのSTM32CubeMX設定方法や、SW4STM32開発ヒントやTipsなど開発に役立つ情報を満載しています。初めての方でもSTM32MCUの開発障壁を低く出来ます。

また、本テンプレートをプロトタイピング開発に使って、MCU性能の過不足を評価するのも便利です。ボードレベルでピンコンパチなSTM32 NUCLEO評価ボードですので、評価ボード単位の載せ替え/交換も可能です。

さらに、デクリメントループを使ってループ終了を行っているなど、Cortex-M系のコード作成にも注意を払いました。

*  *  *

マイコンテンプレートサイトへ、STM32Fxテンプレートを掲載します(9月2日追記:サイト更新完了しました)。
添付資料のP1~P3、もくじの内容を掲載しております。P1~P3は、資料ダウンロードが可能です。STM32Fxテンプレートをご購入の上、是非、ご活用ください。

STM32CubeMXの使い方Tips

STM32CubeMXは、STM32Fxマイコンのコード生成ツールとして良く出来ています。但し、現状1つ残念なことがあります。HAL:Hardware Abstraction Layerに加え、BSP:Board Support Packagesをドライバとして出力しないことです。そこで、現状のHALドライバのみ出力に対策を加えます。

STM32CubeMX
STM32CubeMX

STM32Fxファームウエア構成

STM32Fx Software Structure
STM32Fx Software Structure

STM32Fxファームウエア構成が上図緑線の個所です。STM32Fxマイコンサンプルソフトは、使用するファームウエアライブラリに応じて、Low Layer examples、Mixed HAL & Low Layer examples、HAL examplesの3種類あります。

各ファームウエアの差や、サンプルソフトの場所は、以前記事で解説しました。ここでは、STM32F0からSTM32F1へのポータビリティが最も高いHALライブラリ(=ドライバ)を使うサンプルソフト:HAL examplesに的を絞って解説します。

HAL Examples

このサンプルソフトの優れた点は、評価ボード実装済みの青SW(USER Blue)と緑LED(LD2)のみで全てのサンプルソフト動作を確認できることです。SW入力と、LED点滅間隔を変えることで、正常/NG/入力待ちなど様々なサンプルソフトの動作状態を表現します。

この青SWと緑LEDを制御するには、GPIO定義とHALライブラリを組合せた一種のサブルーティンがあると便利です。このサブルーティンが、BPS:Board Support Packagesです。例えば、下記などです。

BSP_LED_On()、BSP_LED_Off()、BPS_LED_Toggle()、BPS_PB_GetState()

BSP_が先頭に付いているので、一目で評価ボード実装済みの青SWや緑LEDを制御していることが判りますし、HALライブラリを使って表現するよりも、可読性もより高まります。BPSの中身は、HAL自身ですので、Drivers層のBSP、HALともに同じ黄緑色で表示しています。

HAL exampleは、これらBSPとHAL両方を使って記述されています。

STM32CubeMX

STM32CubeMXは、最初に使用する評価ボードを選択後、コード生成が行えます。

STM32CubeMX Board Selector
STM32CubeMX Board Selector

但し、生成コードに含まれるのは、HALドライバのみです。BSPは、HALサブルーティンですので、自作もできますが、評価ボードを選択するのですから、せめてHALのみか、それともHALとBSPの両方をドライバとして出力するかの選択ができるように改善してほしい、というのが私の希望(最初に言った現状の残念なこと)です。

もしHALとBPSドライバ両方がSTM32CubeMXで出力されると、多くのHAL Examplesを殆どそのまま流用できるメリットが生じます。HAL Examplesは、残念ながらエキスパートの人手で開発したソースですが、これを自動コード生成の出力へ、より簡単に流用できる訳です。

STM32CubeMX出力ファイルへのBSP追加方法

BSPドライバを自動出力しない現状のSTM32CubeMXで、上記希望をかなえる方法は、簡単です。

STM32CubeMX出力ファイルへのBSP追加
STM32CubeMX出力ファイルへのBSP追加

手動でBSPのstm32f0xx_nucleo.cとstm32f0xx_nucleo.hをSTM32CubeMX生成プロジェクトのSrcとIncフォルダへコピーし、main.cのL43へ、#include “stm32f0xx_nucleo.h”を追記すればOKです。
※stm32f0xx_nucleo.c/hは、\STM32Cube\Repository\STM32Cube_FW_F0_V1.8.0\Driversにあります。

たとえSTM32CubeMXで再コード生成しても、stm32f0xx_nucleo.c/hはそのままですし、追記した部分もそのまま転記されます。この方法で、HAL Examplesの流用性が向上します。

HAL Examplesを読むと、周辺回路の細かい設定内容が解ります。この設定をそのままSTM32CubeMXに用いれば、周辺回路の動作理解が進み、さらに自動コード生成ソースへ、Examplesソースをそのまま流用できるので、評価ボードでの動作確認も容易です。

まとめ

現状のSTM32CubeMXは、BSPドライバを出力しません。対策に、手動でBSPドライバを追加する方法を示しました。これによりエキスパートが開発したサンプルソフトを、より簡単に自動生成ソフトへ組込むことができます。

開発中の弊社STM32Fxテンプレートも、サンプルソフトを流用/活用が使いこなしのポイントです。そこで、このBPSを組込む方法をSTM32Fxテンプレートへも適用し、サンプルソフト流用性向上を図っています。

評価ボードNUCLEO-F072RB/F103RBのピン選択指針

STマイクロエレクトロニクスの評価ボード、NUCLEO-F072RBやNUCLEO-F103RBを使って、ボード外部と接続する際の、ピン選択に関する指針を示します。

NUCLEO-F072RBの外部接続ピン
NUCLEO-F072RBの外部接続ピン

評価ボードのピン配置とSTM32CubeMXのピン選択

評価ボードには、外部接続用のピンとしてArduinoピン(ピンク色)と、NUCLEOボード独自のMorphoピン(青色)があり、Morphoピンの一部は、Arduinoピンと共用(赤囲み)です。2つの黄色マークは後述します(評価ボードのユーザマニュアルは、コチラを参照)。

Arduinoピンは、メスコネクタ、一方Morphoピンは、オスコネクタを使っており、ブレッドボードや弊社マイコンテンプレートで使うBaseboardとの接続には、Arduinoピンを使いオスーオス結線が便利です(Baseboardやオスーオス結線のメリットはコチラの記事を参照)。

評価ボードNUCLEO-F072RB (=STM32F072RB)やNUCLEO-F103RB (=STM32F103RB)を使う時のコード生成ツールが、STM32CubeMXです(STM32CubeMXはこちらの記事などを参照)。

STM32CubeMXは、MCUパッケージイメージから使用ピンを選択、設定します。色付きピンは、既に評価ボードで使用済みのピン、灰色ピンが未使用ピンです。

例えば、灰色ピンのPB7は、I2C 1_SDA~GPIO_EXIT7までの広い範囲で自由に機能を設定可能です。

STM32CubeMXのピン選択
STM32CubeMXのピン選択

STM32F072RBとSTM32F103RBは、どちらもLQFP64パッケージでピンコンパチです。緑色のB1 [Blue Push Button] :PC13と、LD2 [Green LED] :PA5の2ピンを評価ボードで使用しますので、前述の評価ボード接続ピンに、既に使用済みという意味で黄色マークを付けました。

長くなりましたが、ここまでが、前置きです。これらの前置きを知ったうえで、STM32CubeMXで自由に設定できる灰色ピンの内どれを使うと、効果的な評価ボード開発ができるのかを明らかにするのが本記事の目的です。

STM32CubeMXのピン選択指針

STM32F072RBやSTM32F103RBのソフト開発の場合、最初にSTM32CubeMXで使用ピンを決め、コード生成をします。もちろん使用ピンは、コード生成後も変更できますが、変更のたびに再コード生成が必要です。再コード生成の手間は、できれば避けたいです。

こんな時、ピン選択の指針があると便利です。

前置き情報から、Arduinoピンを使うと、ブレッドボードやBaseboardとの接続が、オスーオス結線で簡単、市販Arduinoシールドも使えることが判ります。そこで、Morpho ピンで、Arduinoピンと共用しているピンを昇順に抜粋すると、下記になります。

GPIOA:            PA0/PA1/PA2/PA3/PA4/PA5/PA6/PA7/PA8/PA9/PA10
GPIOB:            PB0/PB3/PB4/PB5/PB6/PB8/PB9/PB10
GPIOC:            PC0/PC1/PC7/PC9

GPIOAが多数ですが、Arduinoピン名をみるとA0などのアナログ入力ピンとの共用が多いので、デジタル入出力と思われるD0~D15での共用が多いGPIOBから先に割り当てる方針を立てました。

BaseboardとのLCD接続

この方針でBaseboardのLCDと接続し、LCD出力した例を示します。本方針が、LCD接続では有効であることが判ります。

NUCLEO-F072RBとBaseboard接続しLCD出力
NUCLEO-F072RBとBaseboard接続しLCD出力

まとめ

開発中のSTM32Fxマイコンテンプレートは、テンプレート応用例としてシンプル/Baseboardテンプレートの2つを添付します。シンプルテンプレートは、評価ボード単体で動作しますので、使用する外部接続ピンに悩む必要はありません。

Baseboardテンプレートは、評価ボードとBaseboardを接続して動作させますので、効果的な接続方法として、評価ボード外部接続ピンの選択指針を検討しました。

デジタル接続なら、Arduinoピンとのデジタル共用が多いGPIOBから選択し、アナログ接続なら、GPIOAから選択する指針を示し、この指針に基づいてBaseboardのLCDと接続し出力を確認しました。

追記

評価ボードのArduinoとMorphoの共用コネクタ部分の回路図を抜粋したのが下図です。

NUCLEO64 Boardのコネクタ回路図
NUCLEO64 Boardのコネクタ回路図(ユーザマニュアルより)

評価ボード裏面のジャンパー(回路図のSBxxなど)を、工夫(オープン/ショート)すると、ArduinoピンとMorphoピンの共用ピンをさらに変更できることが判ります。よく考えられた評価ボードです。

ARM Cortex-M3低価格化への期待

ARM Cortex-M3の設計開始時ライセンス費用がCortex-M0同様、無償化されることが発表されました。

これにより、新たに商品化されるCortex-M3コアを使ったMCU価格が下がる可能性があります。Cortex-M0(ARMv6-M)を100%とする性能比較をみると、Cortex-M3(ARMv7-M)の性能向上比が大きいことが判ります。

Performance of Cortex-M
Performance of Cortex-M

RTOSやIoT通信などのMCU環境の変化を考慮すると、コストパフォーマンスに優れたCortex-M3を次期MCU選択肢に、より入れやすくなります。