新千葉 ガーベージ・コレクション

FPGA マガジンやインターフェースで書けなかったこと等をちょぼちょぼ書いてます。@ryos36

ラズパイ カメラ V2.1 と FPGA

Zybo Z7 とラズパイ・カメラ V2.1 を購入。
忘れないようにメモ(備忘録)

https://github.com/allwinner-zh/linux-3.4-sunxi/blob/master/drivers/media/video/sunxi-vfe/device/imx219.c
android_kernel_asus_ze55xml/imx219.h at master · jerdog/android_kernel_asus_ze55xml · GitHub

どうやら 0x30eb の記述。このなぞの 6 ワード(6byte) で起動がかかるみたい。そのまえに GPIO を操作して起動しないとダメだけど。

0x6620 の隠し機能(?)に書いてるコードもある。
nuttx/camera_ext_mhb_imx219_pi.c at master · MotorolaMobilityLLC/nuttx · GitHub

この場合、起動シーケンスがちょっと変わる。たぶん、高解像度の時かなんかに必要なシーケンス(そしてアンドキュメント)だと思われる。imx219 の pdf の資料には書いてないから。

Zybo Z7 では CAM 用の GPIO に CAM_CLK と CAM_GPIO がある。CAM_CLK のピンは以前のラズパイカメラ(V1.3) では単に LED に繋がっていた。V2.1 はどうも LED がないらしい。今のところ CAM_CLK は on/off しようが I2C とのやりとりはできる。重要なのはどうやら CAM_GPIO のようだ。

参考までにラズパイではそれぞれ GPIO5 と GPIO21 に繋がっている。GPIO5 の使い方の例は次のところで見つけた。
https://www.raspberrypi-spy.co.uk/2013/05/how-to-disable-the-red-led-on-the-pi-camera-module/

試してないし、V2.1 で有効かはわからない。
私が実験した結果では 電源オン後、CAM_CLK を0のまま、CAP_GPIO を 1 にしその後 I2C の通信をすれば、すくなくととも I2C は動くことがわかっている(映像までは確認していないので CAM_CLK がなんらかの影響がある可能性はある)。

下がその I2C をキャプチャした画面。
f:id:ryos36:20180221121339p:plain

そして UART に 0219 を出力。
f:id:ryos36:20180221121420p:plain

デザインはひっちゃかめっちゃか(死語)だが、正しい。
f:id:ryos36:20180221121500p:plain

やりたいことは WindowsTeraTerm から Zynq の PS の UART を通って Zynq PL の UART との通信が一つ。
これは Zynq の PS の UART はただの橋渡し役。いろいろ調べたが、私のやりたいように、うまく接続できないことがわかっている。
Zynq の PL の UART まできたら、Polyphony で解釈して I2C と直接話す。途中までできた。
vio である Virtual な GPIO を on にすると、I2C のプログラムが走り出し imx219 と通信して ID をとってくる。そして、その16進の値をストリングに直して UART へ送る。すると、WindowsTeraTerm で情報が見れる。というところまでは出来た。ソフトウェアはほとんど関与しておらず、Polyphony (Python による高位合成)で達成している。