PICNIC

PICNICについて

■PICNICについて

1. PICNICの概要

2. PICNICのファームウェア

3. PICNICの使用方法

4. PICNICの専用制御プロトコル

 

→質問やお気づきの点はこちら

←目次へ戻る

2007年8月6日 18:17 更新

 

●PICNICの概要

PICNICとは特徴・回路図動作チェックに必要なものPICNIC仕様


1.1.1 PICNICとは?

PICNIC は、"PIC Network Interface Card" の略で、PICマイコン Microchip PIC16F877を利用した、Ethernet に接続する I/O ボードのキットです。従来のver.1キットと比較して、今回利用するver.2キットは、更に小型化され、700mm×100mmとなりました(写真1)。

→Microchip PICシリーズのリンク集はここから

<写真1> ネットワーク対応PICマイコンボード PICNIC ver.2

 

PICNICは、トライステート(TriState)社の製品で、秋月電子通商から購入することができます。

→トライステート(TriState)社のリンク集はここから

→秋月電子通商のリンク集はここから

このキットを用いて周辺機器接続用のインターフェースを用意し、PICマイコンのパラレルI/O をネットワーク経由で制御するようなアプリケーションプログラムを用意することで、機器電源の制御やセンサ情報の収集など、多様なシステム構築が容易に行えます。

ネットワーク経由でのパラレルI/Oの制御・監視は、PICマイコンのファームウェア上に実装された簡易httpサーバによって対応します。この機能によって、クライアント側(webブラウザ)はプログラミング不要となり、機種やOSを選びません。

ネットワークインターフェース制御(NIC)はEthernetを利用します。これによって、市販の安価なEthernet用ネットワーク機器(HUBなど)とケーブルを準備するだけで、全ての実験環境が構築できます。なお、外部ネットワーク(WAN、インターネット接続)との接続のためには、構内LANやADSL、CATVケーブルインターネット網への接続が必要となります。

他方、PICNICの専用制御プロトコルをクライアント側に実装し、webブラウザを使用しない専用システムの構築を行うことも可能です。制御用ライブラリはTriState社のホームページからダウンロードすることが可能です。


1.1.2 特徴・回路図

Microchip社製 PIC16F877(RISC Enhanced x16、DIP300/40pin CMOS Flash 8bitマイクロコントローラ、通称87xシリーズ)を使用。→データーシート(オリジナル)はここから

Realtek Semiconductor社製 NE2000(DP8390)互換 RTL-8019AS(10BASE-T 100pin/QFP one-chip Ethernetコントローラ、通称カニチップ)を使用。

・主要LSI、チップ抵抗・コンデンサは基板部品面に予めハンダ付け済み。キット組み立てはコネクタ類とDIP-ICソケット、入出力コネクタ、LEDなどの実装を行うのみで完了し、簡単です。

<図1> 機能ブロック図

<図2> 回路図(※TriState社データシートから転載)
ここをクリックしてPDFファイルを表示
※CreativeCommonsライセンス付与に従いリンク削除(2007/08/06)

※付記

PIC16F877コントローラは、RAポートをアナログ入力ピン、RBポートを汎用(ディジタル)I/Oピンとしてボード外へ出しています。入出力端子は回路図中CN2コネクタ(100milピッチ26ピン)。

・アナログ入力ピンRA5には、基板上に実装された摂氏℃リニアな温度センサIC(LM35DZ)の出力(温度係数+10.0mV/℃)が接続されています。これにより、ボード周辺の温度(大まかな室温)をモニタできるようになっています。

LCD液晶ディスプレイパネル・モジュール(オプション)をCN5コネクタへ接続すると、ディジタル出力ポートRBをCN2コネクタで共有して使用するため、外部で利用可能なポート数は減少します。

シリアルEEPROM 93C46(U2) には、本PICNICのEthernetNICコントローラ向けの、唯一無二のMACアドレスが予め書き込まれています。

・基板上ジャンパSW JP2 は、電源投入時に、ファームウェアの動作を「通常モード」か「ブートストラップモード(初期設定)」のどちらで開始するかを選択するものです。


1.1.3 動作チェックに必要なもの

・(ACアダプタなどの)DC12V電源(秋月電子のDC12Vアダプタを推奨

・10BASE-T NICを有するパソコン(ブートストラップモードでのチェック時には、RS-232Cシリアルインターフェースによる接続が必要になります)(写真2)

Ethernet ハブ(HUB)装置、とストレートケーブル(2本)。

・1対1でのみ接続する場合はクロスケーブルでも使用可能。

・Webブラウザ

・ファームウェア開発時には、MPLAB(MPASM)開発環境とPICライタ装置が必要。

・クライアント側ドライバを用いた開発時には、Visual BASIC、Visual C++、GNU gcc などの言語開発系が必要。

<写真2> パソコンを接続し、動作チェックを行っている様子

正常に動作していると、ブラウザから接続して、このようなページが現れます。


1.1.4 PICNIC仕様

・通信方式:Ethernet 10BASE-T

・アクセス方式:CSMA/CD

・Ethernet NIC:RTL-8019AS(NE2000コンパチブル)

・制御CPU:PIC16F877-20/P(20MHzクロック駆動)

・内蔵インターフェース:
 (a)ディジタルI/O:出力4ch、入力4ch(LCDモジュール使用時には出力6ch、入力2ch)
 (b)アナログI/O:入力4ch(0-5V、分解能10bit)+温度センサ用1ch(測定範囲 0-100℃)
 (c)シリアルI/O:1ch(RS-232C、フロー制御なし)

・ファーム内蔵プロトコル:ARP、DHCP、ICMP、IP、UDP、TCP、HTTP(GETメソッドのみ)
・IP最大コネクション数:5

・通信バッファ:16Kバイト(EthernetNIC内部のリングバッファを共用)

・デフォルトIPアドレス:192.168.0.200/24

・周辺機能:RS-232Cシリアルインターフェイス(SP232ACP)、温度センサ(LM35DZ)、16x2 LCD表示モジュール(SC1602B、オプション)

・LED表示:I/Oポート出力ポート状態x4ch、Ethernet-NIC状態LEDx3(TX,RX,LINK)

・電源:DC 8-12V 100mA

●PICNICのファームウェア

ファームウェア内蔵プロトコルスタックファームウェアのダウンロードファームウェアの概要ファームウェアの初期設定シーケンス


1.2.1 ファームウェア内蔵プロトコルスタック

本PICNICのファームウェアに実装されているプロトコルスタックは、以下の通りです。

・Ethernetフレーム送受信処理
・ARP受信処理
・IP受信処理
・ICMP受信処理
・UDP受信処理
・TCP受信処理
・HTTP受信処理


1.2.2 ファームウェアのダウンロード

PICNIC ver.2用のMPASMアセンブラ向けファームウェア(ver1.2)は以下からダウンロードしてください

アセンブリソースファイル(v12.asm)

アセンブル済みHEXファイル(v12.hex)


1.2.3 ファームウェアの概要

ファームウェア全体では7380行もコード量があります。
全てについての詳細な説明は別稿に譲りますが、大まかなブロックは以下のように構成されています。

21〜37行目:各種定数の定義
42〜53行目:ワーキングメモリ領域
61〜466行目:プロトコルスタック向け各種環境変数の定義

470行目:プログラム開始点(ORG 0)
482〜621行目:割り込みルーチン(受信処理、タイムアウト)
628〜815行目:各種機能関数(TCPフレーム番号管理、エラー復帰)

820〜889行目:メインループ

902〜1018行目:Ethernetフレーム受信処理(RTL8019ASバッファ管理)
1025〜1068行目:ARPプロトコル処理
1172〜1341行目:IPプロトコル処理(受信バッファ管理)
1349〜1434行目:ICMPプロトコル処理
1441〜1565行目:UDPプロトコル処理(パラレルポート出力管理)
1571〜1682行目:DHCP(BOOTP)プロトコル処理(IPアドレス取得関係)
1690〜2323行目:TCPプロトコル処理(サーバ機能のみ、パケット出力ルーチン含む)

2328〜2393行目:A/D変換入力処理
2398〜2500行目:入出力状態の前処理ルーチン
2504〜2558行目:ショートメッセージ解析処理
2563〜2764行目:ネットワークソケットの作成、チェックサム計算

2771〜3032行目:RTL8019ASの初期化関係
3037〜3214行目:チェックサム計算、パケット送信処理(NICレベル)
3221〜3344行目:Ethernetフレーム、IPフレーム作成

3352〜3578行目:UDP→パラレルI/O制御、A/D変換機能
3584〜3560行目:UDPチェックサム計算
3655〜3873行目:シリアルインターフェース制御

3879〜4024行目:ソケット管理
4030〜4290行目:Ethernetブロードキャスト処理

4295〜4369行目:EEPROMへのデータ書き込み関係
4555〜4577行目:EEPROM初期化
6063〜6130行目:EEPROM関係ライブラリ
7266〜7306行目:EEPROMデフォルト値セット

4379〜4548行目:URL指定CGI解析処理
4583〜4643行目:URL引数によるパラレルI/O出力値の変更

4651〜4919行目:スタートアップルーチン(電源投入時設定関係)
4625〜5036行目:LCDディスプレイ関係ライブラリ
5042〜5292行目:各種演算ライブラリ関数群

5297〜5404行目:ブートストラップモード・初期化ルーチン
5411〜5944行目:シリアル端末操作コマンド関係
7015〜7054行目:ブートストラップモード・端末表示
7311〜7374行目:ブートストラップモード・コマンド解析用データ

5952〜6056行目:現在のソケットステータスの通知処理(現在未使用)

6139〜6266行目:取得したIPアドレスをLCDパネルへ表示する処理
6431〜6697行目:DHCPサーバからのIPアドレス取得処理

6273〜6424行目:シリアルポート→UDP送信処理
6703〜7009行目:UDP受信→シリアルポート出力、LCDパネル表示

7061〜7258行目:WebブラウザHTML形式の応答メッセージ・形式格納エリア


これらのうち、既に実装されている各種プロトコルスタック自体は、ユーザ側で変更する場面はほとんどありません。制御のためにwebブラウザに表示されるページの変更は、7061行目から始まる、HTML形式の応答メッセージ・形式格納エリアの部分を改造することになります。

Ethernetフレーム長の制限のため、1回で全てのHTML形式テキストを送出することができないため、4つのブロック(ESTAB0からESTAB9に渡る4トランジション遷移)に分割して送出しています。この送出処理が、1690行目からのTCPパケット処理のシーケンサとして実装されています。

Ethernetケーブルの切断、ネットワークの途絶、各種プロトコル処理中のフリーズ状態からの回復のため、タイマ割り込みルーチン内には、自動リセット機能が実装されています。例えばフリーズの後、約15秒後にTCPのLISTEN状態に強制的に戻すように設計されています。

HTTPプロトコルのGETメソッドにあたる部分だけが実装されています。
簡易HTTPサーバとして存在しており、webブラウザからのリクエストにより、まず送られたURL中のパラメータ(?の後)を解析し、PIC内部のEEPROMに制御情報を保存、そして各種の外部インターフェースの制御を行います。その後、現在のPICNICの情報(上記HTMLテキスト)をブラウザへ送出します。


1.2.4 ファームウェアの初期設定シーケンス

ファームウェアのスタートアップルーチン(電源投入時設定関係、4651行目〜)のシーケンスは以下のようになっています。

(1)内蔵EEPROMから初期設定に必要なデータ(IPアドレス設定、など)をRAMにコピー

(2)LCD液晶ディスプレイパネルを初期化

(3)EthernetNIC(RTL8019AS)を初期化し、CONFIGレジスタをNICへロード

(4)外部シリアルEEPROM 93C46 から、MACアドレスを取得

(5)(4)で取得したMACアドレスをNICのPARレジスタへ書き込み

(6)動作モード(通常 or ブートストラップ)のジャンパSW状態確認。その後、選択されたモードのメインルーティンへ突入。

(7)DHCPサーバからのIPアドレス取得(IP=0.0.0.0)が必要なら、ブロードキャストでDHCPプロトコルのDISCOVERメッセージを送出する。

※上記の処理が終了した後、フレーム受信待ち状態となる。

●PICNICの使用方法

webブラウザでのリモートI/O制御LCD液晶モジュール専用制御プロトコルを用いたテストプログラム


1.3.1 webブラウザでのリモートI/O制御

図3に、Ethernet経由にて、Microsoft Internet ExplorerでPICNICに割り当てられたIPアドレスへ接続した画面を示します。
この例では、グローバルIPアドレス:160.252.131.19/25として接続されています。

<図3> webブラウザを用いたリモートI/O制御画面の例(HTMLバージョン)

リモートI/O制御画面は、大まかに次の3つのセクションに分かれています。

(1)I/O Portsセクション

現在のI/Oポートの状態が表示されます。表示されている値は、リアルタイムには更新されないので、現在の状態の取得には、ブラウザの「リロード」ボタンを押して、再取得します。あるいは、セクション最下段の、[Reload]ボタンをクリックします。

ポート状態としては、アナログ入力ポート(RA0からRA3)、温度センサ値(RA5、摂氏値)、ディジタルI/Oポートの入出力状態が表示されています。

出力値の変更は、RB2からRB7のOUTと示されているポートのみ制御可能です。
制御値は、[H]または[L]のボタンをクリックすると、その値へ変更されます。

サーバ側では仮想的な modify.cgiというCGIプログラムが応答しているものとし、
URL中のパラメータとして、出力ポート番号=値 という引数を渡すことで、
出力が変更されます。
例えば、このPICNICの設定の場合、URLとして
http://160.252.131.19/modify.cgi?RB7=H
が指定されると、出力ポート RB7 が High に変更されます。
基板上の当該LEDも点灯されます。

I/Oポート制御のためのURL指定について以下にまとめます。

[現在値のReload]
http://160.252.131.19/modify.cgi?

[例:出力ポートRB7 -> Hへ変更]
http://160.252.131.19/modify.cgi?RB7=H

[例:出力ポートRB7 -> Lへ変更]
http://160.252.131.19/modify.cgi?RB7=L


(2)Configurationセクション

現在設定されいるIPアドレス、ネットマスク値、ゲートウェイIPアドレス、各種機能用のポート番号が表示されています。

図3の表示例では、IPアドレス:160.252.131.19、ネットマスク25bit、ゲートウェイ:160.252.131.1 として設定されていることがわかります。

設定値の変更は、該当するテキストフィールドに数値を入力して、[Save]ボタンをクリックし、電源を切断・再投入するか、リセットスイッチを押す必要があります。

[Default]ボタンをクリックすると、ローカルIPセグメント用の設定値である、IPアドレス:192.168.0.200、ネットマスク24bitというデフォルト値が設定されます。

IPアドレスとして 0.0.0.0 を設定することで、DHCP(Dynamic Host Configuration Protocol)サーバからIPアドレス取得を行うモードとなります。

ネットワーク設定のためのURL指定について以下にまとめます。

[default値]
http://160.252.131.19/submit.cgi?00b=192.168.0.200&04b=255.255.255.0&08b=0.0.0.0
&10w=80&12w=0&14w=10001&16w=10002

[初期値に戻すには]
http://160.252.131.19/submit.cgi?INIT=Default

 

(3)Statusセクション

パケット数と現在のIPアドレス値が表示されます。なお、IPアドレス値については、DHCP取得の時にのみこの表示の意味があります。


1.3.2 LCD液晶モジュール

LCD液晶パネルが接続されている場合、現在のIPアドレス設定値が表示されます。DHCPサーバからIPアドレス取得するモードであり、かつ取得が成功した場合、取得したIPアドレスが表示されます。

※注意:LCD Port UDP:#に値が設定されていない(0がセット)場合、LCDパネルには■■■■■が表示されるので注意。IPアドレスの表示には、この値を 10000 などとしておくこと。

LCDパネルを使用しない場合:
RB0〜RB3が入力、RB4〜RB7が出力(ユーザ使用可能)

LCDパネルを使用する場合:
RB0,RB1が入力、RB2〜RB7がLCD制御出力(ユーザ使用可能ポートと共用)


1.3.3 専用制御プロトコルを用いたテストプログラム

Windows上で稼動する、専用制御プロトコルを用いたテストプログラム(pictest.exe)がTriState社webサイトから配布されています。

http://www.tristate.ne.jp/picnic/menu.html

ここから、サンプルプログラム(pictest)+インストーラのLZH形式ファイルをダウンロード
http://www.tristate.ne.jp/picnic/pictest.lzh

その後、Lhasaなどのツールで解凍、setup.exeを実行し、セットアップします。

[スタート]→[プログラム]からPICNIC test を実行し、IPアドレス、取得時間を表示するLCDパネルのポート番号をセットし、[接続]ボタンをクリックすると、設定されている取得間隔毎にPICNIC側へ接続を行い、現在の入出力状態を表示します。PICNICのLCDパネルの第2行には、pictestによって接続・取得された日時が表示されます。

<図4> テストプログラムによるリモートI/Oの状態取得の例

●PICNICの専用制御プロトコル

以下のTriState社webサイトから各種プラットフォーム・言語用の制御APIドライバがダウンロード可能です。

上述の、1.3.3 テストプログラム(pictest.exe)も、Windows上のPICNIC.DLLライブラリとVisual C++にて開発されたものです。

この演習では、専用制御プロトコルは対象としていません。各自で研究下さい。

http://www.tristate.ne.jp/picnic/menu.html

信州大学インターネット大学院

Creative Commons License

IT技術演習(院)−PICNIC− by Katsumi WASAKI is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 2.1 Japan License.