M3S-T4-Tinyについて その2

毎回皆様にはお世話になっております。
なっとうです。

シェルティ様 SAK様には前回大変お世話になりました。

M3S-T4-Tinyをなんとか組み込む事ができました。
(まだwebサーバーの確認はできていませんが、ファイルシステムを組み込む所まではできているかと思います。)

前回のお話の中で、送信したい時にtcp_can_cepを送るとの事で、受信をキャンセルして送信をする事ができました。

その後確かに送る事も受信する事もできましたが、以下の問題で悩んでおります。

wiresharkで確認をしていると、どういったタイミングで起こる事象なのか把握できておりませんが、
送信->ACK受信がきているのに、
Retransmissionが発生し、それの応答としてDuplicate ACKが返ってきます。

その後何事も無く動作できれば良いのですが、
その状態から次の送信に移ることができなく困っております。

もしかしたらこのサイトの趣旨と少しかけ離れているのかもしれませんが、ご教授いただけたらと思います。

前提条件は前回と同じです。
使用マイコンはRX63N
開発環境はCubeSuite+ V2.01.00

サンプルプログラムはパッチプログラムを入れて動かしております。
ソースはtcp_nonblocking_sampleを使用しております。

以上よろしくお願いいたします。


Parents
  • なっとうさん、お疲れ様です。シェルティです。

    ①~⑤のご回答ありがとうございます。
    状況把握できました。

    ②のTCPの挙動ですが、なっとうさんのご指摘通り、ACKが受信できていないの挙動ですね。

    現象発生時PCからping 192.168.1.1 と実行し、応答ありますか?

    もし応答がなければ、TCP/IP部分の問題ではなく、
    EtherC/EDMAC所謂イーサネットコントローラ部分が止まって
    しまっていますね。

    T4 V.1.06 Release 00のデフォルト設定だとEDMACでの受信データ転送先は0x1020からになります。
    メモリウィンドウでこの領域を見て受信データが入ってきているかどうか確認いただけますか?
    t4_driver.c のlan_inthdr()にブレークを貼ってブレークすることを確認する、でも良いかと思います。
    (EDMAC転送が完了すると割り込みが発生してこの関数が実行されます)

    もし応答が有る場合はTCP/IP内の問題の可能性があり解決は少し難しいかもしれません。

    ---

    もう一つのご質問について。

    私がWebサーバを内蔵ROMだけで動作させたときは、
    アプリケーションノート「M3S-T4-Tinyを用いたWebサーバの実装(an_r20an0075jj_rx_t4.zip)」の「rx62n_webserver_mmc」を改造しました。

    これは r_file_driver.c からFATファイルシステムを呼び出しているのですが、
    FATファイルシステムのAPIを全部取り外し、内蔵ROMからデータを読み出すように file_read()関数を改造しました。

    また、ファイル自体はRXコンパイラのリンカ設定で、バイナリをリンクできる機能があるので、これを使ってHTMLファイルや画像ファイル等のウェブサーバコンテンツをプロジェクトに登録しました。
    この時シンボル名定義も出来るので、これらファイルのシンボルをr_file_driver.c 内でexternしてアクセスするようにしました。

    あとはfile_open()で受け取ったファイルパスに対応する
    ウェブサーバコンテンツのファイル(内蔵ROMに格納したデータ)に
    適当に番号(1\,2\,3...でOKです)を付けて戻り値として返し、
    file_read()で再びそのファイルの番号が指定されて呼び出されてくるので、その中で対応するファイルの先頭ポインタからデータを読み出してmemcpy()でウェブサーバにコピーして渡してあげる、という実装にしました。

    言葉だけだとうまく伝えられていないかもです。すみません。

    T4セミナーの講師の方の話によると「内蔵ROMだけで動くようにしたWebサーバはもう出来上がっていて、近いうちにアプリケーションノートにしてアップする」と仰っていました。

    これを待つのも良いと思います。

    以上です





Reply
  • なっとうさん、お疲れ様です。シェルティです。

    ①~⑤のご回答ありがとうございます。
    状況把握できました。

    ②のTCPの挙動ですが、なっとうさんのご指摘通り、ACKが受信できていないの挙動ですね。

    現象発生時PCからping 192.168.1.1 と実行し、応答ありますか?

    もし応答がなければ、TCP/IP部分の問題ではなく、
    EtherC/EDMAC所謂イーサネットコントローラ部分が止まって
    しまっていますね。

    T4 V.1.06 Release 00のデフォルト設定だとEDMACでの受信データ転送先は0x1020からになります。
    メモリウィンドウでこの領域を見て受信データが入ってきているかどうか確認いただけますか?
    t4_driver.c のlan_inthdr()にブレークを貼ってブレークすることを確認する、でも良いかと思います。
    (EDMAC転送が完了すると割り込みが発生してこの関数が実行されます)

    もし応答が有る場合はTCP/IP内の問題の可能性があり解決は少し難しいかもしれません。

    ---

    もう一つのご質問について。

    私がWebサーバを内蔵ROMだけで動作させたときは、
    アプリケーションノート「M3S-T4-Tinyを用いたWebサーバの実装(an_r20an0075jj_rx_t4.zip)」の「rx62n_webserver_mmc」を改造しました。

    これは r_file_driver.c からFATファイルシステムを呼び出しているのですが、
    FATファイルシステムのAPIを全部取り外し、内蔵ROMからデータを読み出すように file_read()関数を改造しました。

    また、ファイル自体はRXコンパイラのリンカ設定で、バイナリをリンクできる機能があるので、これを使ってHTMLファイルや画像ファイル等のウェブサーバコンテンツをプロジェクトに登録しました。
    この時シンボル名定義も出来るので、これらファイルのシンボルをr_file_driver.c 内でexternしてアクセスするようにしました。

    あとはfile_open()で受け取ったファイルパスに対応する
    ウェブサーバコンテンツのファイル(内蔵ROMに格納したデータ)に
    適当に番号(1\,2\,3...でOKです)を付けて戻り値として返し、
    file_read()で再びそのファイルの番号が指定されて呼び出されてくるので、その中で対応するファイルの先頭ポインタからデータを読み出してmemcpy()でウェブサーバにコピーして渡してあげる、という実装にしました。

    言葉だけだとうまく伝えられていないかもです。すみません。

    T4セミナーの講師の方の話によると「内蔵ROMだけで動くようにしたWebサーバはもう出来上がっていて、近いうちにアプリケーションノートにしてアップする」と仰っていました。

    これを待つのも良いと思います。

    以上です





Children
No Data