【徹底解説】 MIPIなんて難しくない! 新人がゼロから学ぶMIPI規格 ~ 基礎編:DSI ① ~

こんにちは! Lattice チーム新人 FAE の ひろみん です!

 このブログは、私ひろみんが MIPI の規格を学んでいく勉強ブログです。

 

MIPI ってなに? DSI/CSI-2 の規格の違いは?Lattice FPGAで設計するには?など

基礎から応用まで お勉強したことを余すことなくお伝えしたいと思っています!

 

さて、今回は、以下目次に沿ってMIPI DSIについて学んでいきたいと思います。

以下よりリンクで飛ぶこともできますのでご確認ください!

 

【この記事で分かること】
DSIについて、を学びます!

 ・ビデオフレーム図から理解しよう!

 ・MIPI 伝送時のパケット構成

 ・パケット詳細 - どんなパケットフォーマットなの?

 

前回記事、MIPI D-PHY については以下リンクよりご覧いただけます!

ビデオフレーム図から理解しよう!

 

まず、MIPIパケットが、どういった配列で転送されるのか、ビデオフレーム図を使って見ていきたいと思います。

 

ビデオフレーム図は、グレー部分と、青い部分に分けることができます。

グレー部分は、Blankingで構成され、映像が映っていない部分になります。

一方、青色の部分は、 Packet Header/Footer と 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)

で計算することができます。

Data Format に関しては、後ほど説明したいと思います。RBGやRAWと呼ばれるものがデータフォーマットです。

  

最初から情報量多く、大変ですが、次にMIPIのパケット構成についてみていきたいと思います!

 

MIPI 伝送時のパケット構成

 

これから、DSI を理解するにあたって以下、4つのセグメントに分けて学んでいきたいと思います。

 まずは、パケット構成からです。

  

 

パケット構成と言われても???なので、確認してみると、MIPI のデータは、

ショートパケットロングパケットに分かれた、パケット形式で伝送されるようです。

この構成は、DSI/CSI-2とも同じ構成をとります。

 

 

ショートパケットとロングパケットで扱うデータがそれぞれ異なります。

ここで、Frame Start/End という用語が出てきました。これは、何でしょうか?

調べてみたところ、どうやら、先ほどのビデオフレーム図にも関係する話であると分かったので、

先ほどのビデオフレーム図を基に詳細を見ていきます。

 

 

先ほどのビデオフレーム図をより詳細にまとめてみました。

映像 = 画像のパラパラ漫画なので、まず、画像を作るわけですが、

画像にするためには、1 Lineごと映像を出力します。それを複数Line 出力すると画像となります。

その画像の範囲、垂直方向の範囲を決めるのが、Frame Start/End

水平方向の範囲を決めるのが、Line Start/End となるようです。

なので、Frame Start/End、Line Start/End といった、

ビデオタイミングにかかわる情報はショートパケットに格納され、

実際の有効画像データは、ロングパケットに格納されるようです!

 

私たちが実際に目にする映像は、ロングパケットによって伝送されているものを見ていて、
ロングパケットを出力するタイミングはショートパケットによって制御されているみたいです!

   

次の章から、パケットの詳細についてみていきたいと思います!

    

パケット詳細 - どんなパケットフォーマットなの?

では、早速ですが、パケット詳細について学んでいきましょう!

DSIのショートパケット、ロングパケットのイメージは以下のようになります。

  

 

DSIショートパケットでは、Data ID、Data0、Data1、ECCの構成となっています。
なお、ショートパケットの Data0、1は 8bit 構成で、何もデータが入っていない、空箱のようなものになります。
特に制限がなく、ユーザー側で自由に使用してもいい部分になります。

 

一方、DSIロングパケットはもう少し複雑に、Data ID、Wrod Count(WC)、Data、Check Sum、ECCの構成となっています。

どんなものなのか、見ていきましょう。

 

パケット詳細 - Data ID

まず、Data ID です。

このData ID は、DSIショートパケット/ロングパケット共通で存在するものです。

 

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 の主な構成は、理解できました!

では、Data ID において、DSIロングパケットとショートパケットでは、どのような差分があるのでしょうか?

 

Data ID ショートパケット/ロングパケットでの差分

 

差分としては、Data Type の中身に差分があるようです。

 

DSIショートパケット での Data Type は、H Sync Start/End、V Sync Start/End といった、ビデオタイミング情報が Data Type の中に格納されます。

また、DSIロングパケットでの Data Typeは、有効画像 Data 部分の Data Format が入ります。

 

なんとなくですが、Data ID については理解できました!

次に、WC、ECC/Check Sum の詳細についてみていきたいと思います。

 

パケット詳細 - WC

次に、WC、Error Correction Code(ECC)、Check Sumについてみていきたいと思います。

 

WCは、2Byteで構成されるものになります、Packet Data で送るデータの数が何Btyeあるのか

知らせる役割をしています。

なので、このWCは、Packet Data によって可変するため、解像度やData Fromat によって可変します。

 

パケット詳細 - ECC/Check Sum

 

ECCとCheck Sum は主に、送る情報が正しいかどうか、誤り検出と訂正をおこないます。

誤り検出と誤り訂正とは、ノイズなどの影響により誤ったデータを送受信した際の誤ったデータを検出、訂正するために、用いられるものです。

 

 

ECCは、Data ID と WCの合計24bit に対して、ビット化けが発生しているか検知、確認が可能です。

1bit の誤り訂正と、2bitの誤り検出が可能となっています。

 

また、Check Sumは、ロングパケットのFooter にて、用いられる誤り検出となり、

有効画像Data 部分のビット化けが起きているかの検知、確認が可能です。

 

以上が、パケットの詳細となります。いかがでしたか?

次回の記事では、残りの部分Byte Data と Pixel Data、DSI 特有の仕様を学んでいきたいと思います!

 

さいごに:

感想は、正直情報量多く、お腹いっぱいです。(笑)

流石に1度では、覚えきれない部分なので何回も復習をして理解を進めていきたいと思っています。

  

では、また次回 Lattice寺子屋でお会いしましょう!さようなら!

 

MIPI DSI/CSI-2よくある質問集(予告&お願い)

記事をお読みいただき、ありがとうございました!

 今後、読者の皆さまからいただいた質問をまとめた『MIPI DSI/CSI-2よくある質問集』記事の作成を予定しています。
そこでお願いがあります!皆さまの疑問を以下ボタン【ご質問シート※個人情報記入なし】よりご投稿ください!
いまさら聞きにくかったり、ちょっとした疑問をお持ちの方も多いと思いますが、
そんな疑問も、そのままにせず、是非教えてください!
そういった疑問こそ、皆さま共通の疑問であることが多いので、今学んでる皆さまはもちろん、
今後学ぶ皆様の後輩の方たちにも、質問集を残したいと思っております。

一方通行でなく、皆さまのナマのお悩みを解決できる記事を目指しておりますので、是非ご協力お願いいたします。

皆さまのフィードバックを心よりお待ちしております。

   

▼ 個人情報の入力なし!皆さまの疑問が、次の記事を作ります! ▼

                         <ご質問例>気になることはなんでもOK!             

                         ・記事の不明点、疑問点、感想
                         ・MIPIに関する不明点、疑問点なんでも
                         ・記事化してほしいMIPIの内容など
                         ・筆者へのコメントもお待ちしています!

新人エンジニアの奮闘記〜MIPI規格編〜

MIPI規格は、近年ディスプレイのインターフェースやイメージセンサーの出力インターフェースなどに多く用いられる通信規格です。

規格の名前は知っているけど、通信帯域は?どんなプロトコルで伝送するの?など

MIPIの中でも、DSI/CSI に焦点を当てて、新人がゼロから勉強していく記事です。



他の記事よりも、わかりやすく、楽しくをモットーにMIPI規格について記事を作成しています。

新人と一緒に、勉強してみませんか?