SiTCPに関する情報を共有するためのフォーラムです。この目的に反しない範囲で、質問、コメント、回答などご自由にご投稿ください。
This forum is for sharing information about SiTCP. Please do not hesitate to post any questions, comments or answers within the scope of this purpose.

IPアドレスを変えた後2度目の接続ができない

投稿日時 2016/10/25 16:58

sato.hisao

EasirocModuleをテストしています
SiTCPのライセンスを購入し、IPアドレスを変更しましたが、変更後、
制御プログラムが最初は問題無く立ち上がりますが、一旦止めた後、再度起動しようとしても立ち上がりません。このときのパケットの様子をみると、PCからのTCP「SYN」にたいし「RST」が返っています。
400秒待ってから再度起動すると、立ち上がります。

この問題はIPアドレスをディフォールトにすると起きなくなります。

こちらのシステム:
PCのOS : ScientificLinux Carbon
Module : SiTCP_XC7A_32K_BBT_V70
FPGA  : XC7A100T

解決策についてアドバイスお願いします


投稿日時 2016/10/25 17:21

masakuni

止めた時にセッションが残っていませんか?
終了時にセッションがクローズされているかを確認してください。
SiTCPは1セッションしか開けません。
セッションが正常に終了するためにPCからのFINはもちろんですが、ライブラリのCLOSE_REQとCLOSE_ACKを接続する事も必要です。
セッションが残ってしまった場合は、RBCPでリセットする事もできます。
0xFFFFFF10に0x80を書きこむとリセットされます。


投稿日時 2016/10/28 14:23

sato.hisao

アドバイスありがとうございます。
しかし、まだ問題解決していません。

1回目のプログラムの終了時のFINの交換はできています。
CLOSE_REQから2クロック後にCLOSE_ACKが出ているのを確認しました。
また、0xFFFFFF10への0x80の書き込みもやってみましたが、回復しませんでした。

セッションのクローズを確認するにはどうすればよいでしょうか?
IPアドレスをディフォールトにすると問題の現象はおきませんが、セッションクローズされていないこととの関連を説明できるでしょうか。

アドバイスよろしくお願いします。


投稿日時 2016/10/28 14:51

masakuni

FINが確認されているなら、セッションは切れているはずです。
考えられるケースは、TCPコネクションーコネクション間の待機時間が異常値なのかもしれません。
デフォルト時は、0x01F4ですが、通常時はEEPROMの値となります。
このレジスタは0xFFFFFF2c,2Dです。
この値が大きいと、切断後しばらくは接続できません。
MPCライタはEEPROMがすべてクリアされていれば、MPCファイルを書きこむ時に初期値を自動的にEEPROMに書き込みます。
しかし、EEPROMに何かが書き込まれていると、特定の領域しか更新しません。


投稿日時 2016/10/28 16:05

sato.hisao

回答ありがとうございます

0xFFFFFF2cはffでした。
このアドレスに0x2dを書き込んで、プログラムの起動をみたところ、終了から75秒後に起動しました。
ffで400秒とほぼ比例しています。
これで原因が解かりました。

アドレス0xFFFFFF2CのエリアはFPGAのPowerOn時にEEPROMから転送されるのでしょうか。
EEPROMを正しいあたいに書き換えなければ対策にはならないと思いますが、 それには具体的にどうすれば宵でしょうか。               最新のMCPライタの入手はどうすればよいでしょうか。


投稿日時 2016/10/28 16:30

masakuni

0x2dが75秒だとすると、SiTCPのTIM_PERIODパラメータの値が正しくないようです。MHzでCLKポートに入力している周波数を設定してください。
なお、EEPROMからの転送はSiTCPの起動時に行われます。
0xFFFFFF2Cの初期値のみを変更する事も出来ますが、他のパラメータも正しくない可能性があるので、一度EEPROMの内容を全て0xFFにした後にMPCライタを用いてMPCファイルを再度書き込んでみて下さい。
MPCライタは、本コミュニティーからダウンロードできるものが最新です。(MPCライタの問題ではなく、MPCファイを書き込んだ時のEEPROMに何かが書き込まれていた事が原因だと思われます)
EEPROMの消去は、以下の手順となります

  1. MPCファイルがある事を確認します。(EEPROMを消すとライセンスも消えるため)
  2. 0xFFFFFcFFに0x00を書き込みます
  3. 0xFFFFFC00から128byteを0xFFにします。
    • (16byteづつ8回くらいで書き込んでください)
  4. 電源を切って、デフォルト状態にして再投入して下さい
  5. MPCライタでMPCファイを書き直してください
  6. 電源を切ってデフォルト状態を解除して再投入してください

投稿日時 2016/11/4 16:41

sato.hisao

MPCライタをつかってEEPROM消去をしようとしましたが、2)以降の書き込みができません。
MPCライタにはMPCファイルを選択することしかできないようですが、この2)以降のEEPROMのアドレスを指定してデータを書き込むにはどのツールを使用すればよいでしょうか?


投稿日時 2016/11/5 20:44

masakuni

Community内のSiTCPユティリティは、誤操作防止のためEEPROMの領域の書き込みができないようになっていました。
以下から「SiTCP Utility(マルチプラットフォームβ版)」をダウンロードして使用してください。このバージョンでは、起動オプションで「-expert」を付けて起動すれば変更できます。

https://www.bbtech.co.jp/download-files/sitcp/


投稿日時 2016/11/7 19:25

sato.hisao

マルチプラットフォーム版SiTCP Utilityを使って、指定の手順で、EEPROMの書き換え、さらにIPアドレスを変更しました。
2度目以降の制御プログラムの起動はスムースにできました。問題は解決しました。

サポートありがとうございました。

This discussion has been closed.