応用機器設計第一部ソフトウェア設計課の藤井です。
今回は、USBのお話をさせてください。
USB("Universal Serial Bus")は、もう誰もが知っていると言っても過言ではないくらいのインターフェースですが、元々はパソコンの周辺機器を使いやすくしようとしたのが始まりです。このため、仕様もパソコンありきになっている面がありますが、組込み用マイコンやSoCの高性能化、低価格化などに伴い、パソコンとその周辺機器にとどまらないところで使われるようになってきています。
そこで今回は、組込み機器の開発者向けに、USBの特徴を挙げていこうと思います。
なお、組込み機器ではUSB2.0が最も多く活用されているため、USB2.0についてお話します。USB3.0以降では大きく変更されているところもありますので、ご注意ください。
(1) 動的にデバイスの抜き挿しができる
パソコンで言う周辺機器をUSBデバイス、USBファンクションなどと呼びます(以下単にデバイスとします)が、パソコンの電源を入れたままでデバイスの抜き挿しができるのは、USBのよく知られた特徴です。
抜き挿しの時にいちいち電源を落とさなくていいのは、一般ユーザーにとっては嬉しいことです。しかし、USB関連のハードウェアやソフトウェアを作る立場では大変面倒で難しい処理が必要になります。特に、抜かれた後に使っていたメモリを解放したり、処理上の登録を解除するなどの、後始末には十分な注意が必要です。
ちなみに、組込み機器ではユースケースで挿抜の必要がないデバイスは、固定した方が不具合も減りトータルコストの削減につながります。
(2) 様々な種類のデバイスをつなげられる
USBは、"Universal" の名に恥じず、いろいろなデバイスがつなげられます。登場してかなり経ち、業界標準にもなっていますので、既に多種多様なデバイスがありますし、これからも作られ続けるでしょう。
デバイスの種類に応じて、標準的な仕様が多く策定されていることも見逃せません。開発者とっては、標準化されたデバイスを活用することで開発が効率化でき、ユーザにとってもメーカによる使い勝手の差が少なくなります。
ところで、USB仕様はUSB Implementers Forum(USB-IF)というところで決められていますが、デバイスごとの仕様は、USB仕様本体と別にデバイスクラスとして策定されています。パソコンでもおなじみのマスストレージ(Windowsで「大容量記憶装置」などと表示されるもの)、HID(Human Interface Device:マウスとかキーボードとか)などが、その代表です。
ただ、パソコンのようにデバイスが挿される側(こちらはUSBホストと言います。以下単にホスト)は、いろいろな種類のデバイスがつながれる可能性があるので、そのための対応が必要です。組込み機器の場合は、全種類のデバイスを動かす必要がないため相手のデバイス種別を限定しておくと、対応が容易になります。
(3) HUBの利用でデバイスの同時接続数を増やせる
文字どおりです。ただし、ホストの処理では、HUB用処理が必要なのはもちろん、つなげばつなぐほどリソース(メモリとかCPU負荷とか)を食うのも当然なので、注意が必要です。組込み機器では、HUB自体を禁止したり、同時接続数を制限するのもよいかもしれません。
ちなみに、通常のデバイスとの通信中はHUBの存在は無視され、論理的にはホスト対デバイスの通信になります。
(4) 電源を含んでいる
USBの基本の4本の端子のうち、1本は電源(Vbus)です。電圧は5V、電流は最大500mAです。USB登場前はデバイスの電源を別に取るのは当たり前でしたので、相当画期的なことだったのです。便利すぎて、現在では出力がUSBコネクタになっているACアダプタも普通になりました。
ついでに言えば、ここを利用するBattery Charge(バージョンを含めてBC1.2)、USB Power Delievry(USB PD)などという仕様もあります。ただし、BC1.2やUSB PDはUSB本体とは別の仕様ですので、念のため。
ホストやHUBは、Vbus用の回路の制御処理が必要になります。実用的には、過電流検知(一種の保護)の仕組みも要るでしょう。一方、デバイス接続を機器内でつなぎっぱなしにできれば、この辺りはほとんど省略できると思います。
(5) 信号の接続は1対1
この辺からは内部構成になりますが。
例えば、CPUのバスや、USBと同じシリアル通信の一つであるI2Cでは、一つのバスに複数のデバイスをつなぎます。しかし、USBでは必ず1対1です。複数つなぐ時もHUBを介すことで、USBポート対USBポートは1対1の関係を保ちます。
(6) ホストからの通信はブロードキャスト
USBは、ホストありきの構成ですので、通信の時はホストから各デバイスへ要求をばらまきます。デバイス側は、自分宛てかどうか見て、応答するか否かを決めます。
自分宛てかどうかの区別は、ホストからアサインするUSBアドレスで行います。
(7) USBの通信はポーリング
USBの通信は、ホストから定期的に要求を出し、デバイスが応答する形になります。デバイスが応答できない時はNAK(否定応答)を返し、ホストがNAKを受けると後で同じ要求を出します(原則)。
今回、転送方式は詳しく説明しませんが、インタラプト転送という、いかにも割込みで動きそうな転送も、ホストが周期的に要求を出しているだけです。
(8) ホストとデバイスの処理規模が非対称である
冒頭で触れましたが、元々はパソコンの周辺機器をつなぐために作られた仕様ですので、
- ホスト側は、回路規模、ソフトウェアの負荷とも大きめ。
(パソコンだと、相対的に見てそれでも支障がない) - デバイス側は、ハードウェア、ソフトウェアとも小規模で済ませることが可能。物によってはソフトウェアは要らないくらい。
(USBマウスのような低価格商品もターゲットだったため、そのような選択もできる)
のように、なっています。実はこれが、USBが普及した隠れた背景の一つだと思います。
おかげで、上記でも説明したように、ホスト側の処理が大変なのですが。
(9) 多くのOSでサポートされている
Windows、Mac-OSでは早くからサポートされています。Linuxでももちろん使えますので、有名なシングルボードコンピュータRaspberry PiのUSBポートも活用できるわけです。Androidでは、USBを利用したデバッグポートが規定されているように、USBは有って当たり前です。
また、上記(2)とも関係しますが、デバイスを使うためには、ホスト共通部分の処理の他、各デバイス毎に特有の処理も必要です。それが、代表的なデバイスについて標準仕様があるので、OSが最初からサポートしてくれていたりするのです。
ここまでで、USBの処理はいろいろと大変、のようなことを書いてきました。しかし、実はこのようにOSのサポートがあったり、(有料・無料は別にしても)標準仕様対応のソフトウェアが容易に入手できたりして、面倒な処理を全部作らないといけないケースはそう多くありません。ハードウェアについても、大半がLSIに収まり、必要な信号も少なくて済みます。
このような特徴を持つUSB、組込み機器でも是非活用していただきたいと思います。
なお、弊社でも、USBを応用したシステムを多く開発してきました。興味をお持ちの方はお気軽にお問い合わせください。
【関連リンク】
- 電気・ソフト設計受託サービス
- ソフトウエア設計受託サービス
- デジタル制御電源開発事例
- IoT時代の開発者が知っておくべき組込みセキュリティ対策とは?
- IoT時代の開発者が知っておくべき組込みセキュリティ対策とは? PartⅡ
WTIメールマガジンの配信(無料)
WTIエンジニアが携わる技術内容や日々の業務に関わる情報などを毎週お届けしているブログ記事は、メールマガジンでも購読できます。ブログのサンプル記事はこちら
WTIメールマガジンの登録・メールアドレス変更・配信停止はこちら
WTIの技術、設備、設計/開発会社の使い方、採用関連など、幅広い内容を動画で解説しています。