MIPIで映像伝送する際に知っておきたい基本的な内容

MIPI

今回は、MIPIの基本的な内容について紹介します。

MIPIとは、スマートフォンなどのモバイル機器や車載カメラなどにおいて、カメラ・ディスプレイ・SoC間で映像データを効率良く伝送するために使われている規格です。2003年に設立されたMIPI Allianceが主導して策定を行っています。

聞いたことはあるけど、なかなか中身までは詳しく知らないという方が多いのではないかと思います。というのも、基本的にはMIPI規格へのアクセスは制限されていて、非会員はほとんどの仕様書を閲覧できないという事情があります。

ちなみにMIPI Allianceの会員は、個人が会員登録をしてなるものではなく、基本的には企業が会員になり、その従業員が個人アカウントを作成し、規格へアクセスできるようになります。

私は以前、車載関連の業務に携わった際に仕様書を見る機会がありました。そのため、情報は正確でない場合がありますが、そこはご了承願います。

概要

MIPIの階層は下記のように考えると分かりやすいと思います。

例えば、カメラで撮影した映像をSerDes(SerializerとDeserializer)やSoC(System on a Chip)に送るのに、プロトコル層と物理層を介すイメージです。

同じ基板上や近距離(例えばスマートフォン内)での伝送であればカメラ映像を直接SoCに送る構成もありますが、車載や産業機器などの場合は、カメラとSoCやディスプレイが離れている場合がほとんどなので、SerDesを介して映像データを伝送することになります。アプリケーション例については後ほど簡単に触れようと思います。

まずは、プロトコル層(CSI-2など)と物理層(D-PHYなど)について書いていきます。
ざっくり、プロトコル層は荷物で、物理層は手段(車や電車)というイメージでしょうか。

プロトコル層(CSI-2)

CSI-3という上位規格も存在しますが、CSI-2の方が広く使われていると思いますので、ここではプロトコル層としてはCSI-2のみを扱います。

CSI-2(Camera Serial Interface 2)というのは、カメラ映像を伝送するためのプロトコルです。イメージセンサーからプロセッサーへ画像データを送るために使われます。

画像データはパケットとして扱います。ショートとロングで下記のように分類されますが、共通でVirtual Channel IDを持っています。詳細は右の記事が参考になると思います→(株)マクニカの記事

ショートパケット

  • フレーム開始/終了
  • ライン開始/終了

ロングパケット

  • 画像のピクセルデータ
  • 埋め込みデータ(meta情報)
  • データフォーマット

物理層(D-PHY, C-PHY)

D-PHYやC-PHYは、CSI-2を運ぶ物理層の役割を担っています。
他にM-PHYやA-PHYもありますが、ここではD-PHYとC-PHYのみ扱います。

D-PHYは、Clock専用のLaneと1本以上のData Laneを持つ下記のような構成となっています。
各Laneからは2本の差動線が出ています。

C-PHYは、専用のClock Laneはなく、下記のように1LaneをTrioとして扱います。3線による3相の符号化で、Clockは信号に埋め込まれます。

いずれも、1カメラ=1Laneという対応ではなく、1カメラで複数Lane使う場合もあれば、2カメラで1Laneしか使わない場合もあります。映像データ量が大きければ、SoC側のCSI-2 受信制約によって受信出来ないこともあります。

最終的にどの物理層を使うかやどのようなLane構成にするかは、受信側のCSI-2仕様上の制約も考慮した上で選択することになります。

SerDesについて

SerDesの必要性に関して、軽く触れておきます。元々、MIPIはスマートフォンなどのモバイル機器向けに策定された規格のため、長距離の伝送を想定していませんでした。そのため、SerDesなど追加のICを使わない場合は、最大で30cm程度しか伝送することが出来ません。

車載などに使おうとした場合に、MainのECUの位置は大体決まっているので、フロントカメラやバックカメラやサラウンドビューカメラ全てをSoCから30cm以内に配置することは不可能です。

どうしましょう、というところでSerDesの出番です。

MIPIの信号を一度Serializerでパラレル→シリアルに変換します。これにより、高速な長距離伝送にも耐えられるようになります。受信側ではDeserializerでシリアル→パラレルに戻して使うというわけです。

実際に伝送可能な距離は、ケーブルの仕様によっても変わるので一概には言えませんが、一般的には15m程度と言われています。

ついでに、ハードについてですが、車載カメラでは、イメージセンサとSerializerを同一モジュールに搭載し、Serializerから同軸ケーブルで車両側のDeserializerへ接続する構成が一般的です。(下図)
ちなみに、カメラモジュール側の電源は、通常PoC(Power over Coax)でECU側の電源をデータ信号に重畳させて供給します。

なお、Serializerの初期設定については、カメラモジュールベンダー側で設定・検証済みとして提供される場合と、ECU/SoC側のソフトウェアから起動時に設定する場合があります。

アプリケーション例

SerDesを使う場合の構成例です。3カメラの入力を1つのDisplayに表示するケースです。

Tx(送信)やRx(受信)は1つのブロックで表現していますが、実際にはRx0~3など複数に分かれていて、電源ONした際にSoCの初期化処理において、各SerDesへ適切にレジスタ設定されることで、カメラからディスプレイに映像が送られるようになります。

実際にどのような順序でどのようなレジスタ設定をするかは、各SoCやSerDesのデータシートを確認して決定することになります。

おわりに

以上、MIPIについて、基本的な内容について記載しました。ここでは、具体的にどのような項目に対してどのような設定を考慮する必要があるかという内容までは踏み込まず、概要のみ触れました。実際には、伝送する画像のフォーマットを確認して、帯域がどれくらいになるか算出し、各カメラ映像をどのLaneに割り当てるかなど細かな設定が必要になります。

もう少し具体的な内容については、また別途記事を書きたいと思います。

最後まで読んでいただき、ありがとうございました。

CSI-2とD-PHYを個人で学習するならRaspberry Piが手軽だと思います。