MCUの5V耐圧ピン

弊社FreeRTOS習得ページで使う評価ボード:LPCXpresso54114(Cortex-M4/100MHz、256KB Flash、192KB RAM)は、FreeRTOSだけでなく、Mbed OSZephyr OSなどオープンソース組込みRTOSにも対応しています。多くの情報がありRTOSを学ぶには適した評価ボードだと思います。

LPCXpresso54114 Board power diagram(出典:UM10973に加筆)
LPCXpresso54114 Board power diagram(出典:UM10973に加筆)

さて、このLPCXpresso54114の電圧ブロック図が上図です。MCUはデフォルト3.3V動作、低電力動作用に1.8Vも選択可能です。一方、Arduinoコネクタへは、常時5Vが供給されます。

本稿は、このMCU動作電圧とArduinoコネクタに接続するセンサなどの動作電圧が異なっても制御できる仕組みを、ソフトウェア開発者向けに説明します。

MCU動作電圧

高速化や低電力化の市場要求に沿うようにMCU動作電圧は、3.3V → 3.0V → 2.4V → 1.8Vと低下しつつあります。同時にMCUに接続するセンサやLCDなどの被制御デバイスも、低電圧化しています。しかし、多くの被制御デバイスは、未だに5V動作が多く、しかも低電圧デバイスに比べ安価です。

例えば、5V動作HD44780コンパチブルLCDは1個500円、同じ仕様で3.3V動作版になると1個550円などです。※弊社マイコンテンプレートに使用中のmbed-Xpresso Baseboardには、5V HD44780コンパチブルLCDが搭載されています。

レベルシフタ

異なる動作電圧デバイス間の最も基本的な接続が、間にレベルシフタを入れる方法です。

TI)TXS0108E:8ビットレベルシフタモジュールの例で示します。低圧A側が1.8V、高圧B側が3.3Vの動作図です。A側のH/L電圧(赤)が、B側のH/L電圧(緑)へ変換されます(双方向なので、B側からA側への変換も可能です)。

8ビットレベルシフタTXS0108Eのアプリケーション動作(出典:TI:TXS0108Eデータシート)
8ビットレベルシフタTXS0108Eのアプリケーション動作(出典:TI:TXS0108Eデータシート)

レベルシフタ利用時には、電圧レベルの変換だけでなく、データレート(スピード)も重要です。十分なデータレートがあれば、1.8VのH/L波形は、そのまま3.3VのH/L波形へ変換されますが、データレートが遅いと波形が崩れ、送り側のH/L信号が受け側へ正確に伝わりません。

例えば、LCD制御は、複数のLCDコマンドをMCUからLCDへ送信して行われます。データレートが遅い場合には、コマンドが正しく伝わらず制御ができなくなります。

MCUの5V耐圧ピン:5V Tolerant MCU Pad

LPCXpresso54114のGPIOピンには、5V耐圧という属性があります。PIO0_0の[2]が5V耐圧を示しています。

LPCLPCXpresso54114の5V耐圧属性(出典:5411xデータシート)
LPCLPCXpresso54114の5V耐圧属性(出典:5411xデータシート)

5V耐圧を簡単に説明すると、「動作電圧が3.3/1.8V MCUのPIO0_0に、5Vデバイスをレベルシフタは使わずに直接接続しても、H/L信号がデバイスへ送受信できる」ということです。または、「PIO0_0に、1ビットの5Vレベルシフタ内蔵」と解釈しても良いと思います。

※ハードウェア担当者からはクレームが来そうな説明ですが、ソフトウェア開発者向けの簡単説明です。クレームの内容は、ソフトウェア担当の同僚へ解説してください😌。

全てのGPIOピンが5V耐圧では無い点には、注意が必要です。但し、ArduinoコネクタのGPIOピンは、5V耐圧を持つものが多いハズです。接続先デバイスが5V動作の可能性があるからです。

また、I2C/SPIバスで接続するデバイスもあります。この場合でも、MCU側のI2C/SPI電圧レベルとデバイス側のI2C/SPI電圧レベルが異なる場合には、レベルシフタが必要です。MCU側I2C/SPIポートに5V耐圧属性がある場合には、GPIO同様直接接続も可能です。

I2Cバスは、SDA/SCLの2本制御(SPIなら3本)でGPIOに比べMCU使用ピン数が少ないメリットがあります。しかし、その代わりに通信速度が400KHzなど高速になるのでデータレートへの注意が必要です。

LPCXpresso54114以外にも5V耐圧ピンを持つMCUは、各社から発売中です。ちなみに、マイコンテンプレート適用のMCUは、6本の5V耐圧GPIOを使ってmbed-Xpresso Baseboard搭載5V LCDを直接制御しています。

mbed-Xpresso Baseboard搭載5V HD44780コンパチLCDの3.3V STM32G071RB直接制御例
mbed-Xpresso Baseboard搭載5V HD44780コンパチLCDの3.3V STM32G071RB直接制御例

5V耐圧MCUデータシート確認方法

MCUのGPIOやI2C/SPIを使って外部センサやLCDなどのデバイスを制御する場合、下記項目を確認する必要があります。

  1. MCU動作電圧と被制御デバイス動作電圧は同じか?
  2. MCU動作電圧と被制御デバイス動作電圧が異なる場合、外付けレベルシフタを用いるか、またはMCU内蔵5V耐圧ピンを用いるか?
  3. MCU内蔵5V耐圧GPIOやI2C/SPIを利用する場合、そのデータレートは、制御に十分高速か?

5V耐圧ピンは、使用するMCU毎に仕様が異なります。MCUデータシートは、英語版なら「tolerant」、日本語版なら「耐圧」で検索すると内容確認が素早くできます👍。

MCU動作電圧と接続デバイス動作電圧が異なっても、MCUのH/L信号が被制御デバイスへ正しく伝わればデバイスを制御できます。

MCU動作電圧に合わせたデバイス選定やレベルシフタ追加ならば話は簡単ですが、トータルコストや将来の拡張性などを検討し、5V耐圧ピンの活用も良いと思います。

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習得ページもテンプレートサイトに掲載しております。ご活用ください。

mbed OS 5.4.0のLチカ動作、LPCXpresso824-MAXで確認

四半期毎更新のIoTマイコン向けRTOS、ARM mbed OS 5の最新版5.4.0がリリースされました。このmbed OS 5を使って、ARM mbed開発環境でBlinky:Lチカサンプルプログラムを、LPCXpresso824-MAX評価ボードで動作確認しました。

ARM mbed開発環境

ARM mbed開発環境は、オンラインでコンパイル環境が提供されます。ブラウザさえあれば、統合開発環境:IDEをPCへインストールすること無しにソフト開発が可能です。コンパイル出力を、USB経由で評価ボードへダウンロードすれば、動作確認も簡単です。

ARM mbed開発環境
ARM mbed開発環境

mbed OS 5が動作するCortex-M0+評価ボードは、現在6種あります(全74種対応中)。

mbed OS 5.4.0のBlinkyサンプルとFreeRTOS v8の比較

この6種評価ボードに、FreeRTOSで使用中のLPCXpresso824-MAXもありますので、mbed OS 5でLチカサンプルプログラムを作成し、FreeRTOSのそれとソース比較しました。

RTOS Blinky Comparioson
RTOS Blinky Comparioson

mbed OS 5は、Cをオブジェクト指向へ拡張したC++言語で記述します。

ハード初期設定などは、評価ボード選定時に(別の個所で)済ませるので、記述ソースはFreeRTOSに比べて少なくなります。FreeRTOSのSuspendedは、mbed OS 5では、waitingに相当します。また、mbed OS 5 APIの方が、全般的に短く記述できます。

mbed開発環境は、直ぐに試せて取っ付き易い反面、ボード差や詳細なRTOS処理内容が隠される(見えない)気がしますが、本来のアプリ早期開発には、こちらの方が細かいことは気にせずに良いのでしょう。また、ボード間の移植性も高まります(次章CMSISを参照)。

両RTOSのLチカリソース使用量比較は、止めておきます。FreeRTOSの方はDebug出力で、一方、mbed OSの方は(多分)Release出力で条件が違うと思うからです。ARM mbed環境のデバッグ方法は、いろいろありそうなので、今後調査する予定です。

CMSIS

CMSIS Structure
CMSIS Structure

CMSIS:Cortex Microcontroller Software Interface Standardは、Cortex IPコア開発元のARM規定のソフトウエア規格で、図が全体像(v4版)です(セムシイスと読むようです)。最上位アプリケーションと最下位Microcontrollerの間に、7種のCMSIS-xyzを規定します(CMSIS-RTOSなどCMSIS Software Packの緑色領域)。

CMSISの目的は、アプリ側(青緑領域)から見えるハードウエアCortexコア(灰色領域)の隠蔽です。ARM Cortexコアを使うMCU各社が、このCMSIS準拠でソフト開発すれば、各社間のアプリ移植問題は解決します。つまり、CMSIS準拠アプリならば、例えARMコア以外であっても、全てのMCUで同じアプリが動作するということです。

ARMは、Cortex IPコア販売でMCUハードウエアのデファクトスタンダードになりました。CMSISは、よりCortexコアを普及させ、さらにMCUソフトウエアのスタンダードを狙うARM戦略の1つでしょう。

本家本元のARMが開発するmbed OS 5は、CMSIS-RTOS準拠のAPIを持ちます。その結果が、Lチカソースにも表れていて、ボード移植性が高いのです。

弊社マイコンテンプレートも、図のCode Templateと同等!になれば、良いのですが…。

mbed OS 5リリース

2016年8月5日、ARM mbed OS 5がリリースされました。mbed OS 5対応評価ボードは、現在39種類あります。本プロブ対象のARM Cortex-M0/M0+クラス評価ボードは、このうち6種ありました。

上記ページのHardwareタグでBoardsを選択し、Filterでmbed OS 5をチェックすると対応ボードが一覧表示されます。

Cortex-M0/M0+クラスのRTOS必要性

コスト重視のARM Cortex-M0/M0+マイコン:MCUに、リアルタイムOS:RTOSが必要か否かは、意見が分かれるところです。RTOSを使うためのROM/RAMのオーバーヘッドと、無線通信ドライバ/ライブラリの必要性がポイントだと思います。

FreeRTOSの場合は、ライブラリを除くと約5KB ROMが必要であることを以前示しました。mbed 5 OSは、BLEなどの各種無線通信をサポートしますが、コア部分は、(おそらく)同程度だと思います。
※MCUとMPU/SBC間の無線通信規格はコチラにまとめています。

IoT向けMCU実現には、無線通信機能は必須です。ここを1からMCUに実装するのは結構大変です。RTOSライブラリで提供されれば、Cortex-M0/M0+クラスMCUへの適用も現実的になるかもしれません。

一方、CypressのPSoC 4 BLEやPRoCは、RTOSを使わずにBLE通信を実現済みです。

Cortex-M0/M0+クラスへのRTOS適用は、まだ不透明だと思います。しかし仮にRTOSが誰にでも安心して使えるようになると、残念ながら弊社販売中のマイコンテンプレートは不要になるかもしれません。

マイコンテンプレート対抗馬は、本記事のmbed OS 5、FreeRTOSです。