タグ: PINE64

Papilio、PINE64を用いた通信実験2

以前通信実験に失敗したPapilio-PINE64間の通信実験を再開した。

前回、問題のある個所が特定できなかったため、いくつかの問題に切り分けて対応した。

・PINE64側で処理が早すぎてデータを受け取っていない
→PINE64に遅延処理を追加した。以下はPINE64の動作の様子である。

exp_180509_2
PINE動作実験

・Papilio側でデータを受け取っていない
→Papilioにデータを送信後、そのままのデータをLED出力するモジュールを記述、実験を行った。
実際に想定通り、データの受信及びデータ更新ピン、データ更新完了ピンの動作を確認した。以下はその動画である。

exp_180509
Papilio側動作実験

・Papilioはデータを受け取っているが、SDRAMに書き込まれていない
→受信モジュールの動作タイミングに、現在は使用していないSERDESが受信したクロックを用いているため、通信のタイミングがずれていると考えられる。現在実験を行っている。

以上の実験から、現時点では実験が成功しない原因として、「データを受信しているが、それがSDRAMにうまく書き込まれない」ことがあげられる。対策として、受信モジュールの動作タイミングからSERDESのクロックを外すことで実験を行う。

広告

PINE64用ケースの製作

以前の電源装置と同時期に設計し、加工依頼を行ったPINE64用ケースの組み立てを行った。

PINEケースはアルミ板をレーザー加工し、組み合わせて製作する。アルミ板には各入出力端子の部分に穴をあけた。アルミ板同士の接合はコニシが製造しているユニバーサルチャンネル(下記URL)の穴を拡張し、ナッターを接着したものを使用する。

https://www.konishi-de-manabu.net/items/5789ef6099c3cd560300db1a

ユニバーサルチャンネルの穴拡張時、事前調査では穴がうまく開かず、本体が曲がってしまうと分かっていた。しかし、切削時のボール盤の回転数をボール盤の適正値に合わせて切削を行ったところ、曲がることなく穴をあけることができた。しかし。チャンネルの切断時に弓のこを使用したため、刃が引っ掛かった際にチャンネルが曲がってしまった。

PINEは14mmスペーサーとナットを組み合わせて高さを調整しつつ配置した。その際、チャンネルとPINE裏面が接触する恐れがあったが、高さを上げすぎると側面板の穴位置と大幅にずれてしまうため、マスキングテープをチャンネルに貼り付け、応急処置を行った。現時点で接触はしていないと思われるため、問題はない。

s-IMGP1007
ケースにPINEおよびシールドを搭載した状態

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を経由してピンに入力する必要があった。修正ができなかったので次回以降修正を加える。

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

Papilio用SERDESシールドをPINE64上で使用するための変換基板を設計した。

本回路の仕様は、

・PINE64上に実装可能なように、PINE64のピンヘッダ配置に合わせてピンソケットを配置
・SERDESシールドを使用するため、SERDESシールドの送受信ピンをPINE64上のPI-2BUS(Raspberry Pi互換IOピン)と接続
・ワンオフ品であるため、両面ユニバーサルB基板で製作

である。回路図、パターン図を以下に示す。

PINEシールド回路図20180227
回路図
PINEシールドパターン図20180227
パターン図

シールドには、電源やシステム処理状態確認用LED、電源及びリセットスイッチを搭載した。次回以降、この回路の製作に移行する。

PINE64からのデータ送信

PINE64上にあらかじめ保存したデータの送信をするプログラムを作製した。

プログラムはPythonで記述した。

このプログラムは、あらかじめテキストデータで保存した制御用データ(40bitを16進数ASCIIコードで10文字に短縮)を読み取り、送信に使用するPapilioに転送するものである。

Pythonで文字列から2進数8bit文字列の生成を行う参考資料が見つからなかったため、読んだ文字列によって4bitの2進数データを出力する関数を作製し、文字を一文字ずつ読み取りながら実行を行う仕様にした。

本来はPINEの出力ピンから出力するが、文字列としてコマンドライン上に出力した結果が以下のとおりである。

文字列認識結果201180119
出力文字列

なお、ここで使用した文字列は完全ランダムな10文字を6セット用意したものである。

現在PINEのピンからの出力がうまく確認できていないため、PINEのピンからPapilio上に変換するケーブルを作製し、実験を続ける。

大容量5V電源装置の設計2

以前切削したPINE64用電源の部品が到着したので、回路を製作した。

完成した写真を以下に示す。

OLYMPUS DIGITAL CAMERA
表から見た写真
OLYMPUS DIGITAL CAMERA
裏面
OLYMPUS DIGITAL CAMERA
電圧計を取り付けた様子

電圧計、スイッチ、電源用LEDの接続にはSXHコネクタ、電流計および分圧回路の切り替えスイッチの接続にはユーロブロックコネクタを使用した。

この状態で動作させたところ、5Vの出力が確認され、電圧計、電流計の動作も確認できた。

今後この装置の外部筐体の設計と製作を行い、一つのユニットとして完成を目指す。