STM32CubeMXのLow-Layer API利用法 (1)

STM32G0x専用テンプレートで使うSTM32CubeMXのLL(Low-Layer) API利用法を3回に分けて投稿します。

第1回:LL API初期化処理(本稿)
第2回:LL APIとHAL APIの違い
第3回:STM32CubeMXのLL API利用時注意点と第1回~第3回全体まとめ

第1回は、LL API初期化処理です。組込みソフトウェアは、初期化処理と無限ループ内処理の2つから構成され、LL APIでも汎用テンプレートで使ったHAL(Hardware Abstraction Layer)APIでもこの2構成は同じです。

LLとHALに関するSTマイクロエレクトロニクス(以下STM)資料は数多くあります。ただSTMは、STM32ソフトウェア開発は、基本的に「HAL API利用を推薦」していると思います。MCUハードウェア差を隠蔽でき、開発ソフトウェア移植性にも優れているからです。また、STM32CubeMXで生成する関数もHAL APIがデフォルトです。

STM32G0xシリーズLL API関連ソフトウェア資料一覧

筆者がそう考えるからかもしれませんが、STM32G0xシリーズのLL API関連資料は、投稿時点では未だ少ない状況で、リストアップすると表1の4個程度です。近くより小ピン小容量のSTM32G0xがリリースされますので、もっと多くなると期待しています。
※5番目のSTM32Cube ファームウエア テクニカル・プレゼンテーションにはLL API関連はありませんが、BSPやUSB制御をSTM32G0x専用テンプレートでも使う可能性を考慮して追加しました。

高性能ハードウェアを活かしコードサイズもHALより小さいSTM32G0x専用LL API関連資料4+1個の範囲でその利用法をまとめます。

表1 STM32G0xシリーズLL API関連ソフトウェア資料一覧(2019年3 月末)
資料名 概要
AN5110 STM32CubeMXで生成可能なSTM32G0公式サンプルプロジェクトの一覧表。HAL APIのみ、LL APIのみ、HALとLL混在などに区分けされたアプリケーションノート。
UM2303 STM32CubeMXを使いSTM32G0ソフトウェア開発着手時のユーザマニュアル
UM2319 STM32G0のHAL APIとLL APIユーザマニュアル
STM32Cube G0 Firmware Package STM32G0公式サンプルプロジェクト概要を示すオンライントレーニング資料
STM32Cube ファームウエア テクニカル・プレゼンテーション STM32シリーズSTM32CubeMXのHAL/BSP/ミドルウェア/USBライブラリの日本語解説書

STM32CubeMX LL API利用法の習得アプローチ

表1の概要を読むと、実践的にはAN5110のLL APIのみのサンプルプロジェクトとUM2303、万全を期すにはUM2319のLL API解説章の理解が必要です。

そこでLL API利用法は、実践的アプローチから着手し、不明な点やレファレンスが必要な時にUM2319を参照することにします。

STM32G0のLL API利用例:AN5110のExamples_LL

STM32G0x専用テンプレート動作確認評価ボードは、Nucleo-G071RBです。Nucleo-G071RBは、AN5110のExamples_LLで示されたLL API利用サンプルプロジェクト数が75個と掲載ボード中最も多いので前章アプローチに最適です。

これら多くのLL APIサンプルプロジェクトから、2つのGPIOプロジェクトに着目します。この2プロジェクトは、どちらも評価ボード実装済みLD4を250ms毎に点滅させます。

GPIOサンプルプロジェクト差
2つのGPIOサンプルプロジェクト差(※説明のため着色しています)

MXアイコンが付いているGPIO_InfiniteLedToggling_Initは、STM32CubeMXで生成可能、GPIO_InfiniteLedTogglingは生成不可です。その差は、Descriptionによると初期化処理(Initialization FunctionとUnitary Service Function)です。両者ソースコードの初期化処理を下図に示します。

GPIO_InfiniteLedToggling_InitとGPIO_InfiniteLedTogglingの初期化処理の差
GPIO_InfiniteLedToggling_Init(左)とGPIO_InfiniteLedToggling(右)の初期化処理の差

MX_GPIO_Init()が、STM32CubeMX生成可能プロジェクト、Configure_GPIO()が、生成不可プロジェクトの初期化処理です。

つまり、
・MX_GPIO_Init()=Initialization Function (generated by STM32CubeMX)
・Configure_GPIO()=Unitary Service Function (generated by User or by Peripheral Library)
です。※()内は、筆者が追記。

MX_GPIO_Init()は、STM32CubeMXが生成した初期化処理で、MX_が接頭語として付いていることからLLとHAL混在時でも使える関数です。一方、Configure_GPIO()は、MX_GPIO_Init()と同じ機能ながら少ないソースコードで記述できています。

その結果、Configure_GPIO()の方が、MX_GPIO_Init()よりも高性能で小サイズとなります(初期化処理以外は、どちらも同じ)。

MX_GPIO_Init()は、付属オリジナルSTM32CubeMXプロジェクトに変更を加えた時にでも中身はSTM32CubeMXが自動生成する関数で置換えられるだけで、MX_GPIO_Init()はそのまま残ります。一方、Configure_GPIO()は中身のユーザ修正が必要です。

結局、STM32CubeMXで生成可能なGPIO_InfiniteLedToggling_Iniプロジェクトは、ユーザが何らかの変更を加えても初期化処理をSTM32CubeMX任せにでき、無限ループ内にある変更処理に集中できる訳です。

STM32G0xのLL API利用法 (1):初期化処理まとめ

・初期化処理生成はSTM32CubeMXを使う方法と、高性能小サイズなユーザ自作方法の2つがある
・STM32CubeMX生成の初期化処理関数名は、HAL API混在時でも使用可能なMX_が接頭語
・STM32CubeMXを使うとプロジェクト変更時、無限ループ内処理のみに集中できる

STM32CubeMXは、LL APIまたはHAL APIの利用切替えが周辺回路毎に設定可能です。そこで、たとえLL APIのみ利用するプロジェクトでも、初期化処理関数の接頭語には、後々の周辺回路のHAL利用・変更・追加などに備えてML_を付けるのだと推測します。

LL API利用時、初期化処理をSTM32CubeMX任せにすると、ユーザ自作よりも多少サイズが犠牲になります。但しその差は、着目したプロジェクトGPIO_InfiniteLedToggling_Init:2808B、GPIO_InfiniteLedToggling:2604Bと微々(7.3%減)たるものです(SW4STM32 v2.8.1、STM32CubeMX v5.1.0、STM32G0 v1.1.0)。

公式サンプルプロジェクト応用が簡単にできることを考慮すると、その差を十分補える効果があります。

STM32G0x専用テンプレートのLL  API初期化処理方針

以上のことから、LL APIを利用するSTM32G0x専用テンプレートの初期化処理は、STM32CubeMX任せにします。

勿論、STM32G0x専用テンプレート用STM32CubeMXプロジェクトも添付いたしますので専用テンプレート応用・流用は簡単となります(汎用STM32Fxテンプレートは、既にテンプレート用STM32CubeMXプロジェクト添付済みです)。

訂正のお知らせ:STM32CubeMX 5.1.0でSTM32G0 1.1.0公式サンプルプロジェクト生成可能

前投稿で2019年3月末時点ではSTM32G0 V1.1.0の公式サンプルプロジェクト内の付属STM32CubeMX全プロジェクトファイルが未完成と書きましたが、一部改善されました。
つまり、公式サンプルプロジェクトExamples_LLがSTM32CubeMXで生成可能になりました。

お詫びして😔、訂正いたします。

STM32CubeMXは、起動毎に更新チェックやインストール済みのMCUパッケージを自動更新します。STM32G0 1.1.0のままプロジェクトファイルからの生成が可能に変わりましたので、STM32CubeMX本体が更新されたと思うのですが、版数はVersion 5.1.0のままで変わりません(何回か起動を繰返すと正常化するのかもしれません😅、同じ症状の方はお試しを…)。

なんにせよ、STM32G0x専用テンプレートで使うSTM32CubeMXのLL(Low-Layer) API開発には朗報に変わりありません。めでたしめでたしです。

朗報:STM32G0公式サンプルプロジェクトがSTM32CubeMXで生成可能

STマイクロエレクトロニクス(以下STM)の新MCU:STM32G0xシリーズだからこそできた快挙です。AN5110 – Rev 3 – February 2019で、STM32G0公式サンプルプロジェクトが、付属STM32CubeMXプロジェクトファイル(拡張子.ioc)で生成できるようになりました(Table 1のMXアイコン部分)。

AN5110のTable 1
AN5110掲載のTable 1(一部抜粋)

従来サンプルプロジェクトとSTM32G0サンプルプロジェクト比較

例えば、従来のSTM32F0公式サンプルプロジェクトは、エキスパート自作のもの(多分、むかしの標準ペリフェラルライブラリ利用)でした。STM32ソフトウェア開発は、今はSTM32CubeMXコード生成出力へユーザコードを追加する方式です。

従って、従来サンプルソースコードを利用するには、エキスパート作成の必要部分を解読後カットし、STM32CubeMXで生成した自分のソースコードへペーストして流用してきました。

AN5110は、この公式サンプルプロジェクトが、付属STM32CubeMXで直接生成できることを示しています。サンプルプロジェクト流用・活用が、これまで以上に簡単・便利になります。従来のソースコードカット&ペーストから、付属STM32CubeMX変更と生成コードへユーザコードを追加すれば済むからです。

STM32ソフトウェア開発の最重要ツール:STM32CubeMX活用に即した方法がAN5110と言えます。

2019年3月末時点では付属STM32CubeMXプロジェクトファイル未完成

重要なのは、ここからです。

3月末時点では、公式サンプルプロジェクト内のSTM32CubeMXプロジェクトファイルが未完成です。例えば、Table 1一番上のNucleo-G071RBのADC_AnalogWatchdogプロジェクト付属STM32CubeMXプロジェクトファイルを開いた様子が下図です。

ADC_AnalogWatchdogの.ico
図1 ADC_AnalogWatchdogサンプルプロジェクト付属STM32CubeMXプロジェクトファイルの.iocを開いた様子

このままコード生成してもADC_AnalogWatchdogサンプルプロジェクトはできません😴。

ADC_AnalogWatchdogプロジェクトだけではなく、全ての公式サンプルプロジェクトで同様です。

つまり、現時点では、残念ながら公式サンプルプロジェクト内の付属STM32CubeMXプロジェクトファイルは未完成です。公式サンプルプロジェクトの素:STM32G0 1.1.0改版を待たねば、AN5110は実現しません。
前投稿で書いたようにSTM32G0 1.1.0(2019/02/26)は、STMに買収されたAtollic TrueSTUDIOへも未対応でした(図1にTrueSTUDIOフォルダが無いことからも判る)。

新しいMCU発売にはありがちですが、開発に一番重要なツール完成には、開発元ベンダーであっても年単位の時間が必要です(AN5110 Revision historyより)。

STM32CubeMXを使って公式サンプルプロジェクトを生成するAN5110の方向性は、正しいと思います。
新MCU:STM32G0シリーズSTM32G0だけでなく、他の既存MCU:STM32F0/F1シリーズSTM32F0/F1などもこの方向の対応を期待します。

まとめ

以上のように、STM32G0x専用テンプレート開発環境は整いつつありますが、少し待ってから、具体的には、STM32CubeMXへインストールするSTM32G0xシリーズMCUパッケージ、STM32G0 V1.1.0改版を待ってから先へ進めた方が良さそうです。

この改版までの待ち時間は、STM32G0x専用テンプレート開発で使うLL(Low-Layer)APIの習得に充てます。

TrueSTUDIOとSTM32CubeMXインストール方法、STM32G0xとSTM32F0xの差異

STM32G0x専用テンプレートのIDE:TrueSTUDIOを使った開発環境構築手順も、汎用STM32Fxテンプレートのそれと同じです。

本稿はSTM32G0x専用テンプレート開発用IDE TrueSTUDIOとスタンドアロン版STM32CubeMXのインストール方法を示し、インストールしたSTM32CubeMXを使って同じ汎用MCUでもSTM32G0xとSTM32F0xのどこが違うかを具体的にまとめます。

STM32G0x専用テンプレートIDE:TrueSTUDIOを使った開発環境構築手順

2017年5月投稿のSW4STM32のIDE構築手順が左側、これがTrueSTUDIOに変わると右側になります。

表1 TrueSTUDIOとSTM32CubeMXインストール手順とSW4STM32構築時の比較
手順 SW4STM32で構築(2017年5月) TrueSTUDIOで構築(本稿)
1 SW4STM32インストールとUpdate TrueSTUDIOインストールとUpdate
2 STM32CubeMXプラグインとUpdate STM32CubeMXスタンドアロン版とUpdate
3 評価ボードMCUコアのライブラリダウンロード STM32G0パッケージのダウンロード
4 ライブラリのファイル構成確認 同左(しかし、当面見合わせ)
5 評価ボードデモソフト説明と構築環境の動作検証 同左(しかし、当面見合わせ)

差分はIDEと、STM32CubeMXスタンドアロン版をインストールする点、評価ボードがNucleo-F072RBからNucleo-G071RBに変わったので、STM32CubeMXへダウンロードするMCUパッケージにSTM32G0を加える点です。

前半で手順1~5の簡単な説明、後半は、インストールしたSTM32CubeMXを使って同じ汎用MCUグループのSTM32G0xとSTM32F0xが、電源ピン数やデフォルト使用周辺回路が異なることを示します。

手順1 TrueSTUDIOインストールとUpdate

Atollic TrueSTUDIO for STM32 9.3.0(2019/2/22リリース)は、atollicサイトからダウンロードボタンのクリックで入手できます。以後、Windows版で説明します。

ダウンロード後、インストーラを実行すると言語選択ダイアログが現れます。日本語を選択するとインストール後のTrueSTUDIOメニューも自動的に日本語化されます。
インストール後、ヘルプ(H)>更新の検査、をクリックしTrueSTUDIO を最新状態にします。

※TrueSTUDIOインストール検討中の方は、手順4を読んだ後に再検討してください。

手順2 STM32CubeMXスタンドアロン版とUpdate

コード生成ツールSTM32CubeMX V5.1.0は、SW4STM32と今回インストールするTrueSTUDIOの両方で使います。そこで、各IDEのプラグインではなく、スタンドアロン版としてインストールします。インストール方法は、UM1718 Rev28の3.2を参照してください。
インストール後、Help>Check for Updates、をクリックしSTM32CubeMXを最新状態にします。

※UM1718は、チュートリアルも豊富でSTM32CubeMXの重要マニュアルです。全356ページと分量は多いのですが、読む章を選択するなどして目を通すことをお勧めします。

スタンドアロン版はSTM32CubeMX更新が簡単で、1つのSTM32CubeMXで両方のIDEに生成ファイルを出力する時に便利です。

手順3 評価ボードMCUコアのライブラリダウンロード

評価ボードNucleo-G071RBのMCUコアは、Cortex-M0+です。STM32Fxと同じMainstream(≒汎用)MCUですが、新世代の汎用MCUです。
関連投稿:STM32G0x専用Edge MCUテンプレート開発

STM32CubeMXのHelp>Manage embedded software packagesでSTM32G0を選択し、最新版Package1.1.0をインストールします。

STM32G0インストール
STM32G0 MCU Packegae 1.1.0のインストール

手順4 ライブラリのファイル構成確認

STM32CubeMXは優れものソフトウェアで、IDEプラグインからスタンドアロン版へ途中変更してもデフォルトRepositoryディレクトリ(C:\Users\ユーザ名\STM32Cube\Repository)を変えなければ、プラグイン版Packagesの各MCUパッケージがスタンドアロン版へそのまま引き継がれます。

ただし今回のSTM32G0は、ライブラリファイル構成がSTM32F0/F1をインストールした時と一部異なります。

Repository/STM32Cube_FW_G0_V1.1.0\Projects\NUCLEO-G071RB\Templatesフォルダ内にTrueSTUDIOフォルダが無いのです(EWARM/MDK-ARM/SW4STM32は以前と同様有るが、UM1718にもTrueSTUDIO説明無し)。

残念ながら、手順3でインストールしたSTM32G0は、TrueSTUDIOへ生成コードを現状は出力できないようです😴。

SW4STM32の必然性
TrueSTUDIOではなくSW4STM32の必然性を示す結果となった

という訳で、手順4と5以降は、STM32G0がTrueSTUDIOへ対応した後に検証を行います。Communityによると次版のSTM32G0で対応予定だそうです。

STM32G0x専用テンプレート開発IDEに、SW4STM32からSTM買収後のAtollic TrueSTUDIOへの変更必要性を示すつもりが、今現在は、SW4STM32の使用を続ける必然性を示す結果となりました😴。

STM32CubeMXを使ったSTM32G0xとSTM32F0xの差異まとめ

TrueSTUDIOへ生成コードを出力しなければSTM32CubeMXに問題はないので、(個人的にはマルチOS対応SW4STM32が好きですし……気を取り直して…)、STM32CubeMXを使いSTM32G0xとSTM32F0xの違いをまとめます。

STM32G0xもSTM32F0xも共にMainstream、つまり、汎用MCUに属します。しかし、STM32CubeMXを使うと、評価ボード実装の同じ64ピンパッケージでも、電源ピン数やデフォルト利用の周辺回路が異なることが良く判ります。

Nucleo-G071RBとNucleo-F072RB差異
Nucleo-G071RB(左)とNucleo-F072RB(右)の利用ピン差異

Tips:STM32G0 1.1.0では、評価ボードNucleo-G071RB使用中のLD4(PA5)とB1(PC13)がPinout & Configurationに表示されません。その理由は不明ですが、手動で追加設定する必要があり上左図は設定済みのものを示しています。ちなみに、上右図Nucleo-F072RBは、LD2とB1がデフォルトで表示されます。

電源ピン(VDD/VSS)数

STM32G0xは、黄色で示された電源ピン(VDD/VSS)が1組、一方STM32F0xは4組あります。STM32G0xのCortex-M0+コアと70nmプロセスの結果、電力供給1組でも十分動作します。

不要になった電源ピンは、GPIOに変更し同じ64ピンパッケージでもSTM32F0xよりも多くの外部制御が可能です。

パッケージのピン配置

STM32G0xシリーズのパッケージピン配置が下図です。将来リリース予定の4パッケージピン配置は一貫しています。これにより、基板アートワークや周辺部品の配置も一貫した設計計画が立てられます。

電源ピンはどのパッケージでも1組で、左辺中央です。

STM32G0xシリーズパッケージピン配置(出典:STM32G0 and CubeMX Webinar)
STM32G0xシリーズのパッケージピン配置(出典:STM32G0 and CubeMX Webinar)

デフォルト利用周辺回路

STM32G0xのConnectivity(通信処理)は、デフォルトでLPUART1(Low Power UART、Stopモードからの再起動可)ですが、STM32F0xはUSARTです。STM32G0xもUSARTを実装していますが、低電力動作に適したLPUARTを推薦しているためと思います。

LPUARTとUSARTの差異(出典:STM32G0オンライントレーニング)
LPUARTとUSARTの差異(出典:STM32G0オンライントレーニング)

その他の差異

これら以外にも、STM32G0xは、USB Type-C™ Power Delivery controllerや2.5MspsのADC、メモリープロテクションなどIoT Edge MCU向きの周辺回路を実装済みです。

また、Nucleo-G071RB評価ボードのUSBはMicro-Bコネクタ、Nucleo-F072RBはMini-Bコネクタです。

USB Micro-BとMini-Bコネクタ(出典:ウィキペディア)
USB Micro-BとMini-Bコネクタ(出典:ウィキペディア)

まとめ

STM32G0x専用テンプレート開発に使うTrueSTUDIOとSTM32CubeMXインストール方法を示し、そのSTM32CubeMXを使ってSTM32G0xとSTM32F0xの差異を示しました。

STM32CubeMXは2重起動可能です。STM32G0xとSTM32F0xそれぞれのSTM32CubeMXプロジェクトファイルを同時に開いて比べると、各デバイスのデータシートで比べるより差異が早く良く判ります。

STM32G0x専用テンプレート開発IDEには、当面、筆者が好きなSW4STM32が適していることも判りました。

STM32G0x専用テンプレート開発全体像俯瞰

STM32G0x専用テンプレートの開発着手にあたり、汎用STM32Fxテンプレート開発から2017年9月のテンプレート発売までをざっと振り返り、今回の専用開発との差分になりそうな箇所を示しSTM32G0x専用テンプレート開発全体像を俯瞰、力を入れる投稿予定を示します。

汎用STM32Fxテンプレート開発History

汎用STM32Fxテンプレート開発時の主な投稿と内容
年月日 投稿タイトル 主な内容
2017年5 STM32マイコンIDE構築 SW4STM32の構築
2017年6 STM32CubeMXの使い方 HAL APIの選定理由と利用法
STM32CubeMX生成ファイルのユーザ追記箇所 HAL利用時のユーザ追記箇所
2017年8 評価ボードの利用ピン指針 Baseboardとの接続指針
2017年9 STM32Fxテンプレート発売 汎用STM32Fxテンプレート発売

2017年5月当時は、4種ある無償IDEの中からマルチOS(Windows/MacOS/Linux)対応、仏/AC6社のSW4STM32を使いました。2017年末、無償IDE TrueSTUDIO提供のスウェーデン/Atollic社がSTマイクロエレクトロニクス(以下STM)に買収され、公式にはTrueSTUDIOがSTM32マイコンの純正無償IDEに昇格(!?)したようです😅。

関連投稿:STM32のStep-by-Step Guideの、気になる点1:TrueSTUDIO参照

STM32G0x専用テンプレート開発IDE:TrueSTUDIO

そこで、STM32G0x専用テンプレート開発には、TrueSTUDIO無償版(Windows/Linux対応、MacOSなし)を使います。現在SW4STM32を使っている方にも判り易いようにTrueSTUDIOとの差分を説明する予定です。

但し、筆者はSW4STM32利用中の開発者が、あえてTrueSTUDIOに変更する必要は、今のところ少ないと考えています。ソフトウェア開発の主役は、STM純正コード生成ツールSTM32CubeMXだからです。最新STM32CubeMXを使えば、IDE差は少ないと今は思っています。

勿論、TrueSTUDIOの買収昇格時点でBetterなのは当然だと思います。専用テンプレート開発を通じBetterよりもSW4STM32からTrueSTUDIOへ変更するMust条件が判れば、本ブログでお知らせします。

Tips:STMの日本語資料強化の一環なのか、TrueSTUDIOはEclipseベースIDEなのにインストーラは日本語対応、メニューも日本語になっています(下図参照)。但し、C\ユーザ名\Atollic\TrueSTUDIO for STM32 9.3.0\Manuals\Generalにある重要マニュアル5種は全て英文です。例えば、SW4STM32プロジェクトのTrueSTUDIOインポート方法や注意点は、User GuideのP75~に英文で詳しく説明されています。

日本語対応のTrueSTUDIOメニュー
日本語対応のTrueSTUDIOメニュー

STM32CubeMX:LL API(Application Programing Interface)利用

STM32G0x専用テンプレートは、汎用STM32Fxテンプレート開発で使ったHAL(Hardware Abstraction Layer)APIに変わりLL(Low Layer)APIを使います。LL利用により、STM32CubeMX生成ファイルの初期化コードやユーザ追記箇所がHALとは異なります。LL APIの利用は、専用テンプレートの肝ですので、ブログで詳しく説明します。

IoTサービス例:2.5Msps12ビットADC必須+α

汎用STM32Fxテンプレートは、Baseboardと評価ボードを接続し、基本動作完成形のBaseboardテンプレートを開発しました。STM32G0x専用テンプレートは、Arduinoコネクタに何らかのIoTサービスを示すシールドを接続する予定です。しかし、最悪の場合、汎用と同じBaseboard接続にする可能性もあります。

ただし、特に2.5Mspsの12ビットADCは、3タイプある全STM32G0xデバイスに実装済みで、IoTサービス必須機能ですので、このADCを活かしたIoTサービスは実装必須にします。その他のIoTサービスに関しては、今後決めます。

2.5Msps12ビットADC (RM0444より)
2.5Msps12ビットADC (出典:RM0444)

STM32G0x専用テンプレート発売:2019/3Q~

汎用STM32Fxテンプレートは、5か月の期間で開発しました。STM32G0x専用テンプレートは、HALよりもLL API利用難易度が高いことを考慮すると、最低でも同じ開発期間が必要だと思います。

STM32G0x専用テンプレート開発全体像俯瞰の結果

以上、STM32G0x専用テンプレート開発の全体像を俯瞰しました。
SW4STM32からTrueSTUDIO IDEへの変更必要性、STM32CubeMX のLL API利用法、全STM32G0xデバイス実装済みでIoTサービス必須機能2.5Msps12ビットADC使用法、これらを読者の方々が理解できよう力を入れて投稿記事を作成します。

エレクトロニクス分析専門家が見るルネサス

本ブログに開発者の立場で何度かルネサスエレクトロニクス批判(本心は応援?)をしましたが、エレクトロニクス分析専門家、大山 聡氏(グロスバーグ代表)がEE Times Japanに寄稿された「なぜルネサスは工場を停止しなければならないのか ーー 半導体各社のビジネスモデルを整理する」で、数値分析結果を示され、明確な危機感・不安感に変わりました。

NXP、STMと大きく異なるルネサスのSG&A

SG&A(selling, general and administrative expenses)は、販売費及び一般管理費のことで、顧客に対するサポート負担経費を示します。売り上げ11%が業界平均なのに、ルネサスは19%と吐出しています。原因は、Intersil買収。巨額IDT買収は、今後の負担としてさらに悪化する方向になるようです。

関連投稿:ルネサスのIDE買収とリスク分散ルネサスエレクトロニクス、IDE買収

詳しくは、寄稿内にあるグロスバーグ作成の「主な半導体メーカーのR&Dおよび、SG&A比較」図を見ると一目瞭然です。

個人開発者としてルネサスの統合開発環境や評価ボードの価格の高さは、いかがなものか(でもルネサスを贔屓するバイアスはありました)と思ってきましたが、この寄稿を読んで国産MCUの先行きに不安感が大きくなりました。

技術的に勝っていてもビジネスでは成功しない例は、日本では多い歴史があります。

日立、三菱、NECの統合・融合したルネサス、日本全体の地盤沈下が見え隠れするなか、国産MCU技術力も同じ歴史をたどるのでしょうか?
もし自分がルネサスMCU研究開発担当なら、このままでライバルと競えると考えるでしょうか?

マイコンテンプレート発送方法変更のお知らせ

マイコンテンプレート発送方法に、米国時間3月12日正式リリースされたFirefox Sendを活用します。

Firefox Sendとは

Firefox Sendは、無償のファイル転送サービスで、1GBまで(アカウント作成で2.5GBまで)のプライベートファイルをクラウド暗号サーバーへ一時保存し、共有ダウンロードリンク発行、指定ダウンロード回数、または、有効期限が切れると自動的にサーバーからファイルを削除し、ダウンロードリンクも消滅する優れものサービスです。

Firefox Send
Firefox Send。最大1GBまでのプライベートファイル共有が簡単にできる。

これまでMozillaは、試験サービスを実施してきましたが、正式サービスとしてリリースしました。弊社も試験時、何度かテンプレートご購入者様に利用して頂きましたが、トラブルフリーでした。

正式リリースで安心してご利用頂けますので、今後はご購入頂いたマイコンテンプレート発送方法をFirefox Sendへ変更いたします。

Firefox Sendマイコンテンプレート発送方法

テンプレートご購入者側のご利用条件としては、「Chrome、Firefox、Edgeなどのモダンブラウザー」で共有ダウンロードリンクへアクセスし、テンプレート一式をダウンロードするだけです。

ファイルダウンロード方法
共有リンクへアクセスし ”ダウンロード” クリックでファイルダウンロードが始まる。

これまでのテンプレート発送方法は、ダウンロードリンク通知(弊社)→ テンプレート一式ダウンロード(お客様)→ ダウンロード完了メール通知(お客様)→ 共有リンク削除(弊社)の手間・手順が必要でしたが、この手間がお客様のテンプレート一式ダウンロードで完了します。

お客様のFirefox Sendご利用条件
・モダンブラウザー使用:Chrome、Firefox、Edgeなど
・ダウンロード回数:1回
・ダウンロードリンク通知後の有効期限:1日

※ダウンロードリンクのメール通知後、1日(24時間)以内にお客様にアクセスして頂こうと考えています。
※万一お客様がFirefox Sendダウンロードに失敗した場合には、再送信または、従来方法で再発送致しますのでご安心を。

お客様は、ダウンロード完了メール通知が不要となり、弊社もグラウド共有ファイルと共有リンク削除をFirefox Sendまかせにします。
1GB容量あれば、複数テンプレートの同時購入でも問題ありません。今後IoTサービス例を簡単に示せるEdge MCUテンプレートが複数追加開発されたとしても容量的には十分です。

お客様、弊社双方にとってテンプレート発送の手間が減り、暗号化ファイル・共有リンク削除でセキュリティも問題のない無償Firefox Sendサービス、活用したいと思います。

STM32G0x専用Edge MCUテンプレート開発

本稿は、STマイクロエレクトロニクス(以下STM)のSTM32G0xデバイス(Cortex-M0+/60MHz)が、汎用MCUのSTM32Fx(F0/Cortex-M0/48MHz、F1/Cortex-M3/72MHz)と異なり、IoT向きの新世代Edge MCUであること、そのテンプレート開発も汎用STM32Fxテンプレートと異なること、これら理由を説明します。

まとめ

はじめに内容をまとめた表1と表2、図1を示し、次章からその詳細理由を説明します。

要するに、STM32G0xデバイスのIoT Edge MCU向きの広いハードウェア性能を活かすには、LL(Low Layer)APIを利用したSTM32G0x専用Edge MCUテンプレート開発が得策だということです。

表1 STM32G0xデバイスとSTM32F0/F1デバイスのハードウェア差
デバイス名 製造プロセス コア 最大動作周波数 Edge MCU向き周辺回路
STM32G0x
デバイス
70nm Cortex-M0+ 60MHz 2.5Msps 12ビットADC、USB Type-C、暗号化処理
STM32F0/F1
デバイス
120nm Cortex-M0/M3 48/72MHz 特になし(汎用MCU)
表2 STM32G0x Edge MCUテンプレートとSTM32Fxテンプレートの違い
テンプレート名 使用API 流用性 動作確認評価ボード IoTサービス 重点ポイント
STM32G0x Edge MCU
テンプレート
LL(+HAL) 低い STM32G071RB 今後決める(TBD) STM32G0x性能発揮
STM32Fx
テンプレート
HAL 高い STM32F072RB
STM32F103RB
特になし(汎用) デバイス間移植・流用性
テンプレート開発の方向性
図1 テンプレート開発方向性。同じメインストリームMCUでもSTM32G0xデバイスは専用性、STM32Fxデバイスは汎用性重視。

STM32G0xデバイス(Cortex-M0+/60MHz)の特徴

STMの場合、新世代Edge MCUと従来MCUの最も異なる点は、製造プロセスです。STM32G0xは70nm、STM32Fxは120nmの製造プロセスです。

製造プロセスによる性能差は、Intelプロセサでお馴染みだと思います。ごく簡単に言うと、製造プロセスを小さくすると、全く同じMCUでも、動作周波数が上がり、消費電力は下がる、販売コストも下がるなど、良いこと尽くめの効果が期待できます。

さらにSTM32G0xは、Cortex-M0の電力消費を改良しCortex-M3の良さを取り入れたCortex-M0+コアを採用しています。つまり、コアと製造プロセスの両方でCortex-M0のSTM32F0デバイスを上回り、動作周波数をCortex-M3のSTM32F1デバイス72MHzに近い60MHzとしたことで、STM32F1と同程度の高性能なのに超低電力動作します。まさに新世代のIoT MCUです。

また、2.5Mspsの12ビットADC、USB Type-C、暗号化処理などEdge MCUに相応しい周辺回路を実装しています(3タイプあるデバイスで実装周辺回路を変え、低価格供給中)。

STM32G0xデバイスとSTM32F0/F1デバイスのハードウェア差をまとめたのが表1です。STM32G0x出現で、STM32F1/F0デバイスで開発する意味は、低下したとも言えるでしょう。
※但し、他デバイスへの移植性・流用性を重視した開発ならSTM32F1/F0デバイスを使い汎用STM32Fxテンプレート使う意味は依然として大きいです。

現在はSTMから何のアナウンスもありませんが、STM32G0xと同じ70nm製造プロセスでCortex-M3/≦100MHzの上位デバイスSTM32G1xが発売されれば、なおさら低下します。

関連投稿に上記特徴の出典などがあります。
関連投稿:守備範囲が広いSTM32G0
関連投稿:STM新汎用MCU STM32G0

STM32G0x専用Edge MCUテンプレートと汎用STM32Fxテンプレートの違い

STM32Fxテンプレートは、ハードウェア差を隠蔽するHAL(Hardware Abstraction Layer)APIを使い、万一性能不足などでデバイスを変える事態が生じても、同じソフトウェアを使えます。従って、STM32F0とSTM32F1の両デバイスで動作するアプリケーションが、ほんの少しの修正で素早く作成できます。

これは、HALのおかげです。HALがデバイスや周辺回路差を吸収するため、アプリケーション側は移植性の高いシンプルな記述ができるのです。その副作用として、アプリケーション記述コードは少なくてもコンパイル後のコードサイズは、周辺回路を直接制御するLL(Low Layer)に比べ大きくなります。

関連投稿:STM32CubeMXの使い方、STM32CubeMXの2種ドライバライブラリの章参照

HALを使うと言うことは、たとえデバイスが変わっても開発したソフトウェアとその労力を無駄にせず、流用・応用できることが最大のメリットです。

汎用「STM32Fxテンプレート」は、この流用・応用に適したテンプレートです。動作確認評価ボードは、STM32F072RBとSTM32F103RBのみですが、全ての汎用STM32Fxデバイスへ応用できます。勿論、ここで示したSTM32G0xデバイスにもこのHALを使う手法は適用可能です。

一方、「STM32G0x専用Edge MCUテンプレート」は、LL APIを使います。つまり、STM32G0x専用のテンプレートです。※LL APIは、使用デバイスにより異なるので専用テンプレートになります。

STM32G1xデバイスが持つCortex-M0からCortex-M3までをカバーする広い適用力と超低電力動作を活かすには、ソフトウェア開発にHAL比60~80%の高速処理のLLを使った方が得策と判断しました。

つまり、STM32G0xデバイスをEdge MCUと認め、そのSTM32G0xの性能や能力を十分に発揮する専用テンプレートがSTM32G0x専用Edge MCUテンプレートです。
※但し、流用性が高い一部機能には、HAL活用も考慮中です。LLとHALは混在可能です。

STM32G0x専用Edge MCUテンプレートと汎用STM32Fxテンプレートの違いをまとめたのが表2、テンプレート開発の方向性を示したのが図1です。

STM32G0x Edge MCU評価ボード選定

STM32G0x専用Edge MCUテンプレートの動作確認評価ボードには、Nucleo-G071RB(¥1,203)を予定しています。

前投稿で示したEdge MCUテンプレート評価ボードの3要件を再掲します。

  • R1. 低価格、入手先豊富なEdge MCU評価ボード <¥3,000
  • R2. 最新Edge MCU使用(2018年後半の新しいIoTトレンドに沿って開発されたEdge MCUであること)
  • R3. 何らかのIoTサービス例を簡単に示せる

これら3要件のうち、R3:何らかのIoTサービス例を示す要件がNucleo-G071RB 単独ではNGですが、Arduinoコネクタに何らかのIoTサービスシールドを追加することで満たす予定です。

評価ボードNucleo-G071RB
評価ボードNucleo-G071RB。64ピンパッケージでも電源供給が2本のみのなのでアートワーク担当者が喜ぶ。

※STM32G0xデバイスの評価ボードで、IoTのUSB Type-Cサービスを示すSTM32G0 Discovery Kitや、暗号化処理サービスを示すSTM32G081B-EVALは、両方ともR3要件を満たしますが、価格要件R1<¥3,000を満たさないので利用を断念しました。

Edge MCU評価ボード要件と検索方法

前稿で示したEdge MCUテンプレート構想を具体化します。MCU動作だけでなく、IoTサービス例を、開発者個人が、低価格かつ簡単に示すことを目的とするこの新しい「Edge MCUテンプレート」は、弊社が従来から販売してきた「汎用MCUテンプレート」のアプローチとは少し異なります。

それは、テンプレート出力がMCU動作だけでなくIoTサービスも含めるからです。たとえEdge MCUであっても普通のデバイスです。ベンダーは、その評価ボードでEdge MCUの特性を活かしたIoTサービスを示す場合が多いです。
従って、Edge MCUテンプレートのポイントは、いかに上手くIoTサービスを示すベンダー評価ボードを選べるかに掛かっています。

本稿は、Edge MCUテンプレートに用いるEdge MCU評価ボードの3要件と、これら要件を満たす評価ボード検索方法を示します。

Edge MCUテンプレートに用いるEdge MCU評価ボードの3要件

以下3要件を、Edge MCUテンプレートに用いるEdge MCU評価ボードと考えます。

  • R1. 低価格、入手先豊富なEdge MCU評価ボード <¥3,000
  • R2. 最新Edge MCU使用(2018年後半の新しいIoTトレンドに沿って開発されたEdge MCUであること)
  • R3. 何らかのIoTサービス例を簡単に示せる

要件(Requirements)を満たさない場合は、どの項目がNGかが解れば、開発者や場合によってはOKの場合もあります。¥3,000が低価格かは懐具合次第ですし、開発年度が新しいか古いか、何らかのIoTサービスなど、全て主観です。

ただ主観であっても、Edge MCU評価ボード選択にあたりR1~R3の要件があると、採否が簡単になります。仮に、最新Edge MCUでは無いが、低価格でIoTサービスも示せる評価ボードがあった場合には、「R2_NG」だが採用するなどの特例も取れます。そこで次に、この3要件を満たすEdge MCU評価ボードを効率的に選ぶ方法を示します。

3要件を満たすEdge MCU評価ボード検索方法

最新Edge MCUで、R1~R3要件を満たすEdge MCU評価ボードを選ぶには、Mouserの新製品(メーカー別)ページが便利です。DigiKeyやチップワンストップにも同様ページがありますが、サムネイル写真と概要付きなのでMouserが最も使いやすいと思います。

Mouser新製品ページ
Mouser新製品(メーカー別)ページ。メーカーロゴクリックで集計される。カテゴリ別や週別でも選べて便利。

例えば、STマイクロエレクトロニクス(以下STM)をクリックすると、「発売日順」にサムネイルと商品名、概要が列挙されます。この中から、Edge MCUテンプレートに使えそうな評価ボードの商品詳細を読み、3要件で採否を判断すれば良いという訳です。

STマイクロエレクトロニクスの発売日順検索結果
STマイクロエレクトロニクスの発売日順検索結果。写真、製品名、概要が判る。

守備範囲が広いSTM32G0投稿で示したNucleo-G071RB(¥1,203)もこの方法で上位ページ、つまり新商品順に表示されるので、直に探せます。
※年始には1ページ目上部に示されたNucleo-G071RBが、2ページ目下部に示されました。STMは他ベンダー比、新製品が多いのにも驚かされます!
※このようにベンダー毎の新製品数、評価ボード搭載デバイスの単体価格なども簡単に分かる点がマウザー新製品ページの利点です。

NXP、サイプレス、ルネサスとベンダーを変えて上記検索をすれば、R1~R3要件を満たすEdge MCU評価ボードが簡単に見つかります。

ルネサスは投稿時3要件を満たすEdge MCU評価ボードなし

残念ながらベンダーをルネサスで検索しても、2月末時点では価格要件:R1を満たすEdge MCU評価ボードが見つかりません。

例えば、RL78ファミリのロードマップ投稿で示したRL78/G11評価ボードYQB-R5F1057A-TB(¥3,961…!)やYRPBRL78G11(¥6,437)※秋月電子でも¥4,320は、ともに¥3,000を超えます。

また、低価格がセールスポイントのRX評価ボードTarget Board for RX130/231/65NでもR1を満たしません。

つまり、ルネサスEdge MCU評価ボードは、他ベンダー比、どれも価格高めです。企業レベルでの購入なら問題ないでしょう。しかし、これら価格は、実装部品から推測しても“個人開発者は顧客として眼中に無いのでは(!?)”、とも疑われるコスパだと思います。

※東洋経済Online2月19日に、ルネサス急ブレーキのしかかる1兆円買収記事が掲載されています。ルネサスを応援したいのですが、Edge MCU評価ボード入手も含め、手を出しにくい状況です。

サイトHTTPS化とPHPバージョンアップ

2月最終週から弊社サイトをSSL化し、HTTPSサイトの新サーバーへ移行しました。
お客様側の対応(ブックマーク、URLの変更など)は一切不要です。http://アドレスのままでも新しいhttpsサイトへ自動的にリンクされます。

HTTPS化の目的

変わった点は、ブラウザ:アドレスバーが、http://happytech.jp/…から、https://happytech.jp/…(s付き!)になり、ネット経由の情報に暗号化処理が施されセキュリティが向上したことです。また、キーワードのGoogle検索結果が、上位表示になる期待もあります。

より安全、安心に弊社サイト、ブログの閲覧をお客様へ提供する機能として、遅ればせながら導入いたしました。

PHPバージョンアップ完了

ブログ利用中のWordPressが5.1へ更新され、使用PHPバージョンも2019年4月からPHP 5.6以上、12月以降はPHP 7.0以上が必要です。この要件を満たすには、新サーバーへの移行(引っ越し)が必須でした。
※実は、サーバー移行はこのPHPバージョンアップが主目的で、HTTPS化は副次的でした。

サーバー移行は、新旧サーバーデータ完全一致 → 切替え → 新サーバー動作確認 → 旧サーバー削除などの作業のため約1週間必要で、2月最終週に行いました。週一ブログ投稿は、お休みを頂きました。

新サーバーのWordPress関連スペックは下記で、当分の間は問題なくブログWordPress運用が可能です。
・Apache: 2.4.27
・PHP: 7.1.9
・MySQL: 5.7.3

新サーバーでのサイト、ブログ、メーラともに動作確認は完了しましたが、見逃し、不具合があるかもしれません。
少しでも変だなと思われた方はお気軽に、info@happytech.jpまで教えてください。よろしくお願いいたします。