<SPIイーサネットモジュール ENC28J60>

MICROCHIP社からENC28J60という、SPI接続のイーサネットコントローラ(MAC+PHY)が発売されました。10BASET-Tですので、速度は早くありませんが、SPIインターフェイスでマイコンと接続できるのが特徴です。

SPIインターフェイスは、SO、SI、SCK、CSの4本で構成され、速度もENC28J60の場合は8MHz-10MHzでマイコンと接続することが出来ます。SPIはAVR、PIC、ARM、H8などのマイコンに標準的なインターフェイスですので、手軽にマイコンと接続出来ます。10BASET-TのイーサネットコントローラとしてはRTL8019ASなどが有名ですが、こちらはデータバス接続となりますので、20本近くの配線が必要になりますので、ピン数の少ないマイコンには荷が重過ぎます。

ENC28J60には10BASET-TのPHYが内蔵されていて、クリスタル、パルストランス、R/Cなどを外付けするだけで動作します。小規模なマイコンボードで、安価で簡単にイーサネットが使用できるように、SPIイーサーネットモジュール基板を開発しました。

トランス、LED*2を内蔵したRJ45コネクタを使用
<スペック>
動作電源 +3.3V
動作電流 250mA+
サイズ
(誤差含む)
基板:31.5mmx20.5mm
(36.2mmx20.5mm RJ45コネクタ込み)
高さ 28mm
インターフェイス SPI(SO,SI,SCK,CS)+WOL+INT
SPIクロック 8MHz-10MHz
PHY 10BASET-T(IEEE 802.3)
ENC28J60詳細情報(MICROCHIP HP)
回路図(PDF)ダウンロード
キットの入手はこちら

<製作>

キットが届きましたら部品を確認してください。
部品 備考
専用プリント基板 1 ENC28J60/SS 実装済み ENC28J60のシリコンバージョンがB7になりました
トランス,LED内蔵RJ45コネクタ 1 10/100BASET対応(J00-0065)
クリスタル 1 25MHz
タンタルコンデンサ 10uF/10V 2 極性あり
チップコンデンサ 0.01uF 1  
チップコンデンサ 22pF 2  
チップコンデンサ 0.1uF 6  
チップ抵抗 2.7KΩ or 2.3K 1 272(2701) or 232(シリコンB7は2.3Kになります)
チップ抵抗 49.9Ω 4 49R9
チップ抵抗 100KΩ 1 104
チップ抵抗 180Ω 2 181
チップビーズ 1 黒っぽい色をしていて、チップコンデンサより厚みがある
1x5ピンヘッダ 2  
極細半田 1  

20-30W程度の先端の細い半田ごて、ピンセット、ルーペ(虫眼鏡)、はんだを用意してください。
チップ部品のはんだ付けは、片側のランドにはんだを盛っておき、半田ごてではんだを溶かしながら、ピンセットでチップ部品を固定します。
ピンセットでチップ部品を飛ばしたりしないように注意してください。

写真の様に半田付けします。

画面中央下の灰色の部品はチップビーズ(FB)です。
特に値指定の無い部品は全て0.1uFチップコンデンサです。
2.7KΩの代わりに2.3KΩが入っているキットがあります。

タンタルコンデンサ10uF(黄色)は極性がありますので、取り付ける向きに注意してください。
クリスタルは裏面からの取り付けになります。

最後にRJ45コネクタと1x5ピンヘッダを取り付けて完成です。

<mini EZ-ARM7 + uIP-0.9>

実際にmini EZ-ARM7とSPIイーサネットを使用してWEBサーバーを動かしてみました。
mini EZ-ARM7はフラッシュROMが512Kbyte、SRAMが32Kbyteありますので、RTOSのTOPPERS+TINTなどの選択肢もあるのですが、今回はとても小さくてコンパクトなオープンソースTCP/IPスタックであるuIPを使用しました。

uIPはスエーデンのAdam Dunkel氏が開発した組み込み向けのオープンソースTCP/IPスタックです。TCP/IPスタックの多くはBSDのソケットとして実装されますが、uIPはワークRAMを減らすためにポーリングベースのイベントドリブン型として実装されています。
従来のソケットインターフェイス型のプログラムになれている方にはちょっととっつきにくいかもしれませんが、uIP上に実装したhttpサーバー、smtpメールクライアント、telnetクライアント/サーバなどがサンプルとして提供されていますので参考になります。

uIPを実装するためには、ENC28J60でイーサネットのパケットを受信/送信する関数が必要になります。インターネット上を探したところ、Pascal Stang氏の開発されているAVR用のライブラリ「Procon AVRlib」にCで記述されたパケット送受信プログラムが公開されていますので、一部修正して使用しました。

mini EZ-ARM7とSPIイーサネットモジュールの接続ですが、LPC2138にはSPIコントローラとSSPコントローラの2つが実装されています。どちらを使用しても接続することが出来るのですが、今回はSSPを使用することにしました。現在のENC28J60(Rev.B4 Silicon)にはSPIのクロックを8MHz-10MHzに設定して使用しなくてはならないエラッタ(バグ)があります(シリコンB7ではこのバグは修正されています)。SPIコントローラを使用する場合58.9MHz/8=7.37MHzとなり、若干推奨のクロックより低くなってしまいます。SSPを使用すれば58.9MHz/6=9.81MHzを使用できます。SSPはSPIに8フレームの送受信用のFIFOバッファを付加して高機能になっています。

配線表

SPIイーサネット側 mini EZ-ARM7側
+3.3 +3V3(CN1-15/16)
GND GND(CN1-19/20)
SI MOSI1(CN1-4)
SO MISO1(CN1-3)
SCK SCK1(CN2-19)
CS SSEL1(CN1-5)

実際にWEBサーバーとして動作している状態のスクリーンショットです。

uIP-0.9 ソースコード&hexファイルダウンロード

lpc_2138ディレクトリの下にあるuip.hexファイルをmini EZ-ARM7に書き込みます。
デフォルト設定ではIPアドレスが192.168.1.12になっていますので、ネットワーク環境によってはソースコードを適宜書き換えて再コンパイルする必要があります。


<EZ-ARM7 + uIP-0.9>

mini EZ-ARM7のLPC2138と異なり、LPC2214にはSSPがありません。ですのでSPI1を使用してECN28J60と接続します。この場合SPIクロックが7.37MHzとなり8MHz以下になるため、エラッタの基準を満たしませんが、実際に使用して特に不都合は発生しませんでした。
(シリコンバージョンB7ではこのエラッタは解消されています。)

配線表

SPIイーサネット側 EZ-ARM7側
+3.3 +3V3(CN3-2)
GND GND(CN3-1)
SI MOSI0(CN3-24)
SO MISO0(CN3-18)
SCK SCK0(CN3-16)
CS P3.15(CN3-15)

注意:SSEL0(CN3-25)は+3V3に接続する。
(LPC2214の仕様でSPIマスタ動作時にはSSELはプルアップする必要あり)

ソースコードは上記のmini EZ-ARM7用と共通です。lpcディレクトリの下にあるuip.hexをEZ-ARM7に書き込みます。
デフォルト設定ではIPアドレスが192.168.1.12になっていますので、ネットワーク環境によってはソースコードを適宜書き換えて再コンパイルする必要があります。


<AVR(MEGA168) + uIP-0.6>

MEGA168はフラッシュ16Kbyte、SRAM 1KbyteのAVRマイコンです。
さすがにARM7と比べるとROMもRAMも少ないため上記と同じサンプルプログラムを動かすのは無理があります。
ですので、メモリーの使用量が少ない古いバージョンのuIP-0.6を使用することにしました。
AVR用にuIPをポーティングしているサイトがあります。そこにAVRにポーティングされた古いバージョンのuIP-0.6がありますので、これを使用します。

MEGA168はSPIコントローラを内蔵していますので、ENC28J60との接続にはこれを使用します。このSPIコントローラはCPUクロック÷2の速度で使用できます。SPIの動作クロックを8MHz以上にするためには、MEGA168を16MHz以上で動作させる必要があります。MEGA168の内蔵R/Cクロックは8MHzですので、20MHzのセラロックを外付けします。MEGA168は3.3V動作では10MHzまでですので、5Vで動作させます。ENC28J60は3.3V電源が必要ですので、別途レギュレータで5V->3.3Vを作ります。


基板の裏面に3.3Vレギュレータが実装されている。
デバッグ用のメッセージプリントのためにRS232Cレベルコンバータを介してPCと接続。

配線表

SPIイーサネット側 MEGA168側
+3.3 VCC(PIN7)
GND GND(PIN8)
SI PB3/MOSI(PIN17)
SO PB4/MISO(PIN18)
SCK PB5/SCK(PIN19)
CS PB0(PIN14)

注意:20MHzセラロックと+3.3V用レギュレータが必要です

uIP-0.6 ソースコード&hexファイルダウンロード

uip.hexファイルをMEGA168に書き込みます。MEGA168を外部セラロックで動作させるためにフューズビットの書き込み(Low:11010110)を行います。(avrezusb -fl11010110)
デフォルト設定ではIPアドレスが192.168.1.12になっていますので、ネットワーク環境によってはソースコードを適宜書き換えて再コンパイルする必要があります。

容量の関係でサンプルプログラムはWEBではありません。ポート80番でコネクトして、何らかのデータを送ると"ok"が返ってくるという単純なものです。動作確認にはtelnetで80ポートに接続してデータを送信(Enter)します。"ok"が返ってくれば正常です。