STM32MCUのアンチ・タンパ機能

STマイクロエレクトロニクス(以下STM)のSTM32MCUマンスリー・アップデート最新10月号から、アンチ・タンパ機能を紹介します。

関連投稿:「日本語マイコン関連情報」のSTM32マイコン マンスリー・アップデート

タンパとは

タンパ:tamperとは、(許可なく)いじくることです。例えば、MCUパッケージをこじ開けるなどの行為(=タンパイベント)を検出した場合、内部バックアップ・レジスタを全消去し、重要データが盗まれるのを防ぐのがアンチ・タンパ機能です。MCUハードウエアによるセキュリティの一種です。

※マンスリー・アップデート10月号、P13の“STM32のココが便利”、今月のテーマ:~その2~参照

セキュリティの重要性がユーザで認識されつつあるので、開発者としては、「タンパ保護」、「アンチ・タンパ」、「RTCレジスタ保護」、「GPIO設定ロック」などのキーワードは覚えておくと良いでしょう。基本機能実装後にセキュリティを追加する時や、他社差別化に役立つからです。

STM32MCUのセキュリティ機能

マンスリー・アップデート9月号、P12今月のテーマにもセキュリティ機能がありますが、これはSTM32MCU独自というより、ARM Cortex-MコアMCU全てに実装の機能です。STM32MCUと他社の差別化には使いにくいと思います。

差別化に適すのは、ARM Cortex-Mコア以外の周辺回路です。そこで、RTCとGPIOについて、本ブログ掲載中の評価ボード実装MCU、STM32F072RB(Cortex-M0)とSTM32F103RB(Cortex-M3)のタンパ機能設定方法をデータシートで調べました。

出典:STM32F071x8 STM32F071xBデータシート 2017/1版
出典:STM32F103x8 STM32F103xBデータシート 2015/8版

関連投稿:STM32マイコンの評価ボード選定

RTC

MCUで処理実時刻を記録する場合などには、RTCが便利です。

RTCのアンチ・タンパ機能は、アラーム・タイムスタンプとRTCレジスタ保護の2つがあります。RTCレジスタ保護は、RTCレジスタへのアクセス手順のことです。RTC利用時、通常レジスタと異なる面倒な手順でRTCレジスタを設定しているのをサンプルソフトで見た記憶があります。

アラーム・タイムスタンプは、タンパイベント発生時のカレンダーを記録する機能です。但し、データシート内の説明は少なく、実際にソフトウェアでどのように設定すれば機能するかは不明です。

試しにSTM32CubeMXでSTM32F072RBのRTCを設定すると、Tamper 2のみ設定可能です。ヘルプ資料UM1718の説明も少なく、やはり詳細は不明です。
但し、将来アンチ・タンパ機能を実装するなら、Tamper 2に連動してアクティブ化するPA0ピンは、リザーブした方が良さそうです。

STM32F072RBのTamper 2とPA0
STM32F072RBのTamper 2に連動してアクティブ化するPA0ピン

同じ理由で、STM32F103RBならPA13ピンをアンチ・タンパ機能用にリザーブできると良いでしょう。

GPIO設定ロック

GPIO機能を固定するGPIO設定ロックについては、データシート内をTamperで検索してもヒットせず記述もありません。

まとめ

STM32MCUのアンチ・タンパ機能を、STM32マイコン マンスリー・アップデートから抜粋、解説しました。

ユーザがMCUセキュリティを重視しつつあるので、STM32MCUハードウエアが提供するセキュリティの一種であるアンチ・タンパは、他社差別化機能として役立つと思います。

そこで、STM32F072RBとSTM32F103RBのRTC/GPIOソフトウェアでのアンチ・タンパ設定方法をデータシートで調査しましたが、具体的情報は得られませんでした。

対策として、RTC/GPIOサンプルソフトから設定を得る方法があります。但し、ソースコードには、アンチ・タンパ機能の目的や、なぜ面倒な設定手順が必要かについての記述は無いので、マンスリー・アップデートのアンチ・タンパ、RTCレジスタ保護やGPIO設定ロックの理解が、サンプルソフト解読に必要だと思います。

投稿記事の表示、検索方法

本ブログは、マイコン:MCU関連情報をWordPressというソフトウェアを使って投稿しています。今回は、WordPressブログ投稿記事を効率的に表示、検索する方法を3つ示します。

※WordPressは、ブログサイト制作時に便利なツール。機能追加が容易なプラグインや、外観を簡単に変更できるテーマが多数あるので、カスタマイズも容易で、運営者が投稿のみに専念できる。

カテゴリ選択

各投稿の下には、カテゴリとタグ(キーワード)が表示されています。

投稿カテゴリーとタグ
各投稿の下に表示されるカテゴリーとタグ

カテゴリ選択は、1つのMCU投稿をピックアップして表示する最も簡単な方法です。

例えば、カテゴリのRL78マイコンをクリックすると、日付の新しい順にRL78関連投稿のみが表示されます。PCなどの大画面表示の時は、左端にカテゴリ一覧が表示されるので選択が簡単になります。

PCのカテゴリ表示
MCU毎の投稿を簡単にピックアップできるPCのカテゴリ表示

カテゴリ選択でブログを表示すると、興味のあるMCU投稿がまとまるので便利です。投稿数が多い時は、複数ページに渡りピックアップされます。表示ページ一番下に複数ページへのリンクが表示されます。

複数ページのリンク
カテゴリ投稿数が多い時に表示される複数ページのリンク

ページ番号が大きい、つまり日付の古い投稿は、そのMCUの選択理由や、IDE:統合開発環境インストール方法など最も基本的でMCU開発初期に必要となる情報が記載されています。古い順に読むとより容易にMCU理解が進むかもしれません。

タグ選択

カテゴリとは別に、投稿下にタグと呼ばれる、いわゆるキーワードが示されています。

投稿のタグ(キーワード)
各投稿の下に表示されるタグ(キーワード)

投稿内容で興味が湧いたキーワード(例:リアルタイムOS)がこのタグ内にある場合は、タグをクリックすると、キーワードにより投稿記事がまとめられます。タグ検索は、複数カテゴリに跨った横断的な検索方法です。

自分の興味があるMCUと他社MCU比較などに使うと便利です。

検索窓

ブログ右上にあるSearch:検索窓を使っても投稿の検索ができます。

検索窓
検索窓による投稿記事検索

タグに無いキーワードや、2018年4月など時期を検索窓に入力してクリックすると関連投稿が表示されます。

まとめ

ブログ投稿記事を効率的に表示、検索する方法を3つ示しました。

  1. カテゴリ選択:MCU毎の投稿まとめに最適
  2. タグ選択:キーワードでの横断的な複数MCU比較や理解に適す
  3. 検索窓:タグ以外のキーワードや、投稿時期での検索に適す

本プログは、複数MCUの内容を、時系列で投稿するので、興味ある対象が様々な雑音で読みにくくなる可能性はあります。この場合には、上記3方法で投稿をまとめると読み易くなると思います。

また、手動で関連する投稿を添付する場合もあります(関連投稿を自動選択するWordPressプラグインもありますが使っていません)。

但し、技術者リスク分散の点からは、雑音も耳に入れておくのも良いと思います。どの投稿もチョットした空き時間で読めるように、A4で1~2ページの文章量です。本ブログをご活用いただき、MCU情報整理やプロトタイプ開発に役立つマイコンテンプレートに興味を持っていただければ幸いです。

関連投稿:ルネサスのIDE買収とリスク分散:技術者個人のリスク分散必要性の章参照

Windows 10 1809更新とマイコンIDE

Windows 10 1809更新

Windows 10のRed Stone最後の大型更新RS5 、Windows 10バージョン1809配布が始まりました。

1809更新2方法

Windows Updateで更新

Windows Update更新プログラムのチェックで1809への更新が開始されます。
但し、これは運が良ければの話で、PCの更新準備が整っていても「最新の状態です」が表示され更新を待たされる場合があります。

手動で更新

Windows 10 October 2018 Updateの今すぐアップデートをクリックし、アップデートツールをダウンロードすると、手動で1809更新開始ができます。

1809更新時間と操作

どちらの方法でも、1809プログラムのダウンロードとインストールに1時間、その後、再起動して新しいWindows 10 1809の自動設定に1時間、合計約2時間程度かかります(PCや通信リンク速度によって異なりますので目安です)。

ダウンロードとインストール中は、通常のPC操作やソフトウェア開発は可能です。再起動は、自動的に始まります。
つまり、何らかの操作を行っている場合は、再起動前に終了しなければなりません。

新Windows 10自動設定中は、PC操作はできませんし、操作不要で設定完了します。
つまり、再起動したら1時間は待つしかありません。

Windows 10 1809の各社マイコンIDE動作

ブログ掲載中マイコンIDE(ルネサス:CS+、NXP:LPCXpresso、Cypress:PSoC Creator、STM:SW4STM32)は、私のWindows 10 1809では正常に動作しました。

ルネサスのIDT買収とリスク分散

ルネサスエレクトロニクス(以下ルネサス)が米)IDT買収を発表したことは9月13日投稿済みです。
この買収にはいろいろな憶測が報じられています。これらをまとめ、技術者個人でのリスク分散を考えます。

ルネサスのIDT買収関連記事(2018年9月28日現在)

どの記事もルネサスのIDT買収を、社長兼CEO呉文精氏コメントのように肯定的には捉えていません。むしろリスクの方が大きく、買収が成功するかを危ぶむ声さえあります。

IDT技術のルネサス車載MCUへの応用/流用よりも、むしろNVIDAやインテルなど大手半導体メーカーの自動車半導体市場介入に対する衝突回避/防衛が真の買収目的だ、が各記事の主張です。

私は記事内容から、なぜ回避や防衛ができるのかはイマイチ理解できません。ただ巨大な買収額が、経営的な足かせとなる可能性があることは解ります。半導体業界の巨額買収は、ルネサスに限った話ではありません。

かなり昔、デバイス間通信にIDTの2ポートRAMを使った経験があり便利でした。IDT買収の日の丸MCUメーカー最後の生き残り:ルネサスエレクトロニクスには頑張ってほしいと思います。

技術者個人のリクス分散必要性

動きの激しいMCU半導体製品を使う技術者個人が生き残るには、リスク分散が必要だと思います。

例えば、業務で扱うMCU以外の開発経験を持つのはいかがでしょう。万一の際にも通用する技術を個人で準備しておくのです。その際には、手軽で安価、しかも実践応用もできることが重要です。

弊社マイコンテンプレートは、下記大手4メーカー6品種の汎用MCUに対応中です(各1000円税込)。

  • ルネサス)RL78/G1xテンプレート
  • NXPセミコンダクターズ)LPC8xxテンプレート
  • NXPセミコンダクターズ)LPC111xテンプレート
  • NXPセミコンダクターズ)Kinetis Eテンプレート
  • サイプレス・セミコンダクター)PSoC 4/PSoC 4 BLE/PRoCテンプレート
  • STマイクロエレクトロニクス)STM32Fxテンプレート
    ※各テンプレートに紹介ページあり

テンプレートを使うと新しいMCU開発を実践、習得できます。経験が有るのと無いのとでは雲泥の差です。
リクス分散の1方法としてご検討ください。

MCU統合開発環境の後方互換性検証

MCU統合開発環境は、後方互換が重要です。数年前に開発したプロジェクトを改良・改版する際には、最新の開発環境(IDE)でも開発当時と同じ動作が求められるからです。

ベンダー各社もこの点に留意してIDE改版を行っているハズです。ただ、リリースノートにも具体的な互換性説明などは見当たりません。そこで、MCU最新IDEの後方互換性を検証します。

本稿は、ルネサスエレクトロニクス(以下、ルネサス)の最新IDE:CS+に、弊社2015年開発のRL78/G1xテンプレートプロジェクトを適用し、発生するメッセージなどを示し、開発当時と同じ動作をするかを確認します。もちろん、これはあくまでも一例にすぎませんが、開発中にIDE更新に遭遇した際などの安心材料になれば幸いです。

ルネサス統合開発環境CS+

2018年9月最新ルネサスIDE CS+は、Ver.: V7.00.00(2018/07/20リリース)です。CS+は、業界標準のEclipseベースIDEではなくルネサス独自開発のIDEです。

好都合なことにWindows 10 1803をクリーンインストールしたので、まっさらなWindows 10へ最新CS+をインストールした条件で検証ができます(1803クリーンインストール顛末はコチラを参照)。

CS+ダウンロードサイトでカテゴリ:無償評価版を選び、分割ダウンロードか一括、CS+ for CCかCS+ for CA,CX のどれかのパッケージをダウンロード後、実行すれば必要なツール全てがWindowsへインストールされます。

統合開発環境CS+パッケージ
統合開発環境CS+パッケージ(一括ダウンロードの例)

関連投稿:CS+ for CCとCS+ for CA,CXの違い

既存プロジェクトを新しいCS+で開いた時のメッセージ

以下CS+ for CCの例で示しますが、CS+ for CA,CXでも同じです。

既存のプロジェクトを開く
既存のプロジェクトを開く。BB-RL78G13-64.mtpjをクリック。

CS+ for CCを起動し、既存のプロジェクトを開くでRL78/G1xテンプレートプロジェクトのCC-RLを選択すると、最初に警告メッセージが表示され、出力パネルにその内容、プロジェクト開発当時と新しいCS+での「プロジェクトの差分情報」が表示されます。

既存プロジェクトを開いた時に表示されるメッセージとその内容
既存プロジェクトを開いた時に表示されるメッセージとその内容

※“プロジェクト差分情報”は、新規CS+をインストールした時だけでなく、プロジェクト開発中にCS+更新に遭遇した際にも表示されます。

黒字の “デバイス・ファイルが更新……”は、CS+がサポートするMCUデバイスが増えたために発生します。あまり気にする必要はありません。

青字の “プロジェクト差分情報”は、新しいCS+を用いた結果、既存プロジェクトに生じた差分、影響のことです。

例えば、CS+のCC-RLコンパイラが改良・改版され、開発当時のコンパイル・オプションには無かった [間接参照を1バイト単位で行う] 選択肢が発生し、これに関しては、「いいえ」を選択したことなどが解ります。

これらの選択は、基本的に既存プロジェクトに影響が無い(少ない)方をデフォルトとしてCS+が選びます。このデフォルト選択が、CS+の後方互換を実現している鍵です。

後方互換の検証:プロジェクトビルド成功と評価ボードの動作確認

そのままビルド(B)>ビルド・プロジェクト(B)を実行すると、サブプロジェクトを含め全プロジェクトがリビルドされます。出力パネル青字は警告:Warring、赤字はエラー:Errorを示します。

全プロジェクトビルド結果
全プロジェクトビルド結果

出力パネルに赤字が出るのは問題ですが、青字内容に問題がなければ、新規CS+でもプロジェクトが正常にビルドできたことを示します。

そこで、ターゲット評価ボードへビルド出力をダウンロード、既存プロジェクト開発当時の動作確認ができ、最新CS+で後方互換が検証できました。

CS+の便利機能

ルネサスCS+には、プロジェクトと開発ツールをパックして保存する便利な機能があります。

CS+の便利機能
CS+の便利機能。プロジェクト開発時の環境を丸ごとそのまま保存できる。

この開発ツールとは、使用中の統合開発環境のことで、文字通りプロジェクトとCS+、デバイス・ファイル情報などのプロジェクト開発時の環境を丸ごとそのまま保存し、復元もできます。
但し、当然OS:Windowsまでは保存しなので、年2回の大規模OS更新やWindows 7サービス終了などには開発者自ら対応する必要があります。

後方互換とプロジェクト開発方針

IDEの後方互換は、開発者にとっては当然のことです。ただし、改良・改版された最新コンパイラ性能を、既存プロジェクトで最大限引き出しているかは疑問を持つ方もいるでしょう。個人的には、この点について以下のように考えます。

  • プロジェクト開発時、使用する統合開発環境のコンパイル・オプションは、最適化も含めてデフォルト設定で開発。
  • サイズ優先や速度優先の設定は、開発の最終段階で必要性がある時にのみ最小限設定し、その設定をソースに明記。

例えば、弊社マイコンテンプレートは、1つを除いて全て上記方針で開発しています。除いた1点とは、NXPのLPC8xxテンプレートのLPC810(ROM 4KB/RAM 1KB)の小ROMデバイスの1段最適化のみです。テンプレート(ひな形)の性質上、いろいろなプロジェクトへの適応性が高いのもこの方針の理由です。また、デフォルト設定と最小限設定なので、結果的に最新統合開発環境への後方互換も取りやすいと言えます。

経験上、コンパイル・オプションを操作して開発したトリッキーなプロジェクトは、設計段階(MCU選択やプログラム構成)の失敗だと考えています。個人的には、デフォルト設定で十分余裕(50%程度)がある設計がお勧めです。これを確かめるためにも、プロトタイプ開発は重要だというのが私の考えです。

MCU統合開発環境、後方互換のまとめ

MCU統合開発環境(IDE)とWindows環境の年間メジャー更新スケジュールは下図です(2018年7月9日投稿の再掲)。

主要開発環境の年間更新スケジュール
主要開発環境の年間更新スケジュール

プロジェクト開発中にこれら更新に遭遇することは少なくないでしょう。本稿は、ルネサスCS+を例に最新IDEの後方互換性を確認しました。EclipseベースのIDEでも同様です。まとめると、

  • IDE更新後、最初に既存プロジェクトを開く時の差分情報で、プロジェクトに生じた差分、影響を分析し、後方互換を検証
  • コンパイル・オプションはデフォルト設定が、更新された統合開発環境の後方互換を取りやすい

ことを示しました。

最新ARM Cortex-Mマイコン動向とIoT MCUを特徴付ける3要素

最新ARM Cortex-Mマイコン:MCU製品からその動向を調査します。前稿ルネサスエレクトロニクス(以下ルネサス)RL78ファミリの汎用MCU変遷に続き、ARM Cortex-MコアMCU編という位置づけです。最後に両者を比較し、IoT MCUを特徴付ける3要素についての私見を示します。

最新ARM Cortex-Mマイコン製品の特徴

本ブログ掲載中のベンダ各社とMCUです。

ブログ掲載中の各社MCU
ブログ掲載中の各社MCU

ルネサス以外は、全てARM Cortex-Mコアを用いています。これらをARMコア製品、一方ルネサスはNon ARMコア製品と呼ばれます。現在のMCUは殆どがARMコア製品です。

各社ともIoT向けのMCU新製品を発売中です。その中からNXPセミコンダクターズ(以下NXP)のLPC51U68 MCU(2018年3月発売)をピックアップし特徴を抽出します。

LPC51U68は、8/16ビット置換えを狙う低消費電力Cortex-M0+コアを最大100MHz動作まで高め、USB2.0、256KB ROM、96KB RAM実装、12bit 5Mspsと高機能ADC内蔵のMCUです。

LPC51U68 MCU Block Diagram (出典:LPC51U68 Fact Sheet)
LPC51U68 MCU Block Diagram (出典:LPC51U68 Fact Sheet)

コア速度のアプリケーション対応(置換えからIoT市場開拓へ)

32ビットCortex-M0/M0+コア本来の目的は、既存8/16ビットMCUの置換えです。従ってこれまでは、既存MCU(例えばルネサスS1/S2/S3コア)速度と同等の30~50MHzがCortex-M0/M0+コア動作速度でした。しかし、NXPはより低速で低消費電力な8MHzや15MHzのコア速度の新製品を発表しました。

関連投稿:8MHz Cortex-M0+コア採用のLPC8N04

関連投稿:15MHz Cortex-M0+コア採用のLPC80x

つまり、既存MCU置換えだけでなく、よりアプリケーションに適したコア速度採用のARMコア製品の一環として開発されたのが紹介した100MHz動作のLPC51U68です。

ARMコア製品は、8/16ビット置換えから、IoTアプリケーション市場開拓への展開も始めたと言えるでしょう。

IoT向きの周辺回路実装(汎用からIoTアプリケーションMCUへ)

従来MCUもUSB接続でプログラムダウンロードやデバッグはできます。これらに加えLPC51U68のUSBは、USB 2.0ホスト機能もライブラリで提供します。PC同様、USBキーボードやデータロガー用に簡単に大容量USBメモリがMCUに接続できるので、HMI(Human Machine Interface)に優れたIoTデバイスが開発できます。

ADCもE-meterなどにも使いやすいような高機能版が用いられています。

ROM/RAM容量が増えるのは、これらIoT向け周辺回路を制御・活用するために必要で、副次的なものと言えるでしょう。

評価ボードLPCXpresso51U68 (OM40005) Development Board価格も¥3,518(DigiKey調べ)であることから、これだけ機能が増えても、従来ARMコア製品と同レベルで入手できると思われます。

LPCXpresso51U68 (OM40005) Development Board
LPCXpresso51U68 (OM40005) Development Board

最新ARM Cortex-Mマイコン動向まとめ

NXP)LPC51U68だけでなく、競合他社Cortex-M0/M0+/M3新製品についても同様の傾向が見られます。最新Cortex-Mマイコンの動向をまとめたのが下記です。

  1. IoTアプリケーションのためコア動作速度を数MHz~100MHz超の範囲で電力消費最適化
  2. USBホスト機能や高機能アナログなど、IoTアプリケーション対応高機能周辺回路を実装

一方、前稿Non ARMコア製品のルネサスMCU動向をまとめると、

  1. 低消費電力16ビットS1/S2/S3コアの使い分けで、きめ細かな電力消費へ対応
  2. アナログ機能やモータ制御機能を追加実装し、IoTアプリケーションMCUへ展開

どちらも、無線通信やセキュリティの要求が高いIoT MCUに対して、従来の汎用MCU製品のままでは対応しにくく、より具体的なIoTアプリケーションへ向けた機能拡張を行い、セミASSP的なIoT MCU製品となっています。
※セミASSP:汎用MCUをベースに、特定アプリケーション向けに調整したMCU。汎用MCU開発に慣れた開発者が、特定アプリ開発に臨む時、ASSPに比べ馴染みやすく開発障壁が低い。

ARMコア製品が柔軟性や拡張性に富み、一方で、Non ARMコア製品のルネサスもIoT向きに汎用MCUを調整しています。いずれにしても汎用MCUは、よりアプリケーション向きのMCUへ変化しつつあります。

IoT MCUを特徴付ける3要素

IoT MCUは、以下3要素から構成されると考えると理解が容易になります。

  1. IoTアプリケーション対応高機能周辺回路
  2. MCUコア
  3. 汎用周辺回路:タイマー、GPIO、UART、I2C、一般的ADC

先ず、どのようなアプリケーションにMCUを使うかで「IoTアプリケーション対応周辺回路」が実装されます。例えば、USBホスト機能が必要なアプリであれば、NXP)LPC51U68などです。

次に、そのアプリケーション周辺回路制御に十分な動作周波数や性能をもつ「MCUコア」が決まります。

最後に、「汎用周辺回路:タイマーやGPIO、UART、I2C回路」の実装数がアプリケーションに対して十分か調べます。

IoT MCUの3要素
IoT MCUの3要素。NXP)LPC51U68の分解例と開発方法。

多くのアプリケーションに広く対応できる汎用MCUの汎用周辺回路のみで開発できるアプリケーションであれば、実績が多い汎用MCUを選び、IoTに必要となる無線やセキュリティ機能を外付け部品で構成すると良いと思います。

より具体的なIoTアプリケーションに対応する場合は、IoTアプリケーション対応周辺回路を持つ各社の新製品MCU(セミASSP MCU)を選び、開発するのが良いと思います。

「IoTアプリケーション対応高機能周辺回路」とは、文字通りアプリに応じた開発や応用、最適化が必要です。各社はこのIoTアプリケーション対応周辺回路に対して、ライブラリやアプリケーションノートを提供しますので、開発はそれらを応用、流用するとリスクが低くなります。

一方、「MCUコア」と「汎用周辺回路:タイマーやGPIO、UART、I2C回路、一般的なADC」は、既存の開発ソフトウェアやハードウェアがほとんどそのまま使える可能性が高い部分です。

IoT MCUを早期開発するには、この既存ソフトウェアやハードウェアを流用し、より多くの時間をIoTアプリケーション開発へ配分する方法が適します。弊社マイコンテンプレートは、この汎用開発部分に役立ちます。ご活用ください。

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

マイコンテンプレートへ機能を追加するには、既に枠組みが出来上がっているテンプレートへ、追加機能名のファイルを新規作成し、追加機能をこのファイル内で記述、テンプレートのLauncher()で起動すれば完成です。長文であった第3回を、一口で言えばこうなります(トホホ… Orz)。

Basic Form of Embedded Software (Initial Setting and Repetitive)
無限ループ前に1回実行する初期設定処理と、無限ループ内の繰返し処理の2つから構成される「組込みソフトの基本形」

これは、Arduino IDEの新規作成ファイル画面です。このsetup()とloop()の構造は、Arduinoに限らず全ての「組込みソフトの基本形」です。つまり、無限ループ前に1回実行する「初期設定処理」と、無限ループ内の「繰返し処理」の2つから構成されます。

弊社マイコンテンプレートもこの基本形に則っています。但し、機能追加がし易いように、無限ループがLauncher()に変形し、複数のユーザ関数を起動できるように工夫しているだけです。

従って、最も安直(!?)な機能追加の方法は、追加機能のサンプルソフトを見つけることです。あとはテンプレートのLauncher()でこのサンプルソフトを起動すれば、テンプレートへ機能追加ができるのです。

今回の目標は、テンプレートへのSDカード機能の追加です。そこで、このSDカード機能追加に最適と思うサンプルソフト:Developing Applications on STM32Cube with FatFs:UM1721を解説します。

UM1721: Developing Applications on STM32Cube with FatFs

2014年6月版 UM1721では、STM32Cubeと記述されていますが、これはSTM32CubeMX(以下CubeMX)のことです。また、STM32F4xxとSTM32CubeF4で記述されていますが、全てのSTM32デバイスとCubeMXに置換えて読めば使えます。

FatFsは、ユーザアプリケーションと下層HAL(Hardware Abstraction Layer)の間で機能するミドルウェアで、主目的は、開発するアプリケーションが読書きするデータと、物理ストレージファイルの割付(領域管理)です。パソコンなどでは、本来WindowsなどのOSが行う機能を代行するのがFatFsと考えれば良いでしょう。また、FatFs自体はMCUハードウェアには依存しないので、本稿STマイクロエレクトロニクス以外のマイコンでも使えます。

FatFs Middleware module architecture (Source:UM1721)
FatFs Middleware module architecture (Source:UM1721)

もっと知りたい方は、UM1721の2章までに詳しく記述されています。本投稿は、FatFsを使うサンプルソフトが目的ですので読み進めると、3.3のサンプルソースが見つかります。

FatFsサンプルソフト

FatFs Sample Software (Source:UM1721)
FatFs Sample Software (Source:UM1721)

懇切丁寧なサンプルソフトとは言えませんが、必要最低限で記述しているのでしょう。一見、組込みソフトの基本形と違うと思われるかもしれませんが、初期設定処理はCubeMXが自動生成し、別の場所にソースコードを出力するため(おそらく)省略しています。また、ファイルアクセスは低速なので、繰返し回数を1で処理すると考えれば、このサンプルソフトも基本形に則っています。

サンプルソフトから、FatFsを使うAPI(Application Programming Interface)が5種、FatFsとLow Level Disk I/O Driversをリンクする2種のAPIを使えば、SDカードへの読書きができることが解ります。
※書込み:f_write()を、f_read()に置換えれば読込みができます。

FatFsサンプルソフトで使用するAPI
用途 API
FatFsとアプリケーション間

f_mount()

f_open()

f_close()

f_read()

f_write()

FatFsとLow Level Disk I/O Driversリンク間

FATFS_LinkDriver()

FATFS_UnLinkDriver()

FatFsサンプルソフトAPI動作テスト

このサンプルソフトを、第3回で使用したレファレンスプロジェクトへ挿入し、各APIの動作を確認します。

FatFs Sample API Test Source
レファレンスプロジェクトへ挿入したFatFsサンプルソフト。

結果は、FatFsとアプリケーション間5種全てのAPIで正常動作が確認できました。つまり、レファレンスプロジェクトでは、このサンプルソフトを使いSDカードへの読書きができます。その結果、SDカードへwtext[] = “text to write logical disk”のデータを、ファイル名STM32.txtとして保存できました。

FatFs Write Test to SD Card
FatFsサンプルソフトを使い、SDカードへ書込んだファイルSTM32.txtと書込みデータ。

レファレンスプロジェクトは、Low Level Disk I/O Driversリンク側のAPI相当を、エキスパートが自作しているのでコメントアウトしています。

STM32CubeMXでFatFs機能追加

第3回と同様、シンプルテンプレートをRenameし、機能追加用のSPI1FatFs_Sdプロジェクトを作成し、CubeMXでSPI1とFatFs機能を追加します。また、SdCard.cファイルを作成し、この中に前章で動作確認したサンプルソフトを挿入します(プロジェクトやファイル作成の詳細は、第3回を参照)。

FATFS and SPI1 Functions Add by STM32CubeMX
STM32CubeMXでFATFSとSPI1を追加。SPI1のピン割付は、実装シールド基板に合わせている。

Launcher()からサンプルソフトを起動し、1回のみ処理するように変更を加え、レファレンスプロジェクトと同様各APIのリターン値を確認しましたが、f_open()以降で正常動作しません。

初期設定処理を自動生成するCubeMXのFatFs設定に間違いが無ければ、SPI1FatFs_SdプロジェクトでもユーザデータをSDカードへ読書きできるハズです。UM1721には、FatFsの設定記述がないので、CubeMXのFatFsデフォルト設定にしましたが、お手上げです。

そこで、STM Communityを検索すると、例えばコチラのように現在のCubeMXのFatFsにはバグがあるようです。対策もCommunityにありますが、STMもバグ状況を把握していますのでCubeMXの改版を待つ方が良さそうです。

*  *  *

サンプルソフト自体は、レファレンスプロジェクトで動作確認済みです。CubeMXのFatFs初期設定生成に問題があることは間違いありません。つまり、組込みソフト基本形の初期設定以外の半分(50%)の処理をUM1721から獲得できたと言えます。

Tips: 動作サンプルソフトは、FatFsがMCUハードウェアに依存しないので、他社マイコンでも使えます。獲得した50%処理は、適用範囲が広いものです。

対策としては、STMによるCubeMX改版を待つこと、レファレンスプロジェクトからFatFs関連の初期設定を抜き出すこと、の2つあります。後者については、検討中です。

マイコンテンプレート活用プロトタイピング開発(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が自動的に生成します。

マイコンテンプレート活用プロトタイピング開発(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年までの市場予測、ベンダー各社動向などがまとめられたレポートです。お近くに冊子がある場合には、ご覧ください。