« Artix-7ボード用のHDMI&MIPI拡張基板を動かす | トップページ | RasPi Camera V2とFPGAをつないで何らかの信号が出ることを確認 »

2021.05.17

Raspi CameraのI2Cから読み出し

RasPiカメラV2をFPGAで扱うため、まずはI2CのコントロールロジックをVHDLで開発しています。

どうせならちゃんとしたコアを作ろうと思い、NACKリトライまで付けています。

3層のステートマシンが階層間でREQやACKを渡して、精巧な歯車のように連携して動作するコアです。

一番最下層のステートマシン「state_l」は、Start ConditionやStop Condition、Tx、Rxなどの処理を行います。

中間のステートマシン「state_m」は、state_lに指示を出してReadやWriteといったシーケンスを行います。

上位のステートマシン「state_h」は、書き込みたいアドレスとデータのシーケンスをROMから取ってきてstate_mに指示を出します。

このくらいの規模の回路だとHLSやソフトウェアを使うよりRTLの方が楽ですね。

まず、シミュレーションでちゃんと意図したように動いているのを確認します。

I2c_sim

 

実機でやってみると、何かおかしい。

I2CのReadのときにはStart→Devアドレス送信→サブアドレス送信→Start→Devアドレス送信→受信→Stopというのを行うのですが、FPGAが受信するときにNACKで返さないとI2CのターゲットがStopを受け付けずに次のを送ってくるなどして少しハマりました。

無事、RasPiカメラV2のI2CからのACKが確認できて、MODEL_IDが0x02 0x19と正しく読めるようになりました。

Raspicam4

ターゲットから返って来る波形を目でみて確認しているのですが、I2Cのクロックを100Hzくらいまで落とせば、ILAとか入れなくてもMITOUJTAGのバウンダリスキャンでI/Oの波形が見えます。

デバッグ回路をわざわざ入れる必要がなく、すぐに確認できるのが便利です。

|

« Artix-7ボード用のHDMI&MIPI拡張基板を動かす | トップページ | RasPi Camera V2とFPGAをつないで何らかの信号が出ることを確認 »

コメント

コメントを書く



(ウェブ上には掲載しません)




« Artix-7ボード用のHDMI&MIPI拡張基板を動かす | トップページ | RasPi Camera V2とFPGAをつないで何らかの信号が出ることを確認 »