MIPI CSI-2のRXでうまくいかない
Vivado 2020.2をインストールしてMIPI CSI-2のカメラ受信をしようとしているのですが、なかなかうまくいきません。
XILINXが提供しているコアにはMIPI CSI-2 RX Subsystemというのと、MIPI D-PHYというものの2つがあります。MIPI D-PHYはPHYのみですが、MIPI CSI-2 RX SubsystemはPHYの後ろにタイミング関係やRAW10などのパターンの変換などが付いていてVideoという例のバスが出てくる高度なものになっています。
MIPI CSI-2 RX Subsystemは、MIPI D-PHYにデコーダ回路を付けたものらしいので、まずは高レベルのRX Subsystemで試してみました。
これらのコアを使用して配置配線をするとBitGenやPlaterでエラーが出てしまいます。MIPIのコア自体にはIOSTANDARDの設定がされていないようなので、XDCファイルに
set_property IOSTANDARD LVDS_25 [get_ports cam_clkp_ip]
set_property IOSTANDARD LVDS_25 [get_ports cam_clkn_ip]
set_property IOSTANDARD LVDS_25 [get_ports {cam_dp_ip[0]}]
set_property IOSTANDARD LVDS_25 [get_ports {cam_dn_ip[0]}]
set_property IOSTANDARD LVDS_25 [get_ports {cam_dp_ip[1]}]
set_property IOSTANDARD LVDS_25 [get_ports {cam_dn_ip[1]}]
のように書いてIO規格を指定しなければなりませんでした。
データを受信するI/Oの規格はLVDSなのですが、IO電圧は3.3Vなので、このままだとエラーが出てしまいます。LVDS_25は受信だけなら3.3VのIOでもできるのですが、終端抵抗(DIFF_TERM)が入っているとIO電源電圧は2.5V要求されます。そこで、
set_property DIFF_TERM false [get_ports cam_clkp_ip]
set_property DIFF_TERM false [get_ports cam_clkn_ip]
set_property DIFF_TERM false [get_ports {cam_dp_ip[0]}]
set_property DIFF_TERM false [get_ports {cam_dn_ip[0]}]
set_property DIFF_TERM false [get_ports {cam_dp_ip[1]}]
set_property DIFF_TERM false [get_ports {cam_dn_ip[1]}]
のようにしてDIFF_TERMを無効にして、そのかわりに基板上にチップ抵抗を実装して
さて、MIPI CSI-2 RX Subsystemから出てくる信号をロジアナで観測したものの、すべての信号が全く出てきません。
唯一変化があったのは、rxbyteclkhsと、system_rst_outのみです。
rxbyteclkhsはだいたい69MHzくらいなのですがバースト的に動作しています。つまり、動いているときと止まっているときがあります。連続して送られてくるわけではないので、これをPLLの元にすることはできないでしょう。
信号が出てこない原因として考えられるのは2つあって、一つはMIPIのLPのほうをつないでいないということ。もう一つは基板の設計を間違えていてMIPIの差動信号のPとNが逆になっていることです。どうやらXILINXのコアにはレーンリバーサルの機能はないようです。
高度なRX Subsystemがだめなら低レベルのD-PHYだ、と思って、D-PHYをつないで全信号を内蔵ロジアナで見てみたのですが、
これもダメでした。
全信号がうんともすんとも言いません。
IPの設定はこんな感じです。
さて、次の手はどうしようかと悩むところです。
Trenz社製のMIPI RXコアを使うか、配線のPとNを入れ替えてみるか、どちらかですね。
| 固定リンク
コメント