~ WiFiの最大の課題はソフトウエア!? ~
前回は、一言「組込機器の無線化」と言ってもいろいろ考えることがあって面倒です、というお話をしました。今回は「組込CPUにWiFiの無線デバイスを接続する」という具体的なケースで考えること・決めることをもう少し詳しく解説したいと思います。
■どのデバイスを使う?それは組込CPUとどうつながる?
各社から多くの無線デバイスが発売されていますが、まずターゲットとなる組込機器のCPU(以後ホストCPUと書きます)と物理的に繋がるものを選びましょう。現状、以下のようなものが一般的だと思います。
・SDIO
いわゆるSDカードのI/FをIO用途で利用するものです。ホストCPU側にSDIOドライバ(*注)が別途必要になりますが、SDIOドライバだけで無線デバイス制御とデータの送受信の両方が実現できます。なお、ホストCPUでこのI/Fを使用する場合、SDアソシエーションへの加入が必要になります( https://www.sdcard.org/ja/join-2/ )。
(*注)この記事における「ドライバ」について
この記事において、「ドライバ」とはホストCPU上で動くデバイスを制御するためのソフトウエアのことを指します。例えばSDIOデバイスを制御するためのソフトウエアが「SDIOドライバ」、無線デバイスを制御するためのソフトウエアが「無線ドライバ」です。
・USB
CPUがUSBホスト側、無線デバイスがUSBデバイス側として接続します。ホストCPU側にUSBホストコントローラドライバと、無線デバイスが使用するクラスに対応するホストクラスドライバが必要になります。たとえば無線デバイスを設定・制御するためにCOM(CDC-ACM)クラス、データの送受信を行うためにRNDISクラスを使用する、といった仕様の無線デバイスがあります。
・UART
シリアルI/Fのセンサデバイス自体はそのまま使いたい、といった用途にすぐ無線を採用できるよう、無線デバイスに無線ドライバ・TCP/IPプロトコルスタックまで入っているケースがあります。この場合ホストCPU側に必要なソフトウエアは無線デバイスにデータやコマンドを送るアプリケーションとUARTドライバのみです。新規に組込機器を開発し、シンプルなTCP通信のみで完結するのであれば、これが一番簡単です。逆に、ホストCPUにTCP/IPプロトコルスタックやアプリケーションを実装済みで、単にネットワークI/FをWiFiに変えたい場合は採用できません。この記事では取り上げないことにします。
(我々は他にもI/FがSPIの無線デバイスも実績がありますが、これもここでの説明は割愛します。)
ホストCPUの仕様に合わせて、SDIOかUSBで接続することになるかと思いますが、いずれの場合も専用のドライバが必要になります。CPUのマニュアルを参照して自力で実装することも可能ではありますが、難易度が高いため、CPUメーカが提供するドライバがあればそれを使ったり、我々Centeのようなミドルウエアメーカから入手することをお勧めします。「餅は餅屋に」です。
ここまで、ホストCPUと無線デバイスを接続して、ホストCPU上で動作するSDIOやUSBのドライバを用意するところまではそれほど障壁はありません。
■制御ソフトウエアはどうする?
何が面倒かというと、ホストCPU上で動作する、無線デバイスを設定したり制御するための「無線ドライバ」と呼ばれるソフトウエアの入手、が面倒なのです。今イメージしているホストCPUは、MMUが搭載されていない、メモリもそれほど多くない組込クラスのものなので、無線ドライバもOSなしまたはITRON(RTOS)上で動くものが必要になります。
ITRON(RTOS)用の無線ドライバソースコードが提供されていれば理想的、それがなくても制御コマンドの使い方、パラメータ詳細など、自分で無線ドライバを実装するために必要な情報が記載されたドキュメントがあればなんとかなります。しかし、実際には「Linux用の無線ドライバソースコードだけが提供されており、ドキュメントはない」というケースがほとんどなのです。それでも自力でITRON環境へ移植できる!という豪胆なエンジニアもいらっしゃるかもしれませんが、上手く動かなくてもメーカのサポートが受けられませんし、なんとなく動きそうだ、という状態に持って行けたとしても製品リリース後の保守運用を考えると製品としての採用はリスクが高すぎます。結局、このパターンの無線デバイスは(我々がターゲットとする規模の)組込機器の無線化には採用できない、ということです。
いかがでしょうか。無線ドライバというソフトウエアが解決すべき大きな課題の一つなのです。我々としても、この課題が解決できる無線デバイスの出現を待ち望んでいましたが、ついに組込CPU・ITRON環境で無線ドライバが動作する無線デバイスが発売になりました!次回はITRON環境で無線ドライバが動作するSDIO接続タイプ、次々回は無線ドライバが不要なUSB接続タイプを実際に使ってみた、という記事になります。お楽しみに!
Cente:
https://www.cente.jp/
お問合せはこちら:
https://www.cente.jp/otoiawase/
■今日の閑話
弊社にはベテランのスーパーエンジニアがいまして、制御方法が書かれたドキュメントと動作環境さえあれば、しっかりドライバを書いてくれます。多少デバイスの挙動に不明な点があっても、長年の勘と経験で(?)ちゃんと動くようにする様はいつ見ても見事です。しかし、そんな彼でも「GPLの問題はあるけど、技術的にLinux用の無線ドライバソースコードだけでITRON環境で動くようにできる?」とお願いしてみたときは「無理無理ぃ!」と即答されました。ある程度処理の流れやIOの様子はソースコードで読めるかもしれませんが、「なぜこのタイミングでこのコマンドを出すのか」「移植したらどのパラメータを変える必要があるのか」のエビデンスがないと何して良いかわからないでしょ!とのこと。おっしゃるとおりです…