今回は、Arm Mbedの構成要素の一つであり、最も重要な部分であろうMbed OSについて記したいと思います。これまで書いてきたように、Mbedには大きく分けて、Mbed OS 2 (mbed 2.0とか、mbed SDK、Classicなどとも呼ばれます)とMbed OS 5の二つが存在します。しかし、Classicと呼ばれるようにMbed OS 2はメンテナンスモードですので、今回はMbed OS 5についてのみ記したいと思います。
Mbed OS 5とは
まずはじめに、一般的なMbed OS対応ボードのアーキテクチャを紹介したいと思います。Mbed Enabledと呼ばれる、Armが認定済みのMbed OS対応ボードは、下図のようにデバッグインターフェースとして使われるDAPLinkと、開発ターゲットのMbed MCUが搭載されています。もちろん、Mbed OS 5を使って開発を行うのは、図のMbed MCUの部分です。
Mbed MCUのうち、Applicationと書かれている部分は、最終的に皆さんがMbedを使って開発するアプリケーションですので今回はスキップをして、他のブロックについて順に紹介をしていきましょう。
RTOS
Mbed OS 5ではRTOS(Real Time Operating System)が標準でサポートされています。RTOSというのはOSの一種で、OSということから、コンピュータの資源管理を行うソフトウェアであることは推測できると思います。最近では、OSというとWindowsやLinuxといったリッチなOSを思い浮かべる方も多いでしょう。これらのOSは、汎用に使うコンピュータ用のOSです。
一方、マイコンを用いた組み込みシステムは、コピー機やデジカメといった特定の目的に使う専用のコンピュータです。マイコンはコストを下げるためにメモリや処理速度などのリソースが汎用のコンピュータと比較して非常に限られている一方、機器を制御する場合にはリアルタイムな制御が求められます。限られたリソースで、リアルタイムな制御を行うことに特化したOSがRTOSです。このため、RTOSには、汎用コンピュータが持っているようなUI(User Interface)が搭載されていないのが一般的です。
Mbed OS 5では、ArmのKeil RTXというRTOSを使っています。このRTOSは、タスク(スレッド)間の通信やリソースの共有などの機能を提供しています。MbedのRTOSについてもっと詳しく知りたい方は、RTOS overviewを参照すると良いでしょう。
Drivers
恐らく、このドライバがMbed OSをプラットフォームであるArm Mbedとしている最も重要な部分と言えるでしょう。
さきほどRTOSの部分で述べた様に、RTOSは専用のコンピューターのためのOSです。汎用のコンピュータであればI/O(入出力)は標準化が進んでいますが、いかにCMSIS(Cortex Microcontroller Software Interface Standard)というソフトウェアインターフェース規格が存在するCortex-Mとはいえ、I/Oの標準化は行き届いていません。
例えば、マイコンメーカー各社がサポートしているFreeRTOSでは、各社それぞれがI/Oのドライバを実装しているために、I²CやUART、SPIといったシリアルプロトコルだけでなく、GPIOの操作一つを取ってもAPIの実装が異なります。
Arm Mbedでは、こういったI/O操作を行うための標準APIが定められていて、I/Oレジスタなど各社のマイコンで異なる実装を意識することなく、この標準化されたAPIを操作することでI/O操作を行うことができるようになっています。この便利さについては、第一回の「C/C++ハードウェア抽象化API」で述べた通りです。ドライバのAPIについては、Drivers overviewが参考になるでしょう。
なお、パワーマネジメントやタイマといったマイコンのインフラ操作には、Platform APIが用意されています。
あわせて読みたい
Connectivity
コネクティビティには、大きく分けてIPネットワークとのコネクティビティであるネットワークソケットと、non-IPなネットワークのコネクティビティがあります。まずはIPネットワークとのコネクティビティをサポートするNetwork Socketから紹介していきます。
ネットワークソケット
Mbed OSには、IPスタックが組み込まれています。組み込まれているIPスタックは、組み込み用途のIPスタックとして有名なlwIPと、Nanostackです。Mbed OSにはNetwork socket APIがあり、このAPIがIPコネクティビティを抽象化しています。
この抽象化により、イーサネット、Wi-Fi、セルラー、IEEE 802.15.4など様々なインターフェースを意識せずにIPネットワークに接続するアプリケーションを記述することができます。セルラーやWi-Fiといった無線インターフェースをネットワークに接続するためには、設定が必要です。こういった無線インターフェースそれぞれの設定は、それぞれの無線方式に向けたNetwork Interfaces APIが提供されています。
IPでないネットワーク
IPでないネットワークでサポートされているのは、Bluetooth low energy(BLE)とLoRaWANです。 これらのネットワークについては、それぞれAPIが用意されており、これらを使ってみるサンプルコードは前回紹介したとおりです。
Storage
データをローカルに保存する手段として、Storage APIが提供されています。よく利用されているSDカードやeMMCに加え、SPI Flashメモリ、マイコンのRAMや内蔵Flashなど、様々なメディアがサポートされています。また、以前はFATのみがサポートされていましたが、Mbed OS 5.7からはlittle file system(LittleFS)がサポートされました。
LittleFSはメモリ使用量が少ないだけでなく、電源断への耐性とウェアレベリング(フラッシュメモリの特定ブロックに書き込みが集中しないよう、書き込むブロックを分散すること)といった組み込み向けの機能が実装されています。LittleFSについて詳しく書かれたブログ記事、LittleFS – A high-integrity embedded file systemがあります。
Security
暗号化機能
Mbed OSのセキュリティ機能のうち、最も広く使われているものがMbed TLSです。組み込み用途に使われる数少ないオープンソースのTLSライブラリで、昨今では、Mbed以外のプラットフォームでも使用されていることをよく見かけます。
その他セキュリティ機能
暗号化以外の、ソフトウェアとしてのセキュリティ機能としてuVisorが提供されていますが、これはMbed OS 5.10でArm PSA(Platform Security Architecture)準拠のSecure Partition Manager(SPM)に置き換えられる予定のようです。また、Cortex-M23やCortex-M33のサポートに向けての実装も行われており、先述のSPMの実装やPSA準拠と合わせて、セキュリティ機能は拡充に向かっています。
Mbed OS 5のリリース
Mbed OS 5のリリースには、メジャーとフィーチャー、パッチの三種類があります。Mbed OS 5はメジャーリリースです。LittleFSの項で「Mbed OS 5.7から」と記しましたが、これはフィーチャーリリースで、LittleFSのようにMbed OSそれ自体への何らかの機能追加が行われています。Mbed OS 5.7には、Mbed OS 5.7.0の後にMbed OS 5.7.7までパッチリリースが行われており、これらパッチリリースではバグの修正や、開発ターゲットのマイコンやボードの追加、あるいはボードやマイコンがサポートする機能の追加などが行われています。必ずというわけではないのですが、フィーチャーリリースは概ね四半期に一度、パッチリリースは二週に一度くらいのペースで行われているようです。Mbed OS 5.9のリリースが6月でしたので、セキュリティの項で言及したMbed OS 5.10は9月頃にリリースされるだろうと考えられます。
こちらも是非
“もっと見る” Mbed編
Mbed TLSの概要と特徴
今回は、これまで何度か触れてきたMbed TLSについて説明をしていきたいと思います。TLS(Transport Layer Security)は、通信の暗号化を行うプロトコルとして、IoTのセキュリティを実現する手段の一つとして頻繁に利用されています。また、通信の暗号化だけでなくデバイスの認証手段としてもよく使われています。
どこが「IoTデバイス開発プラットフォーム」なのか
筆者がMbedを使い始めた理由は、インターネットにネイティブに接続できるマイコンボードが欲しかったからです。その頃の筆者は、中学生の頃にZ80を触って以来15年以上のブランクを経て、Arduinoを使い始めたところでした。その頃、ArduinoをIPネットワークに接続するには、IPスタックをハードウェアで実装したW5100というチップを使う事が一般的でした。
主なMbed対応デバイスの紹介
Mbedを使い始めるといっても、実際にどのボードを開発ターゲットにするかは悩ましいことでしょう。たくさん(本稿執筆時には138種!)あるMbed対応デバイスですが、今回は何を使うと良いのか紹介をしていきましょう。