月: 2018年3月

Papilio、PINE64を用いた通信実験

本報告までに作成してきたPINE64送信プログラム及びPapilio側での受信プログラムを用いて通信実験を行った。現時点で2度ほど実験を行っているので、順に結果を示す。

1回目の実験時は、Papilio側で通信がすぐに終了し、データがすべて1になるという状況になった。これは、Papilio側でデータの更新タイミングを「SERDESによって送信されてきた100MHzクロック」を用いて行っており、またこのクロック8回分で64bitデータを受信する設計であったことが原因である。PINE側からクロックが出力できず、通信のクロックがずれており、かつPINE側の送信に遅延を入れていたため、データを受け取りすぎたのだ。

この結果を踏まえ、PINE側からの送信開始時のフラグとともに、Papilio側でデータ受信が完了したことを示すフラグをPINE側に返す、ハンドシェイクを用いた方式にした。

修正後の2回目の実験でも、通信が成功しなかった。しかし、この原因はプログラムでなくハード側であると考えられる。実験直前に発覚したミスも含めて、原因は以下のものであると考える。

・先日作成したPINE用シールドのPapilio搭載側のA、Bラインの向きが180度逆であった。A0ピンの位置にA15ピン、B0ピンの位置にB15ピンが接続されていた。設計時に逆に配置してしまったようである。現状SERDESのクロック出力ピンにPINEからのデータ出力ピンがつながっている個所もあるので、修正か再作成を検討中である。
・ハンドシェイク方式に変更した際、データ更新を要求するPapilio側の送信ピンを、SERDESの受信側に接続されているピンから出力していた。実験時は有線であったためあまり問題ではないが、修正が必要である。
・Python側で遅延を一度も入れないプログラムにしていた。データ更新中に下がるはずのフラグを読み込んでいない可能性がある。
・統合実験を急いだため、個別の実験を行わずに実験を行っていた。そのため、現時点で通信失敗の原因がPINE側からの送信速度が速すぎるのか、Papilio側で受信ができていないのかが不明である。

問題点が複数同時に発覚したので、修正には少し時間を要すると考えられるが、ひとつづつ実験を行っていく予定である。

PINE64用SERDESシールド変換基板の製作2

前回設計したPINE64用SERDESシールド変換基板を製作した。製作には両面スルーホールユニバーサル基板Bタイプを使用した。完成した写真を以下に示す。

s-IMGP0286
シールド(搭載状態)

シールドにはリセット用及び電源用のタクトスイッチを搭載したが、ラベルを基板上に書き込むことができなかったため、マスキングテープを貼り付け、その上に記載した。

リセットボタンを含めた動作が確認できたが、LEDの配線が間違っており点灯しなかった。当初の設計は、LEDのピンから出力されたLEDをGNDに接続していたが、実際は3.3VからLEDを経由してピンに入力する必要があった。修正ができなかったので次回以降修正を加える。