こんにちは! Lattice チーム新人 FAE の ひろみん です!
このブログは、私ひろみんが MIPI の規格を学んでいく勉強ブログです。
MIPI ってなに? DSI/CSI-2 の規格の違いは?Lattice FPGAで設計するには?など
基礎から応用まで お勉強したことを余すことなくお伝えしたいと思っています!
さて、今回は、以下目次に沿ってMIPI DSIについて学んでいきたいと思います。
以下よりリンクで飛ぶこともできますのでご確認ください!
【この記事で分かること】
DSIについて、を学びます!
前回記事、MIPI D-PHY については以下リンクよりご覧いただけます!
Byte Data と Pixel Data
前回までに、各パケットの詳細を勉強しました。
ここから、残りの項目を勉強していきたいと思います。

では、さっそくByte Data Pixel Data について勉強していきましょう!
まず、DSI RGB888の例を参考にしたいと思います。
RGB888 とは、カラーフォーマットのことで、それ以外にも、YUV, YCbCr などのフォーマットが存在します。
R = 赤、G = 緑、B = 青の三原色をそれぞれ、8bit の 合計24bit で表現しています。
例えば、RGB888の場合、それぞれ 8bit のデータとして、1pixel 合計24bit で構成されています。
MIPIには、扱うデータすべてを1Byte単位で扱うという決められたルールがあります。
RGB888の場合は、このルールと帳尻が合うため、Packing の必要はありません。
また、MIPIのデータの送り方について、以下図右側にあるように
MIPIは、レーンディストリビューションファンクションと呼ばれる、決められたデータの並びでデータを転送します。
これも先ほど同様、MIPI規格の決められたルールです。
Lane0 1段目、Lane1 1段目、Lane2 1段目、Lane3 1段目のように複数レーンある場合は、パラレルに出力します。
シリアルレーンの場合は、シリアル出力となります。

次に、DSI YCbCr422 12bitの場合を確認しましょう!
YCbCrは、輝度成分Yと青から輝度を引いたCb、赤から輝度を引いたCrの3種類で色を表現する方式です。
どうやらRGBよりもデータ量が少なくて済む、効率的な方法のようです。
Y、Cb、Crそれぞれ 12bit で構成されています。しかし、MIPI には8bit 単位でデータを送るルールがありましたよね、どうするのでしょうか?
そこで、MIPIのルールに沿っていないフォーマットは、Packing をおこなう必要が出てきます。
Packingは、元のデータ幅から、8bit へデコードすることを言います。これによって、MIPIデータとして、転送できるようになります。
あとは、先ほどと同様に、レーンディストリビューションファンクションによって
複数レーンある場合は、データを転送します。
ここはフォーマットが変わったとしても変わらないようです!

Byte Data と Pixel Data の概念について、理解することができました!
次に、MIPI DSI 特有の仕様を勉強していきます。
DSI 特有の仕様とは?

DSI は以下の図のように、大きく2つ、
Command Mode と Video Mode に分けることができます。
Command Mode は周辺機器に対して、画像データとは別のデータとコマンドを送ります。
一方、Video Mode では、HSYNC/VSYNC を含む画像データを送信します。
また、Video Mode はさらに3つのModeに分かれています。
これらのモードは、デバイスによって対応しているモードがそれぞれ異なるため、DSI を扱う場合は、注意が必要になります。

MIPI DSIの"すべて"を1つの資料にまとめました
DSIについて、各Modeの詳細などまだ説明しきれていない内容がありますが、ここからはひろみん1人での理解とみなさんへの共有が難しいところです。
そこで、MIPI規格のすべてを網羅している、MIPI マエストロ G先輩にお話を伺いながら、
第1回記事、第2回記事で説明してきた内容も含めた、MIPI DSI で必要な内容のすべてを記載した資料を作成しました!
ぜひダウンロードいただき、MIPI D-PHY, DSI におけるご開発の参考にしていただければうれしいです。
▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽
これ一冊でぜんぶわかる!MIPI D-PHY 大辞典 ~DSI編~

次回の記事では、MIPI CSI-2 について勉強していきたいと思っています!
では、また次回!さようなら~