2017.04.26

Cosmo-Zのアルミケースに新型が登場

Cosmo-Zのアルミケースが新しくなりました。

構造自体は変わらないのですが、フロントパネルとリアパネルにシルク印刷とアルマイト加工が施されるようになりました。

Cszcase1

TOKUDENの字が少し上によってしまったのと、もう少し大きくすればよかったかなと思います。

Cszcase2

シルクで印刷されているので、何のコネクタの穴なのかがすぐにわかります。

中身はこんな感じ。

Cszcase3

汎用計測器としての高級感を醸し出せるように今後も改良を続けていきたいと思います。

| | コメント (0)

2017.04.24

2台のボードでIBERT試験を行う

XILINXのCoreGeneratorにあるIBERT試験は、2台のFPGAで別々に動かしても動くようです。

下の写真はCosmo-K+を2台用意して、40Gbpsの光ファイバで結んでいます。

Ibert_cross

両方のCosmo-K+に、IBERT試験用のBitStreamをROMに書き込んで、起動しておきます。(扇風機は冷却のため)

そして、Chipscope Analyzerを起動すると、40Gbps (中身は10Gpbs×4本)のうち3本がリンクアップして、エラーなく動いていました。

Ibert_cross_2

CH1(X0Y4)が動いていませんが、基板の配線が物理的に間違っている試作用の基板だからです。

IBERT試験は他のボードから出てきたデータでもリンクアップするということは、

・IBERT試験用のコンフィグデータを書きこんだFPGAボードは、理想的な10Gbpsの信号ソースとして使える

・IBERT試験は、自分自身のクロック周波数と、受信したクロック周波数がずれていても良い

ということだとです。

| | コメント (0)

2017.04.21

1G ADCの信号受信がうまくいかないので、IBERT試験を行ってみた

1Gbit/sの超高速ADCから光ファイバで送られてくるJESD204Bの信号受信がうまくいかないので、IBERT試験を行って、Cosmo-K+のGTXが正しく動作しているのかどうかを試験してみることにしました。

この光ファイバは10Gbpsの信号を4本束ねた40Gbpsのファイバです。1本1本の信号は10Gbpsになっています。

まず、CH1。

Csk3_1

アイが開いていて、非常に良い感じです。50%くらいありそうですね。

次にCH2。やや狭い。30%程度でしょうか。

Csk3_2

次はCH3。これも狭い。30%くらい。

Csk3_3

最後のCH4。急に良くなります。50%くらい開いています。

Csk3_4

チャネルで結果が大きく異なるのは、もう1台のCosmo-K+でやっても同じ傾向だったので、基板かケーブルの伝送品質の問題か、QSFPモジュールの問題と考えられます。

とにかく、Cosmo-K+で10Gbpsの信号4本がちゃんと動くことが確認できました。








| | コメント (0)

2017.04.20

RasPiカメラをFPGAにつないで、初めて信号が出た

今日もRasPiカメラをFPGAにつなぐための調査をしています。

Csk_csi

GPIO1と0を立ち上げた後、レジスタ設定を行い、最後に4msほど待ってからスタンバイを解除したら動きました。

レジスタ設定の中で0x6620~6623と、0x45xx番地や0x47xx番地のデータシートに載っていないレジスタについては、設定してもしなくても変化はないようです。

今の設定では1920×1080の30fpsにしたつもりなのですが、クロックは361MHz、

Clk

データレートも361MHzのDDRでした。

Data_1

また、データは団子になってやってきていて、

Data_2

1つの塊の周期は14us。最初はスキマがありますが、後はだいたい詰まっていて、13.48ms送った後、長い休みになります。

Data_4

繰り返しの周波数は32Hzでした。

まとめると、

  • クロック周波数361MHz
  • 1H=14us? ・・・2000~2527pixel ?
  • 1V=962H?

という結果でした。

設定したレジスタの値なども、何を参考にしたかさえよくわからなくなってきているので、次は高速差動信号のデコードに取り組もうと思います。

| | コメント (4)

2017.04.19

RasPiカメラ V2.1のI2C操作方法

昨日に引き続き、RasPiカメラV2の使い方を調べています。今日はI2Cの信号やGPIOの信号をどう操作するかを解明しました。

まずRasPiカメラからSDA、SCL、GPIO1、GPIO0の信号を引き出して、それをプローブにつなぎます。

Raspicam_1

そして、カメラを起動したときのこれらの4種類の信号の波形をオシロでキャプチャします。

Csi39

こんな感じの信号になりました。黄色と青はI2CのSCLとSDAで、赤と緑がGPIO0,1です。GPIOが立ち上がる前からI2Cは動作しているように見えます。

解析してみた結果は次の図です。

I2c_1

I2Cの信号は、カメラ以外のデバイスにもつながっているようで、57Hzくらいの頻度で常に出ています。カメラを操作しているI2C信号は、GPIOが立ち上がった後に出ているもののみなので、GPIOより前の信号は解析しないでも大丈夫です。

また、差動プローブを使って高速差動信号とのタイミングも見てみます。

Raspicam_2

I2c_2

GPIOを立ち上げて、I2Cで初期化した後で、D0に信号が来ているのがわかります。また、毎回のフレームの間にI2Cのアクセスが入っていますが、これはアナログゲインやライン中のピクセル数などを設定しているコマンドが入っています。

さて、GPIOのタイミング等を詳しくみてみましょう。オシロで見たところ、GPIO1が先に立ち上がって、300ns後にGPIO0が立ち上がっていました。

I2c_4

このカメラ(Sony IMX219)のデータシートに記載されている電源投入シーケンスを見てみます。データシートはネットを検索すれば見つかると思います。

I2c_3

電源を投入して、クロックを入れてから内部のXCLRが解除されるまでに200usの時間がかかり、I2Cのコマンド設定受け入れまでに5.3msかかるらしきことがわかります。

また、XCLRの解除後、スタンバイモードを解除するまでに少なくとも6ms必要であることもわかります。

したがって、GPIO0はXCLRで、GPIO1はクロック許可か電源コントロールではないかと考えられます。

sun

次に起動中に行われているI2Cのシーケンスを解析しました。

ざっくりと描くと次の図のようになっていました。

I2c_5_2


まず、GPIOを立ち上げた後、5ms待ってからIDCODEのチェックを行っています。

その後、ソフトウェアリセット、ソフトウェアスタンバイ状態の設定を行い、24ms待ってからレジスタ設定を行っています。

レジスタ設定が終わった後4ms待ってから、アナログゲインの設定などを行い、最後にストリーミング開始(スタンバイ解除)を行うというものでした。

レジスタ設定では、最初にこのようなシーケンスを実行しています。

I2c_6

ただ、このシーケンスは謎が多く、最初の6620,6621,6622,6623のレジスタはデータシートには存在しておらず、アクセスコマンドシーケンスは0Cと05が入れ替わっているなど、不可解な点が多くありました。

ネット上で検索すればSony IMX219のCドライバソースを見つけることができると思います。そういったものとほぼ一致していましたが、部分的に一致していない箇所があるので引き続き調査が必要そうです。

そして、PLLの設定を行ったあと、不明なレジスタをたくさん叩いて、最後にStreaming開始のコマンドを送っていました。

I2c_7

さて、これと同じのをFPGAで出せばよさそうですね。

希望が見えてきました。

| | コメント (0)

2017.04.18

RasPiカメラ V2.1のCSI信号の詳細

Raspberry Pi カメラ 2.1のMIPI D-PHY CSIインタフェースの動作を解析しています。

前回のブログで「クロックは30Hz」と書きましたが、それは間違いでした。

RaspberryPiをつないで、raspivid -w 1920 -h 1080 -t 100000 -o hoge と打つと、カメラが動き出します。そのときの各端子の様子を高速オシロで見てみました。

CSIのクロックはオシロでみるとこのような1.2Vくらいの振幅の波形をしていますが、

Csi_ck

LVCMOS12とかではありません。

電圧が低い部分に本当のクロックが隠れていました。

Csi_ck2

30HzでHLHL・・しているように見えますが、差動信号ですから両方が同時にHになるということはありませんよね。

同時にHになっているときはIDLE状態で、低い電圧のところに振幅100mVの真のクロックがいます。

Csi22

クロックの周波数は455MHz、振幅は200mVくらいのようです。

一方、データバス(D0,D1)を見てみると、同じようにHLHLと50kHzくらいでトグルしています。

Csi_d0

データもクロックと同様に電圧が高いところでは、差動の両方とも1.2Vくらいになるので、信号なしと考えるのが妥当です。同様に本当のデータは0V付近のところにあるようです。

差動プローブで測ってみると、本当の姿が見えてきます。Lになっていた部分が信号ありの状態で、Hになっていた部分が信号のない部分です。周期は18.86usでした。

Csi17

データ線の様子を拡大すると、

Csi23

455MHzくらいのDDRで動いているようです。約1nsで1bitを送っています。

元に戻って、1Hの中で信号のある期間を測ってみたら、9.03μ秒くらいでした。

Csi16

9.03usに455MHz×2のデータレートだと8217bit入るので、1つの画素を8bitとすると1000ピクセルくらい入る計算になります。そして、Dバスは2レーンあるので、横2000ピクセルくらいのデータ量になると考えられます。

なお、1V(垂直期間)は17430μ秒だったので、925本程度の水平ラインが入ることができます。2000×926ですから、1920×1080pの30fpsなのかもしれません。

RasPiカメラ 2.1のCSIのタイミングをまとめると次の図のようになりました。

Csi_timing

次はI2Cのシーケンスと、GPIOの操作方法を解析しようと思います。

| | コメント (0)

2017.04.15

Cosmo-Kの新基板が到着

火曜日に出図した基板が、もう届きました。

Cosmo-Kは、まだ一般のお客様向けには1枚も出荷していないのに、すでに2回目の改版です。

※ First User向けにはトータルで16台出ている。

今回、ホームページを見てご注文をくださったお客様がいらっしゃったので、少し改版して一般向けに販売できるように改良を続けています。

6層基板で金フラッシュ、0.1mm/0.1mmルール、国内製造です。

Cosmok_b

価格的には某P社の7営業日(実質10日)コース程度なので、同一の値段で納期が半分といった感じです。基板業界もだいぶん変わりましたね。

透明の袋に入って送られてくるので、中身がよくわかります。

Cosmok_b2

コネクタの下にあるViaが、レジストを越えてショートしないようにシルクをかけています。

Cosmok_b3Cosmok_b4


ちょっとシルクが薄いかもしれません。まぁ、大丈夫でしょうけど。

かなり品質が良く満足しています。

| | コメント (0)

2017.04.13

ラズベリーパイカメラをFPGAにつなぐ

ラズベリーパイカメラをFPGAにつなぐ方法を考えています。

ラズベリーパイのカメラは、SCCBでいろいろなレジスタを設定しないと、クロックやデータを送ってきません。しかし、SCCBのレジスタの一覧やアクセス方法は公開されていません。

ラズパイカメラは、15ピンのフレキケーブルでつなぎますが、これはMIPI D-PHYのCSI接続といいます。CSIでは、クロックやデータはカメラ側から出力されてきます。そのため、電源をつなげば画像が出てくる・・と最初は甘く思ったのですが、SCCBというプロトコルを使っていろいろと内蔵レジスタを設定してあげないと何も出てこないようです。

最初はレジスタ44と88に何かを書いてあげれば出てくると気楽に考えていたのですが、そうはいきませんでした。まず、SCCBはI2Cとは異なるプロトコルなので何が正しいのかさえよくわかりません。ACKも帰ってこないようです。

そこで、まずはカメラをラズベリーパイをつないでSCCBの信号をオシロでキャプチャするところから始めました。

Sccb

見てのとおり、SCCBはI2Cに似てはいますが、データの長さが32bitだったりするなど、かなりの相違があります。

アルバイトさんが、ラズベリーパイの出力する波形をオシロで解析して、どのレジスタにどんな値を書き込むかを調べてくれました。

Sccb3


それをVHDLにして

Cam_access

同じパターンの波形を送ってはみたのですが、クロックもデータも送られてきません。

ラズパイカメラには、CLKやGPIOという端子もありますが、正常に動作しているときには、CLK端子が0→1になったあとGPIOを0→1になっているようなので、これらの端子も何らかの制御に関わっているのだとは思います。

また、MIPI D-PHYではD0のPとNは双方向の信号です。低速な通信モードでは双方向で使うらしいのでが、ラズパイとつないだときには双方向として使われている感じではなさそうでした。

引き続き解析を行っていきます。

| | コメント (0)

«納期がnobis