Ryuz's tech blog

FPGAなどの技術ブログ

MIPI-CSI2仕様を調べてみる

はじめに

ご承知の通り MIPI 仕様自体は無償公開あれているような代物ではありませんが、多くの FPGA ベンダーが、無償の IP コアを提供していることもあって、趣味レベルであっても FPGA などで画像取り込みができるような状況になっています。

一方で、それらを駆使して波形の観測などしていると、ある程度は自力で仕様が見えてくる部分があります。

そこで、ここ数年かけて私が独自に解析した結果をブログにまとめようかと思ったのですが、既に、私程度の情報はすべて記事になってることに気が付きました(笑)。 自分用備忘録に以下に張っておきます。

【徹底解説】 MIPIなんて難しくない! 新人がゼロから学ぶMIPI規格 ~ 基礎編 第1回 D-PHY とは? ~ - 半導体事業 - マクニカ

www.macnica.co.jp

docs.amd.com

nahitafu.cocolog-nifty.com

私は RAW 10bit の画像を扱う事が多く 8bit にパッキングされているのを並び替えるのがいつも面倒に思ってますが、よく考えると、4画素が 5バイトになっているわけですが、そのまま 8bit 画像として表示しても 5ピクセル周期で縦線が入るだけで、それっぽい絵になるのはデバッグには便利なのかもしれません(8bit RAW として簡易表示するだけなら 5バイト毎に1バイト捨てればよい?)

CRCECC

これは受信側は計算しなくても合っている前提で無視することもできるのですが、いわゆる普通の CRC-16 やハミング符号のようです。 ただし送信側を作る場合は、受信側次第では計算する必要があるのではないかと思います(送受とも自作する場合はどうでもいいですが)。 今だと AI におねだりすれば普通に計算コードを出力してくれたりもします。

昔データをキャプチャして分析したところ、CRCWikipedia などにもある、普通の CRC-16-CCITT のようでした。

ja.wikipedia.org

ECC が苦労した記憶がありますが、一般論やネットの断片的な情報や、無償のIPでいろいろ生成させたりとかで、ある程度のアタリが付いた記憶があります。

emb.macnica.co.jp

www.marubun.co.jp

https://www.eevblog.com/forum/microcontrollers/calculate-ecc-byte-for-mipi-dsi-header/

最近になって

  • 受信側のテストベンチとして送信信号を作りたい
  • 自作グローバルシャッターカメラでオレオレプロトコル以外にMIPIに寄せたものも試しておきたい

など、送信側も書いてみようという動機があり、ECCはおいておいて、少しコードを書きかけたら GitHub Copilot が勝手に ECC 作る function を吐き出してくるなんてびっくりするような事がありました。

いま改めて、ChatGPT さんに聞いてみると、この手の解析しながら調べながら作ってくと結構面倒なところ、いろいろ出力してくれました。

chatgpt.com

もうなんでも AI で出来てしまう時代ですね。

少し作ってみた

あれこれと試行錯誤中のコードを下記に作成中です。

github.com

もちろん、正規のものではなく、独自解析によるものなので嘘が含まれてる可能性も大いにありますが、「FPGAボードにちょっと MIPI カメラ繋いで遊んでみよう」みたいなホビーな人の参考になれば幸いです。