uIP TCP/IPについて

先ごろ(だいぶ前ですが)ルネサスサイトから uIP TCP/IP Protocol Stack Demostration Document number:R01AN0169EU0100 Ver 1.01 NOTEs: * The demostration directory structure is explained in the application note. * This application note supports RX62N and the demostration project runs on RSK+RX62N. UIPのサンプルを入手しましてSH7670へ移植しました、その結果とても良好な結果を得ましたので報告します 自前のソースでTCP/IPを実装して稼動させていましたがよく応答ができなくなったりしていました いろいろな遷移状態でわけがわからないような(たぶんプロトコルが十分でない)遷移もありました UIPにすると必ず応答して、応答不良などまだ経験がありません、 ただこのUIP長い(大きい)データ転送には弱いんです、”どうしてこんなに時間がかかるの”というぐらい なにか説明ではACKが200mセコンドウェイト方式を採用しているからだとか これの速度はもっと速くはならないものでしょうか? IWIPなど聞きますが、UIPと比べてどうなのでしょうか、IWIPのほうがいいのでしょうか?
  • シェルティさん 画像を添付する方法がわかりました、一度投稿してから編集モードにするとOPTIONタブがでるのでそれを使用して画像を添付できることがわかりました ftpのサンプルのほうですがメモリを参照しているのでそれを全てファイル扱いにしてうまくいくようになりました、_tcp_2msl 変数がTIME-WAIT 1分間でなぜか1分間の間通信が途絶えますが これを50mSぐらいにすると早く通信できます、ファイルのアップロード、ダウンロードができるようになったらまたどのぐらいの速度が出たのか、また報告したいと思います。
  • シェルティさん

    ftpで転送ができるようになりました、FFFTPでの表示では400KByte秒は行くようです、

    これからt4ライブラリを主に使用したいと思います、

    uIPに比べて格段に速度が速いです、いろいろ教えていただきありがとうございました。

    H8/300のライブラリは作成いただけないものでしょうか? CPUを変更してコンパイルするだけと、思いますが、前のリソースも結構ありますので。 よろしくお願いします。
  • IKUZOさん

    こんにちは、シェルティです。

    もうFTPの移植が完了したのですね、素晴らしいです。すごいですね。

    通信速度も400KByte/secと十分実用に適用出来る速度ですね。

    注意としてはT4は送信アルゴリズムが弱いため、ACKが返ってくるのが

    遅い環境だと送信も合わせて遅くなる点です。

    これは近いうちに直すと開発者から聞きましたが現在の最新版(V.2.00)では遅いままですね。

    以下ご質問いただいた内容について回答です。

    ■ご質問①の回答:画像添付の方法

    画像添付については「USE RICH FORMATTING」というリンクを押して

    画像添付のアイコンをクリックしたら出来ました。

    ■ご質問②の回答:TIME_WAIT状態

    以前別のスレッドで別の方から似たご質問が有りまして

    そこで実施した回答が参考になると思います。

    http://japan.renesasrulz.com/cafe_rene/f/69/p/2059/8911.aspx#8911

    ■ご質問③の回答:H8/300のライブラリ

    作ってみます。 T4の最新版はソースコードが付いてて、RXマイコン用のライブラリビルド環境(HEW)も

    付いているので、H8/300用に新規でビルド環境を起こして

    Toolchainの設定を見ながら真似して設定してあげれば出来ると思います。

    が、データの受け渡し方法が良い方法が無い気がしますね。

    もしデータの受け渡し方法が見つからなければ、RXマイコン用のライブラリビルド環境を

    H8/300用に改造する方法を説明したいと思います。

    以上です

  • シェルティ さん

    いつもお世話になっております、以前の投稿記事を拝見しました、_tcp_2mslはできるならそのままで、通信端点をRAMが許す限り多くすれば最大の転送速度になるということで納得しました

    「T4の最新版はソースコードが付いてて」これはまたすばらしい

    時間ができしだい、これもやりたいと思います、

    新規開発ではRXになると思うのですが、H8が残留している基板もありまして

    今回はt4で解決できたので、シェルティ さんに感謝しています。

    ありがとうございました。 

  • IKUZOさん

    こんにちは、シェルティです。

    H8/300でT4ライブラリが作れるか、試してみました。結果OKでした。

    以下手順です。

    ①T4ライブラリの最新版パッケージをダウンロード

    RXファミリ 組み込み用TCP/IP M3S-T4-Tiny: 導入ガイド
    Firmware Integration Technology

    R20AN0051JJ0200

     

    ②T4ライブラリの最新版パッケージの中身のFITモジュールを解凍

    \an_r20an0051jj0200_rx_t4_connectivity\FITModules\r_t4_rx_v2.00.zip

     

    ③FITモジュールの中のビルド環境を解凍

    \r_t4_rx_v2.00\r_t4_rx\make_lib\make_lib.zip

     

    ④\make_lib\T4_Library\hew\T4_Library.hws でHEWを起動する

    ⑤画面左プロジェクトツリーの「T4_Library」で右クリックして、「プロジェクトの挿入」⇒「新規プロジェクト」を選択しOKボタン

    ⑥プロジェクトタイプを「Library」選択しプロジェクト名「T4_Library_h8300h_advance」とし、CPU種別に「H8S, H8/300」を選択

     ツールチェインに「Hitachi H8S, H8/300 Standard」を選択し、OKボタン

    ⑦CPUシリーズに「H8/300H」を選択し「次へ」ボタン ※IKUZOさんのお持ちの環境に合わせてください

    ⑧動作モードに「Advanced」を選択し「完了」ボタン ※IKUZOさんのお持ちの環境に合わせてください

    ⑨以下ソースコードをプロジェクトツリーの「T4_Library_h8300h_advance」にドラッグアンドドロップ

      \make_lib\T4_src

       ether.c, ip.c, T4_Version.c, tcp.c, tcp_api.c, udp.c

    ⑩ビルド→H8S, H8/300 Standard Toolchainのコンパイラタブのオプション項目「インクルードファイルディレクトリ」でインクルードパスを以下追加

      相対パス: Project directory

      サブディレクトリ: ..\..\..\T4_src

    ⑪ビルド→H8S, H8/300 Standard Toolchainのコンパイラタブのオプション項目「マクロ定義」でマクロを以下追加

     _TCP, _UDP, _TCP_DACK, _ETHER, _MULTI, _TEST_LIBRARY, _ICMP, far, _far

    ⑫T4_Version.c にH8/300H用のプリデファインマクロの切り分けが無いので以下を151行目に追加

    #elif defined (__H8__) && defined(__300HA__)
    #define __TARGET_CPU__ "H8/300H Advanced mode"
    #define __COMPILER_VER__ __RENESAS_VERSION__

    ⑬チェックサム演算コードがRXマイコン用にアセンブラ化されていますが、H8/300用のコードは無いので、C言語で書いたコードを登録

     ※次投稿でコードを貼りつけます

     

    これでビルドが通りました。お試しください。

    r_t4_itcpip.h の冒頭にT4の対応マイコン表が書いてありますね。

    ここに書いてある対応マイコンであれば上記と同等の手順でライブラリ生成環境が作れそうです。

    以上です

     

     


  • #include <type.h>

    uint16 _cksum(uchar *data, uint16 nbytes, uint16 sum0)
    {
        uint32 sum;
        uint16 *p_word, word, nwords;

        if (nbytes == 0)
        {
            sum = sum0;
        }
        else
        {
            if (((uint32)data) & 0x1)
            {
                sum0 = ((sum0 >> 8) & 0x00ff) | (sum0 << 8);

                p_word = (uint16 *)(data + 1); /* half word alignment */
                nwords = (nbytes - 1) >> 1;

                for (sum = sum0; nwords > 0; nwords--)
                    sum += *p_word++;

                /* if nbytes odd, add one byte of zero */
                if (nbytes & 0x1)
                {
                    word = 0;
                }
                else
                {
                    /* add last byte */
                    word = net2hs(*p_word);
                    word = word & 0xff00; /* clear lower 8bits */
                }
                /* add first byte */
                p_word = (uint16 *)(data - 1);
                word  |= (net2hs(*p_word) & 0x00ff); /* clear upper 8 bits */
                sum   += hs2net(word);

                sum = (sum >> 16) + (sum & 0xffff); /* add in carry   */
                sum = (sum >> 16) + (sum & 0xffff); /* maybe one more */
                sum = ((sum >> 8) & 0x00ff) | (sum << 8);
            }
            else
            {
                p_word = (uint16 *)data;
                nwords = nbytes >> 1;

                for (sum = sum0; nwords > 0; nwords--)
                    sum += *p_word++;

                /* if nbytes odd, fill zero */
                if (nbytes & 0x1)
                {
                    word = net2hs(*p_word);
                    word = (word >> 8) << 8; /* clear lower 8bits */
                    sum += hs2net(word);
                }
                sum = (sum >> 16) + (sum & 0xffff); /* add in carry   */
                sum = (sum >> 16) + (sum & 0xffff); /* maybe one more */
            }
        }

        sum = ~net2hs(sum);

        return ((uint16)sum);
    }

     

     


     

  • シェルティ さんお世話になっております 早速ダウンロードしてビルドして見ました、エラーなくビルドできました H8ネットワーク関連でもおかげでT4全てとなりそうです LANインターフェースICはリアルテック製ですが、ドライバ層と完全に分離しているので導入は短期間で完了しそうです、できましたら早めに、結果等、 報告できたらと思っています いつもご親切な回答をありがとうございます よろしくお願いいたします。
  • いつもお世話になっています。

    M3S-T4-Tiny でtelnetのサンプルなどはご存じないでしょうか?

  • IKUZOさん

    こんにちは、シェルティです。

    telnetサンプルはないと思います。

    telnetサーバ側でしょうか? クライアント側でしょうか?
    いずれもT4ライブラリのAPI(サーバ⇒tcp_acp_cep()、クライアント⇒tcp_con_cep())を
    使えばユーザアプリで実装できると思います。

    サンプルで付属しているエコーサーバの待ち受けポートを23番に変更して、
    tcp_rcv_dat()で受信したデータをtcp_snd_dat()でオウム返ししているところを、
    受信データ解析して受信データに応じて処理してレスポンスをtcp_snd_dat()で送ることで
    telnetサーバ的な動作を実現することはできると思います。

    以上です

  • シェルティさん

    いつもありがとうございます、

    「tcp_snd_dat()でオウム返ししているところを、受信データ解析して受信データに応じて処理」ということでやってみます。

    R20AN0314JJ0100サンプルでhttpもやりたいのですがhttpとDNSが関係しているのですがhttpのみ取り出して

    もうしわけありませんマニュアルを読む前ですが、

    R_httpd();とhttp_callbackだけを手当てしてやればよいのでしょうか?DNSも含めないといけないのでしょうか?

    FTPの場合はR_ftp_srv_open();があったのですが、httpは無いようなので。

    FTPは調子が良いです。