MLAのFrameworkでTCP/IPを試して見るその1

〔PICの動かせ方入門に戻る〕
〔PING〕 〔TELNET〕 〔SMTP〕 〔XC16編〕 〔TCPclient〕 〔TCPserver〕 〔HTTPserver〕


Microchip社MLA(Microchip Libraries for Applications)のFrameworkに”tcpip”と言うライブラリが
有ります、これはPICからイーサーネットモジュールを介しインターネットに接続する為の関数集です。
この"TCP/IPスタック"を動作させて覚書として記述して置きた いと思います、
尚、イーサーネットモジュールは”ENC28J60”を使い ます。

ENC28J60とは、10base-Tネットワークで SPI接続出来るIEEE802.3互換のイーサネットコントローラで
マイクロチップ製です。
秋月電子通商のこちらで販売されています、DIPタイプなので扱いやすそうですがぁ...
25MHz水晶・パルストランス内蔵モジュラージャック・LED・フェライトビーズ・数個のコンデンサに
抵抗などを外付けしないとダメなのでとっても面倒くちゃいのですぅ。
ENC28J60モジュール
そこでぇ、今回の商品は、\(^-^ )こちら。
ENC28J60 Ethernet LAN Network Module です、
"やっほ〜!ショッピングで購入しました。
ENC28J60はSOICタイプですが全部部品が乗っているのでお手軽ですね。
他にも色々有る様なので検索してみそ。

ENC28J60の日本語データシートは、こちらです。
又、ENC28J60の概要は後閑さんの電子工作実験室こちらです。

《Frameworkのtcpipについて》

FrameworkのTCP/IPスタックライブラリ(v5.47)はこちらのサイトよりプログラムをダウンロードします
インストール方法は、USBフレームワークでの記事ですが同じなのでこちらを参照下さい。
(ここでのFrameworkは"V2016-11-07"で"C:\microchip\mla\v2016_11_07"がインストール先です)

このバージョンのTCP/IPスタックライブラリは、MRF24WG を利用したWi-Fiのアプリケーションのみ
サポートしていましてぇ、MRF24WG無線は技適が取れていませんなのにぃENC28J60はサポートを
止めています。
(PS. MRF24WB0MA(B)/MRF24WG0MA(B)辺りは技適取れているっぽいです)
なのでぇ、過去のバージョンを調べます。

v5.43.00-July 2014のバージョンからレガシーMLAからのWiFiサポートへの移植。
 (Wi-FiのみのTCP / IPデモ、イーサネットは使用出来ません)
となってい ます。

ですのでぇ、一つ前のv5.42.08-June 2013(microchip_solutions_v2013-06-15) をダウンロードしました。
でぇ、このバージョンの中に有る"ENC28J60.c/ENC28J60.h"ファイルを上のバージョン"V2016-11-07"
の中にコピーしました、但し、C18系からXC8コンパイラ用に変更しています。
(XC16/XC32もOKの様だが実験はXC8のみなので動作するかは不明です)

PS.その5(XC16編)”でPIC24EP256MC202を使い実験は行いました。

《MPLAB X プロジェクトの作成方法》

"V2016-11-07"バージョンのFrameworkから "tcpip"フォルダー以下全コピーして利用出来る様に
ダウンロードファイルに組み込んで置きました、そのダウンロードしたファイルを展開さ せると
[framework]───[tcpip]──[src]──[common]
[sysconf_inc]
TestPING.c
skI2CLCDlib.c
skI2CLCDlib.h
skI2Clib.c
skI2Clib.h
license_mla.pdf
と開かれると思います。
 
[Framework]フォルダー以下のヘッダファイルにソースファイルは使う使わない問わず全てコピー
  されているのでコンパイルを行うと全てコンパイルされるので時間が掛かります、それが嫌な人は
  必要なファイルのみコピーすれば良いでしょう。
PS.
  コンパイルは時間掛かるはぁ、MPLABは重くなるはぁで我慢出来ずに使うソースファイルのみに
  してしまいました。
  上のダウンロードファイルもそうしました、ですのでそれ以外のファイルを利用する場合は
  元のフォルダーからコピーしてこないとダメです。


@ MPLAB X で "New Project" を作成します、作成方法はこちらを参照下さい。
  (ここでは”18F26K22or18F25K22” で”ENC28J60.X”にて作成しています)

A ”ENC28J60.X”ディレクトリ内に上記ファイルをそのまま丸ごとコピーします。


MPLABファイル構成 B プ ロジェクトにファイルを取込んで下さい。
  "framework"と"sysconf_inc"の取り込み方のみ下に書いて置きます。
  その他のファイル("TestPING.c"等)は上リンクを見ましょう。

  取り込み終われば左図の様になります。
  
C 「Source Files」をマウスの右ボタンでク リックし、サブメニューから
  "Add Existing Items from Folders..."を選びます。

SourceFile取り込み1



「Add Files」のウインドウ画面が表示されるので、右上に有る[Add Folder...]ボタンをクリックします。
するとぉ、下図の画面が表示されます。

SouceFile取り込み2
ファイルのタイプ(T):を”C Source Files”にします。
"ENC28J60.X"フォルダーの"framework" を選択します。
[Select]ボタンをクリックします。

SouceFile取り込み3
とぉこの様になるので後は[Add]ボタンをクリックします。


D 「Header Files」をマウスの右ボタンでクリックし、サブメニューから
  "Add Existing Items from Folders..."を選びます。
  後の操作はCの「Source Files」と同じです が注意点は

SouceFile取り込み4
ファイルのタイプ(T):を”Header Files”にします。
"framework"と"sysconf_inc"の両方で2回操作しますよ。
取り込み完了です!


E ヘッダファイルの"framework"と"sysconf_inc"内にパスが通る様に設定を行います。
  MPLABのメニューバー[File]→[Project Properties]をクリックして「Project Properties」ウインドウ
  画面を表示させます。

XC8コンパイラ設定画面1
画面左側の"Categories:"から”XC8 compiler@部をクリックし ます。
画面右側が上図の様に表示されたら"Include directories"のA部 分のボタンをクリックします。

XC8コンパイラ設定画面2
この画面が表示されるので[Browes...]ボタンをク リックします。

XC8コンパイラ設定画面3
”ENC28J60.X”フォルダーの"framework" を選びます
[開く]ボタンをクリックします。

再び"Include directories"画面で[Browes...]ボ タンをクリック、
今度は、"sysconf_inc"を選び[開く]ボタンをクリックです、操作を2回行います。


XC8コンパイラ設定画面4
この様になるので後は[OK]ボタンをクリックします。

XC8コンパイラ設定画面5
この様に再び「Project Properties」ウインドウ画面に戻ってきます、
[OK]ボタンをクリックして終了です。

《tcpip関連ファイルについて》

"v4.5x"の古いバージョンでの説明ですがぁ、「TCP/IPス タックの概要や構成」については
後閑さんの電子工作実験室のページでこちらを 参考にしましょう、
又、「ENC28J60 とTCP/IPスタックの使い方」のページも一読する事をお勧めします。

"PIC18F25K22 or 18F26K22"を使った必要最小限のファイル構成一覧





使用メモリ:Program=10686byte Data=314byte

TestPING.c
IPアドレスでPINGのエコー要求と応 答を行 うメインのサンプル
18F2xK22
system.h システムクロックの定義をここで行う。
今回のクロック周波数は32MHzで設定しています。

system_config.h ENC28J60とのピン接続定義とコン パイラ情報の設定ファイル
18F2xK22
tcpip_config.h
TCP/IPスタックの構成定義と各モジュールの設定情報ファイル
ここでTCP/IPの使用するモジュールファイルを指定します。

skI2CLCDlib.c
I2C -LCDに表示を行う為のライブラリ
PIC18/24E
skI2CLCDlib.c I2C -LCDに表示を行う為のライブラリ用ヘッダファイル
PIC18/24E
skI2Clib.c
I2C通 信を行うライブラリ(LCD表示用)
PIC18
skI2Clib.h
I2C通 信を行うライブラリ用ヘッダファイル PIC18










ト層
arp.c
ARPプロトコルのモジュールファイル(RFC 826
Address Resolution Protocol (ARP) Client and Server
イー サネットMACアドレスとIPアドレス変換を提供します。

arp.h arp.c 用のヘッダファイル
icmp.c
ICMPプロトコルのモジュールファイル(RFC 792
Internet Control Message Protocol (ICMP) Server
「ping」 診断を提供します。

icmp.h icmp.c 用のヘッダファイル
ip.c
IPプロトコルのモジュールファイル(RFC 791
Internet Protocol (IP) Communications Layer
TCP、UDP、およびICMPメッセージの転送を提供します。

ip.h ip.c 用のヘッダファイル
stack_task.c
送受信パ ケットのチェックと受信パケットを其々の上位層に
渡す等のTCP/IPスタック全体の制御を行う。(AN833)

stack_task.h
stack_task.c 用のヘッダファイル
M
A
C
ENC28J60.c
ENC28J60(物理層)とSPI通信を行うドライバーファイル
(”その5(XC16編)”のファイルからXC8/XC16両方対応した
 ソースファイルとなっています。)

ENC28J60.h
ENC28J60.c用のヘッダファイル





tick.c
Timer0での定周期割り込みモジュール
経過時間を計測するのに用います。

helpers.c
マイクロチップTCP/IPスタックのヘルパー関数
delay.c
一般的な遅延ルーチンファイル(DelayMs)
※ このファイル構成は、PINGの送信と応答を行う為の必要最小限のTCP/IP通信ファイル構成です。
※ 上の橙色文字ファイルがデバイスやシステム等によ り変更するファイルとなります。
黄色背景のファイルは当サイトのオリジナルプログ ラムです。
※ ENC28J60.c/.hファイルは過去のバージョン(v2013-06-15) の物を利用しています。
  (ENC28J60のエラッタは"B7"までの回避策が対応されている様なあんばいです?)
  (尚、ENC28J60 Rev. B7 Silicon Errata情報はこちらです)

※ ”C:\microchip\mla\v2016_11_07\doc\help_mla_tcpip.jar” にヘルプマニュアルファイルが有ります。

TestPING.c
 ICMPモジュールを使い、PINGのエコー要求と応答を行うメインのサンプルです。
 次ページ”その2”にて動作実験を行います。

stack_task.c
 tcpipスタック関連のドキュメントはAN833を参照しましょう。

ENC28J60.c
 ENC28J60とSPI通信を行うドライバーですが、他のイーサーネットモジュールを使う場合は
 それ用のドライバーファイルとこのファイルを入れ替えればtcpipスタックは利用出来ると思います。

skI2CLCDlib.c
 skI2CLCDlib.h
 skI2Clib.c
 skI2Clib.h
 I2C通信LCDに表示を行う為のライブラリです、
 このファイルの内容は”秋月電子 I2C接続小型LCDモジュールに表示を行う”を参照下さい。

《tcpip_config.h》

アプリケーションオプション

"tcpip_config.h"には、自分が作成するTCP/IPスタックの各モジュールを簡単に構成できる様に
下記例の如く #defineで定義されているので自分が必要なモジュールのコメントを外すだけで必要な
ソースファイルがリンク される様になっています
例えば、"STACK_USE_DHCP_CLIENT"を生かせば"dhc.c/udp.c"のモジュールが追加されます。
(プログラムメモリ容量の削減の為に必要無い物はコメントにしましょう!)
//#define STACK_USE_UART            // IPアドレス表示とスタック設定にUARTを使用したアプリケーションデモ
//#define STACK_USE_UART2TCP_BRIDGE // UARTからTCPへのブリッジ アプリケーションのデモ
//#define STACK_USE_IP_GLEANING // arp -s でのIPアドレス変更に対応する実装
#define STACK_USE_ICMP_SERVER // ICMP(PING)はサーバ(Ping query応答)機能を実装する
#define STACK_USE_ICMP_CLIENT // ICMP(PING)はクライアント(送信)機能を実装する
//#define STACK_USE_HTTP2_SERVER // POST、Cookie、認証などを含む新しいHTTPサーバーの実装
//#define STACK_USE_AUTO_IP // リンクレイヤIPアドレス自動設定プロトコルの実装
//#define STACK_USE_DHCP_CLIENT // IPアドレス及びその他のパラメータを取得する為のDHCPライアント実装
//#define STACK_USE_DHCP_SERVER // シングルホストDHCPサーバの実装
//#define STACK_USE_FTP_SERVER // FTP サーバ (old)の実装
//#define STACK_USE_SMTP_CLIENT // SMTP クライアントの実装
    :
    :

ネットワークアドレス指定オプ ション

MY_DEFAULT_HOST_NAME
15文字までの半角英数字でホスト名を設定します。

MY_DEFAULT_MAC_BYTE
MACアドレスを設定します、00-04-A3-00 -00-00で赤色数値はMicrochipのベンダーIDなの でそのまま使い、ENC28J60は黒色数値部分を好きに設定しましょう。
今回は、PIC18なのでぇ00-04-A3-00-18-01としました。

MY_DEFAULT_IP_ADDR_BYTE
コマ ンドプロンプト画面を起動させ、”ipconfig /all”を実行させます。
下の様な感じで表示されていると思います。
※ この例は私のネットワークでの例ですので他の人はアドレス内容が異なるでしょう。
   接続固有の DNS サフィックス . . . . .:
説明. . . . . . . . . . . . . . . . .: Qualcomm Atheros AR9280 Wireless Network Adapter
物理アドレス. . . . . . . . . . . . .: xx-xx-xx-xx-xx-xx
DHCP 有効 . . . . . . . . . . . . . .: はい
自動構成有効. . . . . . . . . . . . .: はい
IPv4 アドレス . . . . . . . . . . . .: 192.168.3.3(優先)
サブネット マスク . . . . . . . . . .: 255.255.255.0
リース取得. . . . . . . . . . . . . .: 2017年4月19日 9:38:58
リースの有効期限. . . . . . . . . . .: 2017年4月30日 8:23:37
デフォルト ゲートウェイ . . . . . . .: 192.168.3.1
DHCP サーバー . . . . . . . . . . . .: 192.168.3.1
DNS サーバー. . . . . . . . . . . . .: 192.168.3.1
NetBIOS over TCP/IP . . . . . . . . .: 有効
ここのデフォルト ゲートウェイ[192.168.3.1]のアドレスで赤文字の所の数値を変えて
IPアドレスとして設定します、青文字(物により数値は変わりますよ)はそのままです。
今回は[192.168.3.105]としました、他のアドレスとダブらない様に。
DHCPクライアントモジュールを実装すればIPアドレスは割り当ててもらえるのですがぁ
今は手動で設定しましょう。

MY_DEFAULT_MASK_BYTE
上のサブ ネット マスク[255.255.255.0]の値をそのまま設定します。

《その他マイクロチップのイーサーネットモジュール》

RN―131
 秋月電子通商販売の「マイクロチップWi-Hi評価キット RN-131 Evaluation Platform
 802.11 b/g無線モジュールの評価キット、技適済みですがぁ、ちょっと高いです私には手が出ません。
 TCP/IPスタックを内蔵しているらしい、なのでここのライブラリは使えなさそう。
 PS. *1)
 2020/03現在上記は販売していない、マルツのこちらでは販売されています。
ENC624J600
 Strawberry Linux販売の「MOD-ENC624J600モジュール
 10/100base-T対応イーサネットコントローラ
 ここのライブラリは使えると思います。(ドライバーファイルは要変更だけどね)
 因みに、更に小さいモジュールSSOPタイプの「ENC28J60-H」も有ります。
PICにENC28J60を内蔵させた様なチップ
 18F66J60
 18F67J60
 18F87J60
 18F97J60
 32MX664F???H
 32MX764F???H
 32MX675F???H
 32MX775F???H
 これもサポートしてないよね、どういうことぉ?
 まあ、ここのライブラリで使えなくはないかな(ドライバーファイルは要変更)
 但し、パッケージがTQFP(私には半田付け無理)です。
 あ、PIC神様の「イーサネット内蔵PIC18とTCP/IPスタックの使い方」が参考になりそう。

《tcpip関連リンクサイ ト》

先ずは、下のリンクからイーサーネットとTCP/IPの概要を掴んでから実験に入る事をお勧めします。

・ 後閑さんの電子工作実験室の「TCP/IP通信プログラミング  Ver.2 」ページ
  マイコン(TCP/IPスタック)寄りな説明なので解り易いかも?

ITBOOKさんのイーサーネットペー ジ
  すべてのエンジニアのためのネットワーク解説サイトらしです。
・"ネットワークエンジニアとして” さんの「Ethernet LAN をはじめから」ページ
 ネットワークエンジニアに必要なネットワーク技術、Cisco/F5/Juniper技術を解説するサイトらしい。

・ "パソコン初心者講座"さんの「TCP/IPプロトコルとは」ページ
 IPアドレスやMACアドレスの話も解り易いのが書いて有ります。
・"ITmedia inc." さんの「第4回 TCP/IPプロトコルの概要 (1/5)」ページ
 企業さんのページっぽいです。
・"ASCII.jpxTECH"さんの"TCP/IPまるわかり"一覧の「通信の機能階層という考え方」ページ
 TCP/IPの各層でその層のプロトコル用ヘッダを追加しカプセル化して通信する話です。

・"@network Cisco・アライド実機で学ぶ"さんの「TCP/IP入門・無料ネットワークツール」ページ
 ネットワーク入門ならここが良いかもぉ、各層のヘッダフォーマット記述も有り。

・TCP/IP関連の標準プロトコル仕様はRFC(Request For Comment)という形でIETF(The Internet
 Engineering Task Force)が作成した物を日本語に翻訳したサイトがこちらこ ちらです。



リンク切れ見直し(*1) 2020/03/10


【きむ茶工房ガレージハウス】
Copyright (C) 2006-2020 Shigehiro Kimura All Rights Reserved.