Top Banner
2016 Microchip Technology Inc. DS00001921C_JP - p. 1 AN1921 はじめに 本書では、 Microchip 社のTCP/IP (Transmission Control Protocol/Internet Protocol) Lite スタック ライブラリの 構造とインターフェイスについて説明します。 TCP/IP Lite は、フラッシュおよび RAM 容量の小さなマイク ロコントローラに最適な TCP/IP スタックを提供する 事を目的とします。このスタックを使う事で、8KB (UDP のみの場合 ) または 16KB 以上 (TCP/IP を実 装する場合) のフラッシュ容量でフル機能のTCP/IP v4 スタックを実装できます。本スタックを使って Ethernet 有線通信機能を追加する事で、他のシステム のアプリケーションとの相互動作が可能となります。 Microchip TCP/IP Lite スタックは設定可能なモジュー ル形式で実装するため、必要な機能だけをアプリケー ションに追加する事ができます。このスタックは MPLAB ® XC8 コンパイラ向けに書かれています。 略語の意味 TCP (Transmission Control Protocol): 伝送制御プロトコル ICMP (Internet Control Message Protocol): インターネット制御メッセージ プロトコル DHCP (Dynamic Host Configuration Protocol): 動的ホスト構成プロトコル MAC アドレス (Media Access Control Address): メディア アクセス制御アドレス RAM (Random Access Memory): ランダムアクセス メモリ IP (Internet Protocol): インターネット プロトコル ARP (Address Resolution Protocol): アドレス解決プロトコル UDP (User Datagram Protocol): ユーザ データグラム プロトコル ACK (Acknowledgment Packet): 肯定応答パケット MSS (Maximum Segment Size): 最大セグメントサイズ RX: 受信 TX: 送信 TCP/IPス タックのアーキテクチャ TCP/IP Lite ライブラリの実装は、1 に示す TCP/IP 通信モデルに基づきます。 1: TCP/IP 通信モデル TCP/IP スタックは複数のレイヤに分割されます ( 1 参照 )Microchip TCP/IP Lite スタック内の各レイヤ は、そのレイヤのすぐ上またはすぐ下に位置する 1 または複数のレイヤにアクセスできます。 TCP/IP スタックは、非同期イベント ( タイムアウトの管 理、Ethernet コントローラのステータス確認、受信バッ ファの解析等 ) を処理するために、ユーザ アプリケー ションによって周期的に呼び出されるバックグラウン タスクを必要とします。 各プロトコルを実装するためのコードは別々のソー スファイルに書かれていますが、サービスと API (Application Programming Interface) はヘッダ ( インク ルード ) ファイルにより定義されます。 スタックの設定 本スタックは tcpip_config.h ファイル内の C コン パイラ定義を使うため、ユーザは容易に設定できます。 tcpip_config.h ファイルには各種の設定パラメー タが含まれており、ボードをネットワークに接続する には、次に挙げるスタック パラメータを変更する必要 があります。 Authors: Janaki Kuruganti, Marius Cristea Microchip Technology Inc. User Application DHCP Background Tasks UDP TCP ICMP ARP Ethernet Driver System Timer PIC18 Hardware IP Microchip 社の TCP/IP Lite スタック 注意 : この日本語版文書は参考資料としてご利用ください。最新情報 は必ずオリジナルの英語版をご参照願います。
22

AN1921 - Microchip Technologyww1.microchip.com/downloads/jp/AppNotes/00001921C_JP.pdf2016 Microchip Technology Inc. DS00001921C_JP - p. 1 AN1921 はじめに 本書では、Microchip社のTCP/IP

May 28, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: AN1921 - Microchip Technologyww1.microchip.com/downloads/jp/AppNotes/00001921C_JP.pdf2016 Microchip Technology Inc. DS00001921C_JP - p. 1 AN1921 はじめに 本書では、Microchip社のTCP/IP

AN1921Microchip 社の TCP/IP Lite スタック

注意 : この日本語版文書は参考資料としてご利用ください。最新情報は必ずオリジナルの英語版をご参照願います。

はじめに

本書では、Microchip社のTCP/IP (Transmission ControlProtocol/Internet Protocol) Lite スタック ライブラリの構造とインターフェイスについて説明します。TCP/IPLite は、フラッシュおよび RAM 容量の小さなマイクロコントローラに最適な TCP/IP スタックを提供する事を目的とします。このスタックを使う事で、8KB 以上 (UDP のみの場合 ) または 16KB 以上 (TCP/IP を実装する場合)のフラッシュ容量でフル機能のTCP/IP v4スタックを実装できます。本スタックを使ってEthernet 有線通信機能を追加する事で、他のシステムのアプリケーションとの相互動作が可能となります。 Microchip TCP/IP Lite スタックは設定可能なモジュール形式で実装するため、必要な機能だけをアプリケーションに追加する事ができます。このスタックはMPLAB® XC8 コンパイラ向けに書かれています。

略語の意味

• TCP (Transmission Control Protocol): 伝送制御プロトコル

• ICMP (Internet Control Message Protocol): インターネット制御メッセージ プロトコル

• DHCP (Dynamic Host Configuration Protocol): 動的ホスト構成プロトコル

• MAC アドレス (Media Access Control Address): メディア アクセス制御アドレス

• RAM (Random Access Memory): ランダムアクセス メモリ

• IP (Internet Protocol): インターネット プロトコル

• ARP (Address Resolution Protocol): アドレス解決プロトコル

• UDP (User Datagram Protocol): ユーザ データグラム プロトコル

• ACK (Acknowledgment Packet): 肯定応答パケット

• MSS (Maximum Segment Size): 最大セグメントサイズ

• RX: 受信

• TX: 送信

TCP/IPス タックのアーキテクチャ

TCP/IP Lite ライブラリの実装は、図 1 に示す TCP/IP通信モデルに基づきます。

図 1: TCP/IP 通信モデル

TCP/IP スタックは複数のレイヤに分割されます ( 図 1参照 )。Microchip TCP/IP Lite スタック内の各レイヤは、そのレイヤのすぐ上またはすぐ下に位置する 1 つまたは複数のレイヤにアクセスできます。

TCP/IP スタックは、非同期イベント ( タイムアウトの管理、Ethernet コントローラのステータス確認、受信バッファの解析等 ) を処理するために、ユーザ アプリケーションによって周期的に呼び出されるバックグラウンド タスクを必要とします。 各プロトコルを実装するためのコードは別々のソースファイルに書かれていますが、サービスと API(Application Programming Interface) はヘッダ ( インクルード ) ファイルにより定義されます。

スタックの設定

本スタックは tcpip_config.hファイル内の C コンパイラ定義を使うため、ユーザは容易に設定できます。tcpip_config.h ファイルには各種の設定パラメータが含まれており、ボードをネットワークに接続するには、次に挙げるスタック パラメータを変更する必要があります。

Authors: Janaki Kuruganti,Marius CristeaMicrochip Technology Inc.

User Application

DHCP Background Tasks

UDP TCP ICMP

ARP

Ethernet Driver SystemTimer

PIC18 Hardware

IP

2016 Microchip Technology Inc. DS00001921C_JP - p. 1

Page 2: AN1921 - Microchip Technologyww1.microchip.com/downloads/jp/AppNotes/00001921C_JP.pdf2016 Microchip Technology Inc. DS00001921C_JP - p. 1 AN1921 はじめに 本書では、Microchip社のTCP/IP

AN1921

1. MAC_ADDRESS: ボードのハードウェア MAC アドレスです。このアドレスは各Ethernetポートでグローバルに一意である事が必要です。PICDEM2.net™ ボードの裏面に、Microchip社が提供する 2つの一意MACアドレスが表記されています。既定値は {0x00、0xDE、0xAD、0x00、0xBE、0XFF} です。

2. dhcpName: 人間が読める形式のボード名です。DHCP サーバは、この名前を MAC アドレスに割り当てます。既定値はPIC18F97J60 ETHERNETです。

3. DHCP_NAME_SIZEdhcpName 文字列の長さです。dhcpName を変更する場合、このサイズも更新する必要があります。既定値は 20 です。

4. ENABLE_TCP_DEBUGTCP から syslog モジュールへ送信するデバッグ メッセージを有効にします。

5. ENABLE_IP_DEBUGUDP から syslog モジュールへ送信するデバッグ メッセージを有効にします。

TCP/IPスタックのバッファ管理

概要

既定値では、TCP/IP スタックは最小限のメモリしか使わず、ユーザはアプリケーションに最大限のメモリを割り当てる事ができます。後で説明するように、各TCP/IP プロトコル / 接続に必要な全てのバッファは、ユーザの責任で提供する必要があります。

TCP/IPスタックは、以下のようにEthernetコントローラ RAM を使います。

• Ethernet受信パケットはEthernetコントローラRAM内で保持されます。Ethernet コントローラは、受信した複数のEthernetパケットをRAMに格納し、TCP/IPスタックがそれらのパケットを処理できるようになるまで保持します。Ethernet コントローラは各受信パケットのバッファを自動的に管理し、ユーザにバッファ ディスクリプタを提供します。利用可能なメモリを使い果たすと、Ethernet コントローラは受信パケットを破棄し始めます。

• 送信されるEthernetパケットは、Etenretコントローラのメモリ上で構成され、保持されます。本 TCP/IPスタックは、一度に 1 つの送信 (TX) パケットしかサポートしません。

UDP プロトコルが使うバッファ

UDP パケットを生成する場合、ユーザは Ethernet コントローラの RAM を直接使ってユーザ ペイロードを保存できます。ユーザは API を呼び出す事で UDP パケットの開始、ペイロードの転送、パケットの有線送信を実行します。

UDP プロトコルを介してデータを受信する場合、Ethernet コントローラが受信パケットのバッファを管理します。パケットの受信が完了すると、そのポートへユーザコールバックを登録します。スタックは登録された関数 ( コールバック ) を呼び出し、ユーザにEthernet コントローラからペイロードに直接アクセスする機会を提供します。これはペイロードが複数回コピーされる事を防ぎます。

TCP プロトコルが使うバッファ

TCP プロトコルの場合、ユーザは各 TCP 接続に対して何らかのメモリを割り当てる必要があります。TCPプロトコルには以下のバッファが必要です。

• ソケットエリア : TCP 接続に関する内部情報を保持します。

• メモリエリア : ユーザが API を使って各ソケット向けに生成してスタックに渡します。

• 各 TCP 接続の受信 (RX) および送信 (TX) バッファは、ユーザがスタック API を使って生成してスタックへ渡します。各ソケットは、受信および送信バッファを一度に 1 つずつしか持てません。リモートホストからのデータを受信するために、スタックは1 つの RX バッファを常時必要とします。受信バッファが短時間使用できない場合、スタックはパケットの再送信を要求します。

TCP/IPス タックの制限

8 ビット マイクロコントローラでは利用可能な RAMとフラッシュメモリの容量が限られているため、TCP/IP スタックの動作は制限されます。

ARP (Address Resolution Protocol)ARP テーブル内のエントリ数は 8 以下に制限されます。テーブル内のエントリの最大数はユーザ設定可能です (tcpip_config.hファイルの説明を参照 )。ARPテーブルには、少なくともデバイス接続の最大数と同数のエントリが必要です。エントリがこれより少ない場合、ARP テーブル内に存在しない IP アドレスに対する ARP 要求が発生すると性能が低下します。

DS00001921C_JP - p. 2 2016 Microchip Technology Inc.

Page 3: AN1921 - Microchip Technologyww1.microchip.com/downloads/jp/AppNotes/00001921C_JP.pdf2016 Microchip Technology Inc. DS00001921C_JP - p. 1 AN1921 はじめに 本書では、Microchip社のTCP/IP

AN1921

IPv4本スタックは ICMPv4、UDPv4、TCPv4 パケットのみをサポートし、その他のパケットは全て破棄します。

また、本スタックは IP フラグメンテーションをサポートせず、分割された IP パケットは破棄します。IP パケットサイズが最大転送単位 (通常は 1500バイト )よりも大きい場合、フラグメンテーションが必要になります。そのようなパケットは、複数のパケットに分割する事で、フラグメンテーションを回避する必要があります。

本 TCP/IP スタックは IP ヘッダオプションを解釈しません。 本 TCP/IP スタックは、ループバック アドレス127.0.0.1 をサポートしません。このアドレスは一般的な IPv4 アドレスとして扱われ、スタックはこの IP アドレスに関連付けられたMACアドレスを探索します。

現在、本スタックはマルチキャストをサポートしていないため、マルチキャスト アドレスを持つパケットを送受信する事はできません。

ICMP (Internet Control Message Protocol)I C M P はオプション プロトコルであり、ICMPECHO_REPLYのみ実装されます。本スタックは ICMPECHO_REQUEST にのみ応答し、他の ICMP メッセージを全て無視します。

UDP (User Datagram Protocol)UDP パケットを送信する場合、各メモリを節約するために、スタックは Ethernet コントローラの送信バッファで直接パケットを構成します。送信バッファは1 つしか存在しないため、UDP パケットの生成が始まると、そのパケットが送信されるまで後続の送信はできません。このため、UDP パケットの開始から送信までの時間は最小限に抑える必要があります。

DHCP (Dynamic Host ConfigurationProtocol) クライアント

DHCP DISCOVER および DHCP REQUEST 型のメッセージだけがサポートされます。クライアントは IP アドレスを問い合わせて取得できます。DHCP サーバから IP アドレス以外の情報を要求する DHCP INFORM型メッセージはサポートされません。DHCP 情報をリリースしてクライアントの IP アドレスを無効にするDHCP RELEASE 型メッセージもサポートされません。

TCP (Transmission Control Protocol)スタックは、異常パケットを受信するとこれを破棄し、要求通りのパケットを再送信するよう要求します。

緊急ポインタは無視され、データは緊急ポインタなしで受信した場合と同様の方法でアプリケーションに渡されます。

Push フラグは無視され、ソケットの受信バッファにデータが格納されるたびに、ユーザがアプリケーションにデータを渡す必要があります。

プロトコルを簡素化するため、メッセージ再送信のタイムアウトと間隔は固定した時間として定義されます。この時間はユーザによる定義が可能です。

遅延 ACK 機能は実装していません。未処理の送信データが存在する場合、各 ACK パケットはペイロードと一緒に送信されます。そうでない場合、ペイロードなしで直ちに送信されます。

TCP ヘッダ オプションは、MSS ( 最大セグメントサイズ ) オプションだけがサポートされます。本スタックは、その他のオプションをユーザに通知する事なく全て無視します。

TCP/IPス タックデモの実行

デモの実行に必要なハードウェアとソフトウェア

1. PICDEM.net® 2 ボード

2. PICDEM.net 2 電源

3. Microchip 社製 TCP/IP Lite スタックとデモコード

4. MPLAB X (v2.35 以上 )5. XC8 C コンパイラ (v1.33 以上 )6. Microchip 社製デバッガ / プログラマ (PICkit™ 3、

ICD 3、REAL ICE™ 等 )7. Windows®、Linux®、Mac OS® のいずれかで動作

する PC8. TCP/IP デモ アプリケーション

9. DHCP サーバ ( これが無い場合、本ボードは IP アドレスをリリースする事ができず、デモは動作しません )

10. Ethernet ケーブル : - ストレート ケーブル - ボードをルータ / スイッチ

に接続する場合に使います。

- クロスケーブル - ボードをコンピュータに直接接続する場合に使います。

ハードウェアの準備

1. PICDEM.net 2 ボードのコネクタ J1 に Ethernetケーブルを接続します ( ケーブルの他端はコンピュータのEthernetポートに直接接続できます )。本ボードを動作中のDHCPサーバへ接続できる事が必要です。

2. 電源をPICDEM.net 2ボードの J7コネクタに接続します。

3. M i c r o c h i p 社製デバッガ / プログラマをPICDEM.net 2ボードのJ4コネクタに接続します。

4. デモプロジェクトの 1 つを MPLAB X に読み込みます。

5. この後の手順は、以下に記載するデモ別の準備手順を参照してください。

2016 Microchip Technology Inc. DS00001921C_JP - p. 3

Page 4: AN1921 - Microchip Technologyww1.microchip.com/downloads/jp/AppNotes/00001921C_JP.pdf2016 Microchip Technology Inc. DS00001921C_JP - p. 1 AN1921 はじめに 本書では、Microchip社のTCP/IP

AN1921

TCPサ ーバデモ

概要

このデモは、ポート 7 をリッスンする TCP エコーサーバを実装しています。このサーバは PICDEM ボード上で起動し、接続を待機します。クライアントとの接続が確立すると、サーバは全ての受信データをエコーバックします。このデモでは、アクティブな接続が1 つだけ生成されます。しかし、本 TCP/IP スタックは同じボード上で複数の TCP 接続をサポートします。接続を追加する場合、各接続に対してユーザが新しいサーバを作成する(バッファを構成し、初期化後にリッスンを開始する ) 必要があります。本ファームウェアは PICDEM.net 2 ボード上で動作するよう設計されています。

TCP サーバデモ向けソフトウェアの設定

1. MPLAB X を起動し、TCP サーバデモ プロジェクトを読み込みます。

2. XC8 コンパイラを使って最新の TCP サーバ デモコードをコンパイルします。

3. PICDEM.net 2 ボードをプログラミングします。

4. デモ用に使う Ethernet ネットワーク内で DHCPサーバが動作している場合、PICDEM.net 2 ボードには独自の IP アドレスが必要です。この IP アドレスはボードの LCD に表示されます。クライアントは、このアドレスを使って PICDEM ボード上で動作するサーバに接続します。

5. TCP/IP デモの Java アプリケーションをコンピュータ上で起動します ( 図 2 参照 )。

6. [TCP Client Demo] タブを開きます。

7. 「Server IP Address」フィールドを PICDEM ボードの LCD に表示された IP アドレスに設定し、

「Port」フィールドを 7 に設定します。

8. [Connect] ボタンをクリックします。 9. コンピュータが PICDEM ボードに接続されると、

[Sent/Received Data] ウィンドウにメッセージが表示されます ( 例 : Connected to 192.168.0.21Port: 7)。

10.「Send」フィールドに文字列をタイプ入力し、[Send] ボタンをクリックして送信します。[Sent/Received Data] ウィンドウには、送信データと受信データの両方が色分けして表示されます。

11. [Disconnect] ボタンをクリックすると TCP 接続は切断され、メッセージ「Connection Closed」が表示されます。

12. 上記の手順 6 ~ 10 を繰り返す事で、長さの異なる文字列を使って接続をテストできます。

13. ボードへの TCP トラフィックを生成するには、[ECHO Back Received Message] を有効にします。「Send」フィールドに、ボードへ送信するメッセージを入力します。[Send] ボタンをクリックすると、データの交換が始まります。TCPトラフィックを停止するには、[ECHO Back ReceivedMessage] ボタンを再度クリックします。この場合、[Sent/Received Data] ウィンドウは受信メッセージのみ表示します。

図 2: Java アプリケーションにおける Microchip TCP クライアントデモ

TCP サーバデモ ファームウェアバッファの生成

ユーザはソケットと受信および送信バッファを生成する必要があります。

例 1: 受信バッファ// create the socket for the TCP ServertcpTCB_t port7TCB;

// create the TX and RX buffersuint8_t rxdataPort7[20];uint8_t txdataPort7[20];

DS00001921C_JP - p. 4 2016 Microchip Technology Inc.

Page 5: AN1921 - Microchip Technologyww1.microchip.com/downloads/jp/AppNotes/00001921C_JP.pdf2016 Microchip Technology Inc. DS00001921C_JP - p. 1 AN1921 はじめに 本書では、Microchip社のTCP/IP

AN1921

TCP サーバの実装

TCP サーバを実装するための手順は以下の通りです。

1. TCP スタックを初期化します。この関数は、どのTCP 関数よりも先に呼び出す必要があります。

TCP_Init();2. 接続を生成するため、ソケットを追加して初期化

します。ソケットは TCP 接続に必要な全ての情報を保持します。

TCP_SocketInit(&port7TCB);3. ローカルポートをサーバに割り当てます。この関

数は、リッスンするポートをソケットに割り当てます。サーバは、全ての接続に対してこのポートをリッスンします。ユーザがリッスンポートを指定しなかった場合、既定値のポート番号が割り当てられます。

TCP_Bind(&port7TCB, 7);4. 受信バッファをソケットに追加します。この関数

は、受信データを格納するためのバッファをソケットに追加します。

TCP_InsertRxBuffer(&port7TCB,rxdataPort7, sizeof(rxdataPort7));

5. TCP サーバを起動します。この関数は、TCP スタックがポートをリッスンして接続要求を待機するよう設定します。TCP ハンドシェイクが正常に完了すると、ユーザは TCP 接続を介してリモートとの間でデータを交換できます。一度に 1 つの接続要求だけが受け入れられます。本 TCP スタックは、1 つのポート番号で複数の接続を処理可能です。しかし、追加する各接続に対してユーザは新しいソケットと受信バッファを生成し、同じポートでサーバの新しいインスタンスを起動する必要があります。

TCP_Listen(&port7TCB);6. ソケットのステータスを確認します。この関数は、

パラメータとして提供されたポインタがソケットとして TCP/IP スタックへ登録済みであるかどうか確認します。ポインタが有効なソケットである場合、関数はそのソケットの状態を返します。ソケットの各種状態は tcpv4.h ファイル内で定義されます。

socket_state = TCP_SocketPoll(&port7TCB);7. ソケット内に受信データが存在するかどうか確認

します。この関数は、受信バッファ内の受信データのバイト数を返します。

rxLen = TCP_GetRxLength(&port7TCB);8. 受信バッファ内の受信データのバイト数を取得

し、ユーザがバッファを使えるようにします。この関数は、バッファ内のデータバイト数を返します。この関数の呼び出し後、ユーザはバッファに安全にアクセスできます。この関数を呼び出すと、スタックは後続の受信データを受信バッファに書き込まなくなります。パケットの再送信を防ぐため、ユーザはできるだけ速やかに別の受信バッ

ファをスタックに提供する必要があります。

rxLen = TCP_GetReceivedData(&port7TCB);

9. バッファの内容をリモートマシンへ送信します。この API により、ユーザはアクティブな TCP 接続を介してデータを送信できます。ローカルおよびリモートホスト間で接続が確立していない場合、データは送信できません。

TCP_Send(&port7TCB, txdataPort7, txLen);

10. 送信バッファが正しく送信されたかどうか ( リモートホストが全ての受信バイトに対して ACKを返したかどうか ) 確認します。ソケットは一度に 1 つのバッファしか扱えないため、送信を試みる前に必ずこの関数を呼び出す必要があります。

TCP_SendDone(&port7TCB)11. TCP 接続を終了します。この関数はソケット接続

を直ちに終了するのではなく、TCP 接続ハンドシェイク後に終了します。ユーザは、ソケットが実際に終了状態になるまで、ソケットのステートを繰り返し確認する必要があります。ソケットが終了状態になると、受信バッファと送信バッファは安全に再使用できます。

TCP_Close(&port7TCB)12. ソケットを削除します。終了したソケットを内部

のソケットリストから削除する場合、以下の APIによりポインタを削除します。

TCP_SocketRemove(&port7TCB)13. バックブランド タスクです。TCP スタックのタ

イムアウトを処理するため、アプリケーションはこの関数を繰り返し呼び出す必要があります。TCP スタック タイムアウトを処理するため、TCPバックグラウンド タスクは1秒周期で呼び出されます。

TCP_Update();

2016 Microchip Technology Inc. DS00001921C_JP - p. 5

Page 6: AN1921 - Microchip Technologyww1.microchip.com/downloads/jp/AppNotes/00001921C_JP.pdf2016 Microchip Technology Inc. DS00001921C_JP - p. 1 AN1921 はじめに 本書では、Microchip社のTCP/IP

AN1921

TCP サーバを実装するためのソースコード

TCP サーバデモコード ( ソースコードとビルド済みhex ファイル ) は、Microchip 社のウェブサイトからダウンロードできます。

ソフトウェア ライセンス使用許諾

Microchip Technology Incorporated ( 以下「弊社」) が提供するソフトウェアは、弊社製品との組み合わせでのみ使われる事を目的として弊社のお客様に供給されます。

ソフトウェアの所有権は弊社および / またはソフトウェアのサプライヤに帰属し、適用著作権法のもとに保護されています。無断複写、複製、転載は禁じられています。上記の制約に違反してソフトウェアを使った場合、使用者はライセンス使用許諾の侵害に対して民事責任を問われ、適用法のもとに罰せられます。

本ソフトウェアは「無条件受け取り」を条件として提供されます。本ソフトウェアの商品性および特定目的に対する適合性の黙示

保証を含む ( ただし必ずしもこれらに限定されない ) 明示、暗示、法的な保証は一切致しません。弊社は、いかなる場合も、特殊、

偶発的、必然的にかかわらず、いかなる理由があろうとも、一切の賠償責任を負いません。

DS00001921C_JP - p. 6 2016 Microchip Technology Inc.

Page 7: AN1921 - Microchip Technologyww1.microchip.com/downloads/jp/AppNotes/00001921C_JP.pdf2016 Microchip Technology Inc. DS00001921C_JP - p. 1 AN1921 はじめに 本書では、Microchip社のTCP/IP

AN1921

例 2: TCP エコーサーバの実装void DEMO_TCP_echo_server(void){

// create the socket for the TCP Server static tcpTCB_t port7TCB;

// create the TX and RX buffers static uint8_t rxdataPort7[20]; static uint8_t txdataPort7[20];

uint16_t rxLen, txLen, i; socket_state_t socket_state; rxLen = 0;

// checking the status of the socket socket_state = TCP_SocketPoll(&port7TCB);

switch(socket_state) { case NOT_A_SOCKET: //Inserting and initializing the socket TCP_SocketInit(&port7TCB); case SOCKET_CLOSED: //configure the local port TCP_Bind(&port7TCB, 7); // add receive buffer TCP_InsertRxBuffer(&port7TCB, rxdataPort7, sizeof(rxdataPort7)); // start the server TCP_Listen(&port7TCB); break; case SOCKET_CONNECTED: // check if the buffer was sent, if yes we can reuse the buffer if(TCP_SendDone(&port7TCB)) { // check to see if there are any received data rxLen = TCP_GetRxLength(&port7TCB); if(rxLen > 0) {

//make sure it safe to use the receive buffer; rxLen = TCP_GetReceivedData(&port7TCB); //simulate some buffer processing copy from the RX buffer to the TX buffer for(i = 0; i < rxLen; i++) { txdataPort7[i] = rxdataPort7[i]; } // reuse the rx buffer TCP_InsertRxBuffer(&port7TCB, rxdataPort7, sizeof(rxdataPort7));

txLen = rxLen; //send data back to the source TCP_Send(&port7TCB, txdataPort7, txLen); } } break; default: // we should not end up here break; }}

2016 Microchip Technology Inc. DS00001921C_JP - p. 7

Page 8: AN1921 - Microchip Technologyww1.microchip.com/downloads/jp/AppNotes/00001921C_JP.pdf2016 Microchip Technology Inc. DS00001921C_JP - p. 1 AN1921 はじめに 本書では、Microchip社のTCP/IP

AN1921

TCPク ライアントデモ

概要

このデモは、コンピュータ上で動作するサーバ ( ポート60)へ接続するTCPクライアントを実装します。 ユーザは、ファームウェア内のサーバ IP アドレスを変更する必要があります。接続が確立すると、クライアントはステータス パケットを2秒周期でサーバへ送信します。クライアントが送信するパケットは温度値、ポテンショメータ値、ボタンと LED のステータスを格納します。ユーザは、コンピュータ ( サーバ ) からテキストメッセージを送信できます。このメッセージはPICDEM.net 2 ボードの LCD の 2 行目に表示されます。16 文字より長いメッセージは切り詰められ、先頭の16 文字だけが LCD に表示されます。GUI ボタンを使って、サーバからボード上の LED を ON/OFF する事もできます。

このデモ向けに実装されるアクティブな接続は 1 つだけです。しかし、本 TCP/IP スタックは同じボード上で複数の TCP 接続をサポートします。追加する各接続に対してユーザは新しいソケットと受信バッファを生成し、サーバへの接続を試みる必要があります。本ファームウェアはPICDEM.net 2ボード上で動作するよう設計されています。

TCP クライアントデモは 2 秒周期でサーバへの接続を試みます。これにより、ユーザは Wireshark プロトコルアナライザへ容易にアクセスできます。

TCP クライアントデモ向けソフトウェアの設定

1. TCP/IPサーバ Javaデモ アプリケーションが動作するコンピュータの IP アドレスを調べます。

2. MPLAB X を起動し、TCP クライアントデモ プロジェクトを読み込みます。

3. TCP/IPスタックデモ コード内の IPアドレスを変更します (例 : remoteSocket.addr.s_addr = MAKE_IPV4_ADDRESS(192,168,0,3);)。

4. XC8コンパイラを使ってプロジェクトをコンパイルします。

5. ファームウェアはMPLAB Xを使ってPICDEM.net 2ボードへプログラミングできます。

6. デモ用に使う Ethernet ネットワーク内で DHCPサーバが動作している場合、PICDEM.net 2 ボードには独自の IP アドレスが必要です。IP アドレスはPICDEM.net 2ボードのLCDに表示されます。

7. TCP/IP デモ Java アプリケーションをコンピュータ上で起動します。

8. [TCP Server Demo] タブを開きます。

9. 「Server」枠内の「Local Port」フィールドのポート番号を 60 に変更します。

10. [Listen] ボタンをクリックします。

11. PICDEM.net 2 ボードがコンピュータに接続されると、[Sent/Received Data]ウィンドウにメッセージ (例 : 192.168.0.21:Connected)が表示されます。

12.「Send」フィールドに、ボードへ送信するメッセージをタイプ入力します。<Enter> キーを押すか[Send] ボタンをクリックすると、メッセージが送信されます。[Sent/Received Data] ウィンドウには、送信データと受信データの両方が色分けして表示されます。

13. ボードからのメッセージは自動的に [Sent/Received Data] ウィンドウに表示されます。メッセージにはセンサからの未処理温度値、ボタン 0~ 3 の状態、LED0 ~ 7 の状態、ボード上のポテンショメータの未処理値が含まれます。これらの値は 16 進形式で示されます。

14. GUI 上の [LED 0] ~ [LED 7] ボタンをクリックするとボードへコマンドが送信され、ボード上の対応する LED が ON/OFF します。LED は一度に1 つだけ ON/OFF できます。

15. [Disconnect] ボタンをクリックすると TCP 接続は終了し、メッセージ「Client disconnected」が表示されます。

16. 上記の手順 8 ~ 14 を繰り返す事で、接続をテストできます。

図 3: Java アプリケーションにおける Microchip TCP クライアントデモ

DS00001921C_JP - p. 8 2016 Microchip Technology Inc.

Page 9: AN1921 - Microchip Technologyww1.microchip.com/downloads/jp/AppNotes/00001921C_JP.pdf2016 Microchip Technology Inc. DS00001921C_JP - p. 1 AN1921 はじめに 本書では、Microchip社のTCP/IP

AN1921

TCP サーバデモ ファームウェア

バッファの生成

ユーザはソケットと受信および送信バッファを生成する必要があります。送信バッファは、ユーザが生成して TCP スタックへ渡す必要があります。その後に送信が可能になります。

例 3: 受信バッファの生成

TCP クライアントの実装

TCPクライアントを実装するための手順は以下の通りです。

1. TCP スタックを初期化します。この関数は、どのTCP 関数よりも先に呼び出す必要があります。

TCP_Init();2. 接続を生成するため、ソケットを追加して初期化

します。このソケットは TCP 接続に必要な全ての情報を保持します。

TCP_SocketInit(&port60TCB);3. クライアント向けのローカルポートを設定します

( この手順は必須ではありません )。TCP スタックは、ローカルポート用ポート番号の次に利用可能なポート番号を使います。ユーザは TCP_Bind関数を使って、接続開始時に使うポート番号を指定する必要があります。これは、サーバが特定ポート番号からの接続のみを受け入れる場合に役立ちます。

TCP_Bind(&port60TCB, 1024);4. 受信バッファをソケットに追加します。この関数

は、受信データを格納するためのバッファをソケット内に追加します。

TCP_InsertRxBuffer(&port60TCB, rxdataPort60, sizeof(rxdataPort60));

5. クライアントを起動します。TCP_Connect 関数は、サーバへ接続するための TCP 接続手順を開始します。TCPハンドシェイクが正常に完了すると、ユーザは TCP 接続を介してリモート サーバとの間でデータを交換できます。ユーザは、接続に使うポート番号を提供する必要があります(これは、サーバがリッスンするポートの番号です )。

remoteSocket.addr.s_addr = MAKE_IPV4_ADDRESS(192,168,0,3);remoteSocket.port = 60;TCP_Connect(&port60TCB, &remoteSocket);

6. ソケットのステータスを確認します。この関数は、パラメータとして提供されたポインタがソケットとして TCP/IP スタックへ内部で登録済みであるかどうか確認します。ポインタが有効なソケットである場合、関数はそのソケットの状態を返します。ソケットの各種状態は tcpv4.h ファイル内で定義されます。

socket_state = TCP_SocketPoll(&port7TCB);7. ソケット内に受信データが存在するかどうか確認

します。この関数は、受信バッファ内の受信データのバイト数を返します。

rxLen = TCP_GetRxLength(&port60TCB);8. 受信バッファ内のデータバイト数を取得し、ユー

ザがバッファを使えるようにします。 この関数は、バッファ内のデータバイト数を返します。この関数の呼び出し後、ユーザはバッファに安全にアクセスできます。この関数を呼び出すと、スタックは後続の受信データをこの受信バッファに書き込まなくなります。パケットの再送信を防ぐため、ユーザはできるだけ速やかに別の受信バッファをスタックに提供する必要があります。

rxLen = TCP_GetReceivedData(&port60TCB);

9. バッファの内容をリモートマシンへ送信します。この API により、ユーザはアクティブな TCP 接続を介してデータを送信できます。ローカルおよびリモートホスト間で接続が確立していない場合、データは送信できません。

TCP_Send(&port60TCB, txdataPort60, txLen);

10. 送信バッファが正しく送信されたかどうか ( リモートホストが全てのバイトに対して ACK を返したかどうか ) 確認します。ソケットは一度に1 つのバッファしか扱えないため、送信を試みる前に必ずこの関数を呼び出す必要があります。

TCP_SendDone(&port60TCB)11. TCP 接続を終了します。この関数はソケット接続

を直ちに終了するのではなく、TCP 接続ハンドシェイク後に終了します。ユーザは、ソケットが実際に終了状態になるまで、ソケットのステートを繰り返し確認する必要があります。ソケットが終了状態になると、受信バッファと送信バッファは安全に再使用できます。

TCP_Close(&port60TCB)

// create the socket for the TCP ClienttcpTCB_t port60TCB;

// create the TX and RX buffersuint8_t rxdataPort60[50];uint8_t txdataPort60[80];

2016 Microchip Technology Inc. DS00001921C_JP - p. 9

Page 10: AN1921 - Microchip Technologyww1.microchip.com/downloads/jp/AppNotes/00001921C_JP.pdf2016 Microchip Technology Inc. DS00001921C_JP - p. 1 AN1921 はじめに 本書では、Microchip社のTCP/IP

AN1921

12. ソケットを削除します。終了したソケットを内部

のソケットリストから削除する場合、以下の APIによりポインタを削除します。

TCP_SocketRemove(&port60TCB)13. バックブランド タスクです。TCP スタックのタ

イムアウトを処理するため、アプリケーションはこの関数を繰り返し呼び出す必要があります。TCP スタック タイムアウトを処理するため、TCPバックグラウンド タスクは1秒周期で呼び出されます。

TCP_Update();

TCP クライアントを実装するためのソースコード

TCPクライアント デモコード (ソースコードとビルド済み hex ファイル ) は、Microchip 社のウェブサイトからダウンロードできます。

DS00001921C_JP - p. 10 2016 Microchip Technology Inc.

Page 11: AN1921 - Microchip Technologyww1.microchip.com/downloads/jp/AppNotes/00001921C_JP.pdf2016 Microchip Technology Inc. DS00001921C_JP - p. 1 AN1921 はじめに 本書では、Microchip社のTCP/IP

AN1921

例 4: TCP クライアントを実装するためのソースコードvoid DEMO_TCP_client(void){ // create the socket for the TCP Client static tcpTCB_t port60TCB;

// create the TX and RX Client's buffers static uint8_t rxdataPort60[50]; static uint8_t txdataPort60[80];

static time_t t_client = 0; static time_t t_client_old = 0;

uint16_t rx_len, i; socket_state_t socket_state; rx_len = 0;

socket_state = TCP_SocketPoll(&port60TCB); time(&t_client); switch(socket_state) { case NOT_A_SOCKET: // Inserting and initializing the socket TCP_SocketInit(&port60TCB); case SOCKET_CLOSED: // if the socket is closed we will try to connect again

if(t_client >= t_client_old) { // try to connect once at 2 seconds

t_client_old = t_client + 2; TCP_InsertRxBuffer(&port60TCB, rxdataPort60, sizeof(rxdataPort60)); TCP_Connect(&port60TCB, &remoteSocket); } break; case SOCKET_CONNECTED: // implement an echo client over TCP // check if the previous buffer was sent if (TCP_SendDone(&port60TCB)) { rx_len = TCP_GetReceivedData(&port60TCB); // handle the incomming data if(rx_len > 0) {

/*…………………………………………………………………………….LED Command parsing and LCD updates was removed from this example.The full code is available in the source code.

…………………………………………………………………………….*/ // reuse the rx buffer TCP_InsertRxBuffer(&port60TCB, rxdataPort60, sizeof(rxdataPort60)); } if(t_client >= t_client_old) { // send board status message only once at 2 seconds

t_client_old = t_client + 2;/*…………………………………………………………………………….

Composing the TX message in the TX buffer was removed from this example.The full code is available in the source code.

…………………………………………………………………………….*/

//send data back to the source TCP_Send(&port60TCB, txdataPort60, strlen(txdataPort60)); } } break; default: // we should not end up here break; }}

2016 Microchip Technology Inc. DS00001921C_JP - p. 11

Page 12: AN1921 - Microchip Technologyww1.microchip.com/downloads/jp/AppNotes/00001921C_JP.pdf2016 Microchip Technology Inc. DS00001921C_JP - p. 1 AN1921 はじめに 本書では、Microchip社のTCP/IP

AN1921

UDPデ モ

概要

このデモは、UDP 送信 (UDP クライアント ) と UDP受信 (UDP サーバ ) を実装します。UDP 送信の場合、PICDEM.net 2 ボードはポテンショメータと温度センサの値を UDP パケットとして送信します。UDP 受信の場合、PICDEM.net 2 ボードは送られてくる全てのUDPパケット (LEDのトグル等 )のリッスンを開始し、データをポート 65531 上の LCD に表示します。ボート番号には 49152 ~ 65535 の任意の値が使えます。

図 4: Java アプリケーションにおける TCP/IP UDP デモ

UDP 送信 ( クライアント ) デモ向けソフトウェアの設定

1. MPLAB X を起動し、UDP デモプロジェクトを読み込みます。

2. このファームウェアは、XC8 コンパイラを使ってPICDEM.net 2ボードへプログラミングできます。

3. PICDEM.net 2 ボードは、UDP サーバへ接続されるまで、ポート 65531 上で LISTEN UDP パケットを 1 秒周期で送信します。

4. TCP/IP デモ Java アプリケーションをコンピュータ上で起動します。

5. [UDP] タブを開き、[Port] に 65531 を入力します。 6. [Listen] ボタンをクリックします。するとポート

65531 で UDP ソケットが開きます。

7. TCP/IP デモ アプリケーションは、ポート 65531上でパケットのリッスンを開始し、ネットワーク上の各デバイスの IP アドレスを表示します。

8. 通信先デバイスの IP アドレスをリストから選択し、[Connect] ボタンをクリックします。

9. TCP/IP デモは、接続されたデバイスの IP アドレスを表示します。

1 0 . P I C D E M . n e t 2ボード上のノブを回すと、P I C D E M . n e t 2 ボードはポテンショメータの値 ( 単位は V ) を示す U D P パケットを送信します。

11. GUI の [Temperature] ボタンをクリックすると、PICDEM.net 2 ボードは周囲温度 ( 単位は °F) を示す UDP パケットを送信します。

12. GUI の [LED0] ~ [LED7] ボタンのいずれかをクリックすると、PICDEM.net 2 ボードは UDP パケットを受信し、ボード上の対応する LED を ON/OFF します。

13. GUIに 32文字以下のテキストを入力して [Send]ボタンをクリックすると、PICDEM.net 2ボードはUDPパケットを受信し、テキストをボード上の LCD に表示します。

14. [Disconnect] ボタンをクリックすると、コンピュータと PICDEM.net 2 ボード間の接続は終了します。

15. 上記の手順 5 ~ 14 を繰り返す事で、65531 ポート上の UDP 送信および UDP 受信パケットを確認できます。

UDP 送信の実装

UDP パケットを開始するための手順は以下の通りです。

1. UDP パケットの開始

この関数は UDPv4 パケットを開始します。これにより IPv4 パケットが開始され、UDP ヘッダが書き込まれます。UDP ヘッダのフィールド ( チェックサムとデータ長 ) は「0」に初期化されます。

- UDP_Start (uint32_t destIP, uint16_tsrcPort, uint16_t destPort);

2. UDP パケットの書き込み

UDP パケットの書き込みには、データのサイズと順番に応じて 4 通りの方法があります。

- UDP_WriteBlock (uint8_t* data, uint16_t length) - 1 ブロックのデータを書き込みます。

- UDP_Write8 (uint8_t data) - 1 バイトのデータを書き込みます。

- UDP_Write16 (uint16_t data); - 2 バイトのデータを書き込みます。

Note: udp_demo.h ファイル内の DEST_PORT と、TCP/IP デモ アプリケーション内で入力したポート番号は同じである事が必要です。

DS00001921C_JP - p. 12 2016 Microchip Technology Inc.

Page 13: AN1921 - Microchip Technologyww1.microchip.com/downloads/jp/AppNotes/00001921C_JP.pdf2016 Microchip Technology Inc. DS00001921C_JP - p. 1 AN1921 はじめに 本書では、Microchip社のTCP/IP

AN1921

- UDP_Write32 (uint32_t data); - 4 バイト

のデータを書き込みます。

3. UDP パケットの送信

この関数は UDP ヘッダに総ペイロード長を挿入し、UDP パケットのチェックサムを計算し、パケットを送信します。

- UDP_Send();

UDP 受信の実装

UDP パケットの受信を開始するための手順は以下の通りです。

1. ポートの設定

udpv4_port_handler_table.h ファイル内で、UDP_CallBackTable 関数 ( 受信ポート番号とそのコールバック関数 ) を更新する必要があります。

例 5: ポートの設定

2. UDP パケットの受信

チェックサムが正しい場合、この関数はポート番号と対応する関数ハンドラ (コールバック )を照合し、UDPペイロード長をパラメータとしてコールバックに渡します。チェックサムが不正な UDP パケットは全て破棄します。

- UDP_Receive (uint16_t udpcksm); 3. UDP パケットの読み出し

UDP パケットの読み出しには、データのサイズと順番に応じて 4 通りの方法があります

- UDP_ReadBlock (uint8_t* data, uint16_t length) - 1ブロックのデータを読み出します。

- UDP_Read8 (uint8_t data) - 1 バイトのデータを読み出します。

- UDP_Read16 (uint16_t data) - 2 バイトのデータを読み出します。

- UDP_Read32 (uint32_t data) - 4 バイトのデータを読み出します。

UDP クライアント / サーバを実装するためのソースコード

UDPデモコード (ソースコードとビルド済み hexファイル ) は、Microchip 社のウェブサイトからダウンロードできます。

例 6: UDP クライアントの実装

typedef struct{ uint16_t portNumber; ip_receive_function_ptr callBack;} udp_handler_t;

const udp_handler_t UDP_CallBackTable [] = \{

{portNumber, &callback} };

void DEMO_UDP_Send(){ bool started = false;

if(!claim_ip_check()) { started = UDP_Start(0xFFFFFFFF,65533,65531); if(started==SUCCESS) { UDP_Write8(LISTEN); // Write the Transmit Buffer data UDP_Send(); } }}

2016 Microchip Technology Inc. DS00001921C_JP - p. 13

Page 14: AN1921 - Microchip Technologyww1.microchip.com/downloads/jp/AppNotes/00001921C_JP.pdf2016 Microchip Technology Inc. DS00001921C_JP - p. 1 AN1921 はじめに 本書では、Microchip社のTCP/IP

AN1921

例 7: UDP サーバの実装

各種 Ethernet コントローラを使ってPICDEM.net 2 ボードで TCP/IP スタックを実行する方法

以下では、各種 Ethernet コントローラ向けのハードウェア (PICDEM.net™ ボード ) およびソフトウェア(MPLAB® X プロジェクト ) 設定について説明します。

ENC97J60 を使う場合

ハードウェアの準備

1. Ethernet ケーブルをコネクタ J1 ( ボードの左側にある RJ45 ジャック ) に接続します。

2. ジャンパ JP9 を外します。

3. 9 V 電源をボードのコネクタ J7 に供給します。

ソフトウェアの設定

1. MPLAB IDE を起動します。

2. いずれかのTCP/IPデモプロジェクトを開きます。

3. [P r o j e c t P r o p e r t i e s ] ウィンドウ内で、デ バ イ ス コ ン フ ィ グ レ ー シ ョ ン と し て

「PICDEM.net2_ENC97J60」オプションを選択します。

ENC28J60 を使う場合

ハードウェアの準備

1. Ethernet ケーブルをコネクタ J2 ( ボードの右側にある RJ45 ジャック ) に接続します。

2. ジャンパ JP9 を取り付けます。

3. 9 V 電源をボードのコネクタ J7 に供給します。

ソフトウェアの設定

1. MPLAB IDE を起動します。

2. いずれかのTCP/IPデモプロジェクトを開きます。

3. [Project Properties]ウィンドウ内で、デバイス コンフィグレーションとして「PICDEM.net2_ENC28J60」オプションを選択します。

ENCx24J600 (SPI インターフェイス ) を使う場合

ハードウェアの準備

1. PICDEM.net 2 ボード上のジャンパ JP9 を外します。

2. Fast 100 Mbps Ethernet PICtail™ Plus ドータボードの J4 ヘッダを PICDEM.net 2 ボードの J5 コネクタに挿入します (PICtailボード側の 1ピン (RE2と表記 ) を PICDEM.net 2 ボード側のコネクタ J5の RE2 の位置に合わせます )。

3. Ethernet ケーブルを PICtail ボードのコネクタ J7に接続します。

4. 9 V 電源を PICDEM.net 2 ボードのコネクタ J7 に供給します。

ソフトウェアの設定

1. MPLAB IDE を起動します。

2. いずれかの TCP/IP デモを開きます。

3. [ P r o j e c t P r o p e r t i e s ] ウィンドウ内で、デ バ イ ス コ ン フ ィ グ レ ー シ ョ ン と し て

「PICDEM.net2_ENCx24J600_SPI」オプションを選択します。

const udp_handler_t UDP_CallBackTable [] = \{

{65531, & DEMO_UDP_Recv } };

void DEMO_UDP_Recv(int length){ UDP_ReadBlock(&data,sizeof(data));/*

Process the Receive Buffer data*/}

Note: これにより、ENC97J60 ドライバと TCP/IPスタックおよびPICDEM.net 2ボードが使うその他のドライバが有効になります。

Note: これにより、ENC28J60 ドライバと TCP/IPスタックおよびPICDEM.net 2ボードが使うその他のドライバが有効になります。

Note: これにより、ENCx24J600 ドライバと TCP/IPスタックおよびPICDEM.net 2ボードが使うその他のドライバが有効になります。

DS00001921C_JP - p. 14 2016 Microchip Technology Inc.

Page 15: AN1921 - Microchip Technologyww1.microchip.com/downloads/jp/AppNotes/00001921C_JP.pdf2016 Microchip Technology Inc. DS00001921C_JP - p. 1 AN1921 はじめに 本書では、Microchip社のTCP/IP

AN1921

まとめ

本書では、Microchip 社の TCP/IP スタックを使ってTCP サーバ、TCP クライアント、UDP を介するデータ交換を実装するための非常に簡潔なソフトウェアソリューションを紹介しました。TCP/IP Lite スタックは、リソースが限られた組み込みシステムにネットワーク接続を可能とするモジュール形式の効果的な実装手段を提供します。

2016 Microchip Technology Inc. DS00001921C_JP - p. 15

Page 16: AN1921 - Microchip Technologyww1.microchip.com/downloads/jp/AppNotes/00001921C_JP.pdf2016 Microchip Technology Inc. DS00001921C_JP - p. 1 AN1921 はじめに 本書では、Microchip社のTCP/IP

AN1921

補遺 A: 参考資料

1. User Datagram Protocol, RFC 7682. Internet Protocol, DARPA Internet Program

Protocol Specification, RFC 7913. Internet Control Message Protocol, DARPA

Internet Program Protocol Specification, RFC 7924. Transmission Control Protocol, DARPA Internet

Program Protocol Specification, RFC 7935. Requirements for Internet Hosts, Communication

Layers, RFC 11226. An Ethernet Address Resolution Protocol or

Converting Network Protocol Addresses to 48 bitEthernet Address for Transmission on EthernetHardware, RFC 826

7. Domain Names – Implementation andSpecification, RFC 1035

8. Clarifications to the DNS Specification, RFC 21819. Service Name and Transport Protocol Port

Number Registry (www.iana.org)

DS00001921C_JP - p. 16 2016 Microchip Technology Inc.

Page 17: AN1921 - Microchip Technologyww1.microchip.com/downloads/jp/AppNotes/00001921C_JP.pdf2016 Microchip Technology Inc. DS00001921C_JP - p. 1 AN1921 はじめに 本書では、Microchip社のTCP/IP

AN1921

補遺 B: TCP サーバデモのフローチャート

Note: TCP/IP スタックを含む本デモのサイズは非常に大きいため、このフローチャートには main.c ファイル内の TCP サーバルーチンに的を絞ったメイン アプリケーション部だけを表示しています。

Is socket initialized?

TCP_Bind();

TCP_InsertRXBuffer();

No

Yes Is server started?

Initialize Socket

No

Yes

Network Manage();

TCP Stack Initialization

Hardware Initialization

main.c

No

No

Yes

Yes

Isclient connected?

RX bytes > 0?

TCP_GetReceivedData();

TCP_InsertRXBuffer();

User Code to Handle Received Data

No

Yes

Is TX Ready?

Prepare Buffer to send;

TCP_Send();

TCP_Listen();

any

2016 Microchip Technology Inc. DS00001921C_JP - p. 17

Page 18: AN1921 - Microchip Technologyww1.microchip.com/downloads/jp/AppNotes/00001921C_JP.pdf2016 Microchip Technology Inc. DS00001921C_JP - p. 1 AN1921 はじめに 本書では、Microchip社のTCP/IP

AN1921

補遺 C: TCPク ライアントデモのフローチャート

Is socket initialized?

TCP_Connect();

TCP_InsertRXBuffer();

No

Yes Is client started?

Initialize Socket

No

Yes

Network Manage();

TCP Stack Initialization

Hardware Initialization

main.c

No

NoYes

Yes

Isclient connected?

RX bytes > 0?

TCP_GetReceivedData();

TCP_InsertRXBuffer();

User Code to Handle Received Data

No

Yes

Is TX Ready?

Prepare Buffer to send;

TCP_Send();

DS00001921C_JP - p. 18 2016 Microchip Technology Inc.

Page 19: AN1921 - Microchip Technologyww1.microchip.com/downloads/jp/AppNotes/00001921C_JP.pdf2016 Microchip Technology Inc. DS00001921C_JP - p. 1 AN1921 はじめに 本書では、Microchip社のTCP/IP

AN1921

補遺 D: UDPデ ータ交換デモのフローチャート

Start

Hardware Initialization

Network_Manage()

DEMO_UDP_Send()

Claim_IP_Check()

TX Buffer

UDP_Start (claim_dest_IP, 65533, DEST_PORT)

False

True

False

True

(TX Buffer)UDP_Write16

UDP_Send()

UDP_Send()

(TX Buffer)UDP_Write16

UDP_Start (0XFFFFFFFF, 65533, DEST_PORT)

False

True

2016 Microchip Technology Inc. DS00001921C_JP - p. 19

Page 20: AN1921 - Microchip Technologyww1.microchip.com/downloads/jp/AppNotes/00001921C_JP.pdf2016 Microchip Technology Inc. DS00001921C_JP - p. 1 AN1921 はじめに 本書では、Microchip社のTCP/IP

AN1921

補遺 E: UDPデ モにおける UDPパ ケット受信のフローチャート

Start

Hardware Initialization

Network_Manage()

UDPV4_

True

False

True

IPv4_Packet()

PACKET()

True

checksum==0

htptr = UDP_CallBackTable; x = 0

True

True

False

x <ARRAYSIZE

(UDP_CallBackTable)

udpHeader.destport==

htptr-> portNumberFalse x++;

User Code

Demo_UDP_Recv()

False

False

DS00001921C_JP - p. 20 2016 Microchip Technology Inc.

Page 21: AN1921 - Microchip Technologyww1.microchip.com/downloads/jp/AppNotes/00001921C_JP.pdf2016 Microchip Technology Inc. DS00001921C_JP - p. 1 AN1921 はじめに 本書では、Microchip社のTCP/IP

2016 Microchip Technology Inc. DS00001921C_JP - p. 21

本書に記載されているデバイス アプリケーション等に関する

情報は、ユーザの便宜のためにのみ提供されているものであ

り、更新によって無効とされる事があります。お客様のアプ

リケーションが仕様を満たす事を保証する責任は、お客様に

あります。Microchip 社は、明示的、暗黙的、書面、口頭、法

定のいずれであるかを問わず、本書に記載されている情報に

関して、状態、品質、性能、商品性、特定目的への適合性を

はじめとする、いかなる類の表明も保証も行いません。

Microchip 社は、本書の情報およびその使用に起因する一切の

責任を否認します。Microchip 社の明示的な書面による承認な

しに、生命維持装置あるいは生命安全用途に Microchip 社の製

品を使用する事は全て購入者のリスクとし、また購入者はこ

れによって発生したあらゆる損害、クレーム、訴訟、費用に

関して、Microchip 社は擁護され、免責され、損害をうけない

事に同意するものとします。暗黙的あるいは明示的を問わず、

Microchip社が知的財産権を保有しているライセンスは一切譲

渡されません。

商標

Microchip 社の名称と Microchip ロゴ、dsPIC、FlashFlex、KEELOQ、KEELOQ ロゴ、MPLAB、PIC、PICmicro、PICSTART、PIC32 ロゴ、rfPIC、SST、SST ロゴ、SuperFlash、UNI/O は、

米国およびその他の国における Microchip TechnologyIncorporated の登録商標です。

FilterLab、Hampshire、HI-TECH C、Linear Active Thermistor、MTP、SEEVAL、Embedded Control Solutions Company は、

米国における Microchip Technology Incorporated の登録商標

です。

Silicon Storage Technologyは、その他の国におけるMicrochipTechnology Incorporated の登録商標です。

Analog-for-the-Digital Age、Application Maestro、BodyCom、

chipKIT、chipKIT ロゴ、CodeGuard、dsPICDEM、dsPICDEM.net、dsPICworks、dsSPEAK、ECAN、ECONOMONITOR、FanSense、HI-TIDE、In-Circuit Serial Programming、ICSP、Mindi、MiWi、MPASM、MPF、MPLAB 認証ロゴ、MPLIB、MPLINK、mTouch、Omniscient Code Generation、PICC、PICC-18、PICDEM、

PICDEM.net、PICkit、PICtail、REAL ICE、rfLAB、Select Mode、SQI、Serial Quad I/O、Total Endurance、TSHARC、UniWinDriver、WiperLock、ZENA、Z-Scale は、米国およびその他の国におけ

る Microchip Technology Incorporatedの登録商標です。

SQTP は、米国における Microchip Technology Incorporatedのサービスマークです。

GestICとULPPは、その他の国におけるMicrochip TechnologyGermany II GmbH & Co. & KG (Microchip TechnologyIncorporated の子会社 ) の登録商標です。

その他、本書に記載されている商標は各社に帰属します。

©2013, Microchip Technology Incorporated, Printed in theU.S.A., All Rights Reserved.

ISBN: 978-1-5224-0600-6

Microchip 社製デバイスのコード保護機能に関して次の点にご注意ください。

• Microchip 社製品は、該当する Microchip 社データシートに記載の仕様を満たしています。

• Microchip 社では、通常の条件ならびに仕様に従って使用した場合、Microchip 社製品のセキュリティ レベルは、現在市場に流

通している同種製品の中でも最も高度であると考えています。

• しかし、コード保護機能を解除するための不正かつ違法な方法が存在する事もまた事実です。弊社の理解ではこうした手法は、

Microchip 社データシートにある動作仕様書以外の方法で Microchip 社製品を使用する事になります。このような行為は知的所

有権の侵害に該当する可能性が非常に高いと言えます。

• Microchip 社は、コードの保全性に懸念を抱くお客様と連携し、対応策に取り組んでいきます。

• Microchip 社を含む全ての半導体メーカーで、自社のコードのセキュリティを完全に保証できる企業はありません。コード保護

機能とは、Microchip 社が製品を「解読不能」として保証するものではありません。

コード保護機能は常に進歩しています。Microchip 社では、常に製品のコード保護機能の改善に取り組んでいます。Microchip 社

のコード保護機能の侵害は、デジタル ミレニアム著作権法に違反します。そのような行為によってソフトウェアまたはその他の著

Microchip 社では、Chandler および Tempe ( アリゾナ州 )、Gresham( オレゴン州 ) の本部、設計部およびウェハー製造工場そしてカリフォルニア州とインドのデザインセンターが ISO/TS-16949:2009 認証を取得しています。Microchip 社の品質システム プロセスおよび手順は、PIC® MCU および dsPIC® DSC、KEELOQ® コード ホッピング デバイス、シリアル EEPROM、マイクロペリフェラル、不揮発性メモリ、アナログ製品に採用されています。さらに、開発システムの設計と製造に関する Microchip 社の品質システムは ISO 9001:2000 認証を取得しています。

QUALITY MANAGEMENT SYSTEM CERTIFIED BY DNV

== ISO/TS 16949 ==

Page 22: AN1921 - Microchip Technologyww1.microchip.com/downloads/jp/AppNotes/00001921C_JP.pdf2016 Microchip Technology Inc. DS00001921C_JP - p. 1 AN1921 はじめに 本書では、Microchip社のTCP/IP

DS00001921C_JP - p. 22 2016 Microchip Technology Inc.

北米本社2355 West Chandler Blvd.Chandler, AZ 85224-6199Tel:480-792-7200 Fax:480-792-7277技術サポート : http://www.microchip.com/supportURL: www.microchip.com

アトランタDuluth, GA Tel:678-957-9614 Fax:678-957-1455

オースティン (TX)Tel:512-257-3370

ボストンWestborough, MA Tel:774-760-0087 Fax:774-760-0088

シカゴItasca, IL Tel:630-285-0071 Fax:630-285-0075

クリーブランドIndependence, OH Tel:216-447-0464

Fax:216-447-0643

ダラスAddison, TX Tel:972-818-7423 Fax:972-818-2924

デトロイトNovi, MI Tel:248-848-4000

ヒューストン (TX) Tel:281-894-5983

インディアナポリスNoblesville, IN Tel:317-773-8323Fax:317-773-5453

ロサンゼルスMission Viejo, CA Tel:949-462-9523 Fax:949-462-9608

ニューヨーク (NY) Tel:631-435-6000

サンノゼ (CA) Tel:408-735-9110

カナダ - トロントTel:905-673-0699 Fax:905-673-6509

アジア / 太平洋

アジア太平洋支社Suites 3707-14, 37th FloorTower 6, The GatewayHarbour City, KowloonHong KongTel:852-2943-5100Fax:852-2401-3431

オーストラリア - シドニーTel:61-2-9868-6733Fax:61-2-9868-6755

中国 - 北京Tel:86-10-8569-7000 Fax:86-10-8528-2104

中国 - 成都Tel:86-28-8665-5511Fax:86-28-8665-7889

中国 - 重慶Tel:86-23-8980-9588Fax:86-23-8980-9500

中国 - 東莞

Tel:86-769-8702-9880

中国 - 杭州Tel:86-571-8792-8115 Fax:86-571-8792-8116

中国 - 香港 SARTel:852-2943-5100 Fax:852-2401-3431

中国 - 南京Tel:86-25-8473-2460Fax:86-25-8473-2470

中国 - 青島Tel:86-532-8502-7355Fax:86-532-8502-7205

中国 - 上海Tel:86-21-5407-5533 Fax:86-21-5407-5066

中国 - 瀋陽Tel:86-24-2334-2829Fax:86-24-2334-2393

中国 - 深圳Tel:86-755-8864-2200 Fax:86-755-8203-1760

中国 - 武漢Tel:86-27-5980-5300Fax:86-27-5980-5118

中国 - 西安Tel:86-29-8833-7252Fax:86-29-8833-7256

アジア / 太平洋

中国 - 厦門Tel:86-592-2388138 Fax:86-592-2388130

中国 - 珠海Tel:86-756-3210040 Fax:86-756-3210049

インド - バンガロールTel:91-80-3090-4444 Fax:91-80-3090-4123

インド - ニューデリーTel:91-11-4160-8631Fax:91-11-4160-8632

インド - プネTel:91-20-3019-1500

日本 - 大阪Tel:81-6-6152-7160 Fax:81-6-6152-9310

日本 - 東京Tel:81-3-6880- 3770 Fax:81-3-6880-3771

韓国 - 大邱Tel:82-53-744-4301Fax:82-53-744-4302

韓国 - ソウルTel:82-2-554-7200Fax:82-2-558-5932 または 82-2-558-5934

マレーシア - クアラルンプールTel:60-3-6201-9857Fax:60-3-6201-9859

マレーシア - ペナンTel:60-4-227-8870Fax:60-4-227-4068

フィリピン - マニラTel:63-2-634-9065Fax:63-2-634-9069

シンガポールTel:65-6334-8870Fax:65-6334-8850

台湾 - 新竹Tel:886-3-5778-366Fax:886-3-5770-955

台湾 - 高雄Tel:886-7-213-7828

台湾 - 台北Tel:886-2-2508-8600 Fax:886-2-2508-0102

タイ - バンコクTel:66-2-694-1351Fax:66-2-694-1350

ヨーロッパ

オーストリア - ヴェルスTel:43-7242-2244-39

Fax:43-7242-2244-393

デンマーク - コペンハーゲンTel:45-4450-2828 Fax:45-4485-2829

フランス - パリTel:33-1-69-53-63-20 Fax:33-1-69-30-90-79

ドイツ - デュッセルドルフTel:49-2129-3766400

ドイツ - ミュンヘンTel:49-89-627-144-0 Fax:49-89-627-144-44

ドイツ - プフォルツハイムTel:49-7231-424750

イタリア - ミラノ Tel:39-0331-742611 Fax:39-0331-466781

イタリア - ベニスTel:39-049-7625286

オランダ - ドリューネンTel:31-416-690399 Fax:31-416-690340

ポーランド - ワルシャワTel:48-22-3325737

スペイン - マドリッドTel:34-91-708-08-90Fax:34-91-708-08-91

スウェーデン - ストックホルムTel:46-8-5090-4654

イギリス - ウォーキンガムTel:44-118-921-5800Fax:44-118-921-5820

各国の営業所とサービス

01/27/15