TCP/IPスタックの概要


【TCP/IPスタックとは】

 TCP/IPスタックとは、LANを使った通信を行うアプリケーションを作るとき
必要とされる、TCP/IP通信のプロトコルに関するプログラムをまとめて
1つのプログラム群としたものです。

 マイクロチップ社のTCP/IPスタックは、もちろんPIC用に作られたもので
PIC18シリーズ用に使われることが前提になっています。
 世界標準のTCP/IP通信に必要とされる通信プロトコルのほぼ全てに
対応しており、各プロトコル毎にモジュール化されたプログラム群から構成
されていて、必要となるモジュールだけ組み合わせて再構成できるように
なっています。

 このスタックはもともと、「PICDEM.net」というマイクロチップ社が販売している
評価ボード用に作られたものです。しかし、このPICDEM.netは、PICNICとほとんど
回路構成が同じになっています。使っているLANコントローラも、よく使われている
Realtek社のRTL8019ASで、これもPICNICと同じです。
 PICNIC側もPIC16F877をPIC18F452に差し替えるだけで、PIC18シリーズ用として
そのまま動かせます。

 そこで、このフリーのTCP/IPスタックをPICNIC用に改版してしまえ ということで
移植をしてみました。 思ったとおり、案外簡単に移植できました。

 このTCP/IPスタックは、すべてPIC18用のC言語で記述されていますので、
マイクロチップ社のMPLAB-C18か、Hi-Teck社のPICC 18コンパイラが必要です。
MPLAB-C18についてはデモ版が提供されていますので、これで十分使えます。


【入手先と展開方法】

 マイクロチップ社のTCP/IPスタックは、フリーソフトとして、C言語のソース
ファイルで提供されています。
 入手先は下記のマイクロチップ社のサイトからダウンロードできます。
ダウンロード手順は、下記サイトに行ったら、そこで必要な登録を済ませて
「Submit」のボタンを押せばダウンロードサイトにジャンプしますので、そこから
Document、Source、Presentationの3つをダウンロードします。

  ★ マイクロチップ社 TCP/IP Stackダウンロードサイト


 無事ダウンロードが完了したら、まずはDocumentを印刷しておきましょう。
そしてソースファイルについては、ZIPで圧縮されていますので、まずは解凍
します。解凍すると、「MCHPStackv2.11.EXE」という自己解凍実行ファイルが
生成されますので、これをダブルクリックして実行します。
 途中でインストールするフォルダを聞かれますので、適当なフォルダを指定
してNextで進みます。
インストールが完了すると、下記のような構成のフォルダが生成されます。
   
   MCHPStack
      Source            :ここに全てのソースファイルがある
         SmallWebPages   :簡易な監視制御用のWeb画面データ
         WebPages       :やや複雑な監視制御用のWeb画面データ


CコンパイラのMPLAB-C18のデモ版は下記からダウンロードできます。
最新のバージョンですが、デモ版は使用期限に制限がありますので、場合に
よると既に期限過ぎとなっているかも知れません。
その場合にはしばらく待てばまた使用可能なバージョンに更新されると思います。

  ★ MPLAB-C18デモ版のダウンロードサイト


【全体のモジュール構成】

 このTCP/IPスタックの全体は下図のようなブロックで構成されています。
通信のOSI標準モデルに沿った階層でそれぞれのブロックが対応しています。
 ただしこの中で、「StackTask」と「ARPTask」は標準外で、これらのモジュール
は、本スタックをPICでかつRTOSが無い構成でも動作するようにするための
特別なモジュールです。







 また、MPFS:Microchip File System も通信スタックとは別物で、各種データを
格納しておくためのディレクトリを持った専用の小型ファイルシステムです。

【モジュールの動作概要】

上図の各モジュールは、連携して動作しますが、RTOSが無い状態で動作が
出来るように、工夫されています。
 その中心となるのが、「StackTask」で、このStackTaskを下図のようにユーザー
のアプリのmain中のwhile(1)文ループ内で常時繰り返し実行するようします。






 StackTaskでは、特に実行すべきものが無いときは、MAC部を実行し、データ
を受信したかどうかをチェックします。

 MAC部では、受信データがあった場合には、それを一気に取り出しバッファに
格納してStackTaskに戻ります。
戻ったらmain内のユーザーアプリの残りの部分を実行してから再度StackTaskが
動作します。

 次にStackTaskが起動すると、受信したデータのヘッダなどから内容を判定し、
Stateをセットしてから、該当するモジュールを関数として呼び出し実行します。

 呼び出された各モジュールは、State Machineとなっていて、それぞれのState
毎に細切れの関数で出来ています。 つまり、指定されたStateに関する処理を
実行したら、Stateを次に進めて、直ぐStackTaskに戻るようになっています。
戻ったら再度mainの残りを繰り返してから、またStackTaskを実行します。

 このようにして順次Stateを進めながらプロトコルの処理が進められ、一連の
流れの実行が行われます。

 こういう作りなので、ユーザーアプリを作るときにも注意が必要です。
つまりmain関数からユーザーが処理する関数が呼ばれる訳ですが、この関数
の実行時間を出来るだけ短くなるように作る必要があるということです。
 処理時間の長い場合には、処理を分割し、フラグ(Stateフラグ)で管理して
細切れの状態にして実行するようにする必要があります。





        目次に戻る