exStickGEでPcam5Cを動かしてみた

技術紹介

Pcam 5Cは5Mピクセルの解像度を持ったカメラでDigilent社から発売されています.
MIPI CSI-2規格の信号でカメラの画像を読み取ることができるものです.
今回はこのカメラを使用してexStickGEで画像を取得してみようと思います.

Pcam 5Cについて

このカメラモジュールに搭載されているカメラはOmniVision社のOV5640です.MIPI CSI-2(Camera Serial Interface)と呼ばれるカメラ向けのインタフェースを通して差動信号で転送されます.この手のカメラは単純にCSIを接続しただけでは画像が出力されるわけではなくSCCB(OmniVision社の呼び名で実態はほぼI2C)インタフェースを通じてカメラに適切な設定をしなければいけません.

レジスタ設定

画像を取得するにはSCCBを通してレジスタを設定していく必要があります.レジスタ設定については基本的にOmniVision社とNDAを結ばないと得ることが出来ません.しかし最低限使用するための単純な設定については公開されているようなのでそれを使用します.
レジスタ設定について検証するにはDigilent社のPcam 5Cのデモが便利です.
レジスタの設定ヘッダファイル

一部のレジスタについて解説します.

PLL設定

カメラ内には入力クロックから分周逓倍回路があるのでその設定が必要です.
ただし相当複雑なのでヘッダファイル内にある設定をそのまま使うのが楽だと思います.

解像度

カメラの解像度を任意に変更するためのレジスタ設定についてですがちょっと複雑です.
まず値が8ビットに収まらず2つのレジスタにまたがって設定します.
イメージセンサの物理サイズは(0,0)-(2263,1963)となっています.
次にイメージセンサからデータ読み取る範囲(ISP入力サイズ)として
左上のアドレススタートと右下のアドレスエンドで指定します.
実際に取得する画像(データ出力サイズ)はISP入力サイズからのオフセット及び
サイズとして設定することで任意のサイズで画像が取得できるはずです.
(間違っていない保証はありませんが実際の挙動も含めこの解釈となりました)

デバッグ用

デバッグ用にテストパターンとしてカラーバーを出力する機能があります.
0x503Dのbit[7]を1にすることで有効になります.
(bit[3:2]を変更することで表示パターンが4種類ほどあるらしいのですが00しか試していないので未確認です)

Xilinx IPコアについて

XilinxではMIPI関連のIPコアはVivado 2020.1から含まれるようになりました.
受信なのでMIPI CSI-2 Rx Subsystemを使用します.
設定項目は複数ありますがPcam 5Cの場合主に以下の項目を設定すれば問題ないです.

  • Pixel Format RAW10
  • Serial Data Lanes 2レーン
  • Pixels Per Clock 4

exStickGEで動かす場合はCalibration ModeをNoneに設定しないと受信時にノイズが含まれてしまったので気をつけてください.

exStickGEで動かす

実際にexStickGEで動かしてみます.
環境はVivado 2020.1, Node.js v12.18.3で行いました.

以前クローンしたリポジトリがあるのであればプルし
なければgithub.comからソースコードをクローンします.
クローンしたのであれば弊社のe7UDP/IP IPコアのedifをディレクトリ内のedif内にコピーします.

今回のプロジェクトのモジュール構成を大まかに図にしてみました.
カメラから取得した画像はAXI4Streamに変換されます.
直接のデータはベイヤー配列と呼ばれるものになっているので扱いやすいRGBに変換されます.
その後はメモリにバッファリングし,必要に応じてUDP経由で読み出す構造となっています.



それでは実際に論理合成します.
Vivado 2020.1 Tcl Shellを開きexstickge_samples/exStickGE_pcam5cへ移動し
バッチモードで実行します.

cd exstickge_samples/exStickGE_pcam5c
vivado -mode batch -source create_project.tcl

ビットファイル作成が完了したらFPGAへビットファイルを書き込みます.
コンピュータとexStickGEを接続しコンピュータ側は10.0.0.1/24にIPアドレスを設定します.
ツールはexstickge_samples/exStickGE_hdmi2dram2udp/toolのものを使います.

cd exstickge_samples/exStickGE_hdmi2dram2udp/tool
electron src

exStickGE_pcam5cでは解像度を1920×1080に設定してあるのでその値を入力し実行します.

撮影した画像が取得できるはずです.
exStickGE_pcam5cでは1920×1080で取得していますがexStickGE_pcam5c_vgaでは640×480で
取得するように設定してあります.
受信時は1280×720で取得してください.

まとめ

MIPI CSI-2規格で動作するPcam 5Cについて調査しレジスタの設定の一部は情報があったため実際に動かしながら検証しました.
実際にexStickGEでPcam 5Cの動作を確認することが出来ました.
HDMI入力以外に画像を取得できる方法が増えてexStickGEを用いてできることの幅が広がります.

コメント

タイトルとURLをコピーしました