こんにちは! Lattice チーム新人 FAE の ひろみん です!
このブログは、私ひろみんが MIPI の規格を学んでいく勉強ブログです。
MIPI ってなに? DSI/CSI-2 の規格の違いは?Lattice FPGAで設計するには?など
基礎から応用まで お勉強したことを余すことなくお伝えしたいと思っています!
さて、今回は、以下目次に沿ってMIPI CSI-2 について学んでいきたいと思います。
以下よりリンクで飛ぶこともできますのでご確認ください!
【この記事で分かること】
CSI-2 について、学びます!
前回記事、MIPI DSI編 については以下リンクよりご覧いただけます!
ビデオフレーム図からおさらいしよう!
第2回記事で説明した、ビデオフレーム図を使って、MIPIのパケットがビデオフレーム内でどういった配列で転送されるのかどうかをおさらいしましょう。
ビデオフレーム図は、グレー部分と、青い部分に分けることができます。
グレー部分は、Blankingで構成され、映像が映っていない部分になります。
一方、青色の部分は、 Packet Header/Footer と Data で構成され、実際に映像が表示される data 部分は、Valid Data です。
Blanking → Packet Header → Valid Data → Packet Footer → Blanking の順で送られます。
これで 1 Lineとなります。この Line を複数Line 送ることで、1枚の画像ができあがります。

1枚の画像サイズのことを解像度や画角と呼びます。
これは、動画を表示する領域のサイズ(水平方向pixel × 垂直方向のpixel)のことを言い、SD、HD、フルHD、4K といった表現をします。
この1枚画像をパラパラ漫画のように切り替えると映像になります。
また、パラパラするスピードにも決まりがあります。
1秒間の動画が何枚の画像で構成されているかを示すの単位のことを、Frame Rate(fps)と言います。
上記のようにして動画は構成されています。
MIPI は通信規格なので、Data Rateという概念がもちろんあります。
総データレートの算出は、水平方向pixel × 垂直方向のpixel × Frame Rate(fps)× Data Format(bit)で計算することができます。
いかがでしたでしょうか?私もうろ覚えな部分が多く、よい復習になりましたね!
次にMIPIのパケット構成についてみていきたいと思います!
MIPI 伝送時のパケット構成
これから CSI-2 を理解するにあたって、DSI 編同様、以下の3つのセグメントに分けて学んでいきたいと思います。
まずは、パケット構成からです。

DSI 編でも少しお話ししましたが、パケット構成は、DSI/CSI-2 とも同じ構成をとります。
MIPI のデータは、ショートパケットとロングパケットに分かれた、パケット形式で伝送されます。それぞれ、異なるデータを扱います。
また、HS mode時にパケット伝送をおこない、LP mode時はパケット伝送をおこないません。

Frame Start/End という用語が出てきました。みなさん、覚えていますか??先ほどのビデオフレーム図にて復習しましょう。

先ほどのビデオフレーム図をより詳細にまとめています。映像 = 画像のパラパラ漫画なので、まず、画像を作るわけですが
画像にするためには、1 Lineごと映像を出力します。それを複数Line 出力すると画像となります。
その画像の範囲、垂直方向の範囲を決めるのが、Frame Start/End、水平方向の範囲を決めるのが、Line Start/End となります。
そのため、Frame Start/End、Line Start/End といった、ビデオタイミングにかかわる情報はショートパケットに格納され、実際の有効画像データは、ロングパケットに格納されます。
私たちが実際に目にする映像は、ロングパケットによって伝送されているものを見ていて、ロングパケットを出力するタイミングはショートパケットによって制御されています。
次の章から、パケットの詳細についてみていきたいと思います!
パケット詳細 - どんなパケットフォーマットなの?

ここからは、CSI-2 のパケットについて学んでいきます。DSI と比較すると、若干の違いがありますので差分をメインに学びたいと思います。
CSI-2 のショートパケット、ロングパケットのイメージは以下のようになります。

CSI-2 のロングパケットは、Data ID、Wrod Count(WC)、Data、Check Sum、ECCの構成です。CSI-2 の伝送は、ロングパケットの占める割合がほとんどです。
赤字で示している「Sync Code "0 x B8"」の部分です。これは何でしょうか?

Sync Code は 、HS mode の先頭位置を検出するために用いられます。LP → HS へ遷移した直後に、この Sync Code を見て、HS mode の先頭はどこかの検出をおこないます。
これは、DSI/CSI-2 共通で伝送されるものみたいです。DSI を調べたときに出てこなかったので、新しい発見ですね!
先ほどの、パケット詳細に戻ります。
ショートパケットでは、Data ID、16Bit Short Packet Data Field、ECCの構成となっています。
パケット詳細 - Data ID
まず、Data ID です。このData ID は、CSI-2 ショートパケット/ロングパケット共通で用いられます。
ショートパケット/ロングパケット それぞれ Data Typeに格納されるデータが異なります。DSI の DataID と比較しても、データの中身は異なるかと思います。

Data ID の主な構成は、Virtual Chennel (VC) 2bit と、Data Type 6bit の計8bitから構成されます。
VC は、Displayのラベリング用途で、用いられます。例えば、2台 Displayがある場合、それぞれ、VC1、VC2とラベリングを Data ID内のVCでおこないます。
Data Typeは、文字通り、有効画像データ(Packet Data)部分のData Typeが何になるのか識別するために用いられます。右下の表の種類で、送るデータが何になるかを決めます。
Data ID の主な構成は、理解できました!
CSI-2 ロングパケットとショートパケットでは、異なるデータを扱うと説明しましたが、どのような差分があるのでしょうか?
Data ID ショートパケット/ロングパケットでの差分

差分としては、Data Type の中身に差分があるようです。
CSI-2 ショートパケット での Data Type は、Frame Start/End、Line Start/End といった、ビデオタイミング情報が Data Type の中に格納されます。これを、Synchronization Short Packet Data Type と呼ぶようです。
また、CSI-2 ロングパケットでの Data Typeは、有効画像 Data 部分の Data Format が入ります。
この部分を DSI ショートパケット/ロングパケットで比較すると、データの中身が若干異なると思います。
Data ID については理解できましたので、次にWC、16Bit Short Packet Data Field、ECC/Check Sum の詳細についてみていきたいと思います!
パケット詳細 - WC
次に、WC、16Bit Short Packet Data Field、Error Correction Code(ECC)、Check Sumの順にみていきたいと思います。
WCは、2Byteで構成されるものになります、Packet Data で送るデータの数が何Btyeあるのか知らせる役割をしています。
このWCは、Packet Data によって可変するため、解像度やData Fromat によって可変します。

パケット詳細 - 16Bit Short Packet Data Field
次に、16Bit Short Packet Data Field についてです。16Bit Short Packet Data Field は、2 Byte の構成となっています。
この 2Byte の中に、Frame number / Line number というデータが格納されるようです。
Frame number は、直前の Data ID に Frame start code (0x00)、Frame end code (0x01) が格納されている場合に、この 16Bit Short Packet Data Field に Frame number が格納されます。
また、Line number は、直前の Data ID に Line start code (0x02)、Line end code (0x03) が格納されている場合に格納されます。
ここは DSI と異なる部分ですね!勉強になります。
最後に、ECC/Check Sum をみていきましょう。

パケット詳細 - ECC/Check Sum
ECCとCheck Sum は主に、送る情報が正しいかどうか、誤り検出と訂正をおこないます。
誤り検出と誤り訂正とは、ノイズなどの影響により誤ったデータを送受信した際の誤ったデータを検出、訂正するために、用いられるものです。

ECCは、Data ID と WCの合計24bit に対して、ビット化けが発生しているか検知、確認が可能です。
1bit の誤り訂正と、2bitの誤り検出が可能となっています。
また、Check Sumは、ロングパケットのFooter にて、用いられる誤り検出となり、
有効画像Data 部分のビット化けが起きているかの検知、確認が可能です。
MIPI CSI-2 大辞典 ダウンロードはこちら!
ここから、ショートパケット/ロングパケットの位置関係や Lane Distribution Function といった内容は、DSI編同様、以下の画像のように内容が難しくなるため、ひろみん1人での理解ではみなさんへの共有が難しいところです。
そこで、MIPI規格のすべてを網羅している、MIPI マエストロ G先輩に全面協力いただき、「これ一冊でぜんぶわかる! MIPI D-PHY 大辞典 CSI-2 編 ~ 」 を作成しました!
第2回記事で説明してきた D-PHY の内容も含めた、MIPI CSI-2 の内容すべてを記載する予定です。
ぜひダウンロードいただき、MIPI D-PHY, DSI におけるご開発の参考にしていただければうれしいです。
▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽
これ一冊でぜんぶわかる!MIPI D-PHY 大辞典 ~DSI編~

次回の5回目記事以降では、MIPI規格を FPGA で実現するメリット/デメリット記事、FPGA MIPI I/F 事例集記事、仕様検討の際のポイント/よくある質問集記事 など、今後の記事をまとめた内容となります。
では、また次回!さようなら~
新人エンジニアの奮闘記〜MIPI規格編〜
MIPI規格は、近年ディスプレイのインターフェースやイメージセンサーの出力インターフェースなどに多く用いられる通信規格です。
規格の名前は知っているけど、通信帯域は?どんなプロトコルで伝送するの?など
MIPIの中でも、DSI/CSI に焦点を当てて、新人がゼロから勉強していく記事です。
他の記事よりも、わかりやすく、楽しくをモットーにMIPI規格について記事を作成しています。
新人と一緒に、勉強してみませんか?