【ENC28J60のメモリ構成】
ENC28J60は内部に下記の3種類のRAMメモリを内蔵しています。
つまり制御レジスタも含めてすべてRAMで構成されていますので、
リセット後は必ず制御レジスタなどの初期設定を行わなければなりません。
(1) 制御レジスタ
制御レジスタはENC28J60デバイスの構成設定や動作の制御、状態の
読み出しに使うレジスタ群で、SPIインターフェース経由で直接ホストから
読み書きができます。
(2) イーサネットバッファ
イーサネットバッファは、送信と受信パケット用のデータ格納用バッファ
として使われるメモリで、送受信のバッファサイズは制御レジスタで設定
できます。このバッファへのアクセスは、制御コマンドにより制御レジスタ
経由で行います。
(3) PHYレジスタ
PHYレジスタはPHYモジュールの制御や状態読み出しに使います。この
レジスタは直接SPIインターフェースから読み書きすることはできず、MAC
モジュールに組み込まれたMII(Media Independent Interface)を介して
読み書きします。
これらのメモリ構成は下図のようになっています。
【制御レジスタ】
制御レジスタはホストマイコンからの制御を行う際に使用するレジスタで
SPIインターフェース経由で読み書きします。
32バイトごとの4バンクに分かれていて、ECON1レジスタにあるBSEL0と
BSEL1のバンク選択ビットで指定します。
ECON1レジスタはバンク共通部に配置されていて、実態は1個しかないレジスタ
ですのでどのバンクからもアクセスできるようになっています。
この共通部には下記の5個のレジスタが配置されています。
EIE : 割り込み許可レジスタ
EIR : 割り込みフラグレジスタ
ESTAT : 状態フラグレジスタ
ECON1 : 動作モード設定レジスタ
ECON2 : 動作モード設定レジスタ
その他全体の制御レジスタは下図のようになります。このレジスタ群は
名称によって下記の3種類に分けらられます。大部分のレジスタが何らかの
アドレスポインタやテーブルデータとなります。
Exxxxx : ETHグループレジスタ
MAxxx : MACグループレジスタ
MIxxx : MIIグループレジスタ
ECON1とECON2レジスタで大部分の設定制御を行いますので、その内容を
下記に示します。
【イーサネットバッファ】
イーサネットバッファはパケットの送受信バッファとして使われ、全体で
8kバイトの容量があります。
送信、受信のサイズ振り分けはSPIからの制御により自由に設定できます。
<受信バッファ>
受信バッファは循環バッファを構成するようになっていてハードウェアで
制御されます。
バッファサイズは、下記の開始と終了アドレスで指定します。
ERXST(ERXSTH:ERXSTL)で開始番地を指定
ERXND(ERXNDH:ERXNDL)で終了番地を指定
読み書きのポインタアドレスがERXNDより大きくなると自動的にポインタ
がERXSTに変更されバッファの最初を示すように変更されます。
読み書きのポインタは下記が使われます。
ERXWRPT(ERXWRPTH:ERXWRPTL) : 書き込み用
ERXRDPT(ERXRDPTH:ERXRDPTL) : 読み出し用
<送信バッファ>
送信バッファは当然のことながら、受信バッファとダブらない位置に
下記レジスタで設定します。
ETXST(ETXSTH:ETXSTL) : 送信バッファ開始番地
ETXND(ETXNDH:ETXNDL) : 送信バッファ終了番地
<DMAアクセス>
内蔵DMAコントローラは、チェックサム計算を行うときには、バッファから
連続的にデータを読み出します。受信バッファの場合はバッファの最後で
自動的に折り返します。
【PHYレジスタ】
PHYレジスタは、PHYモジュールの動作モード設定と状態モニタ用のレジスタ
です。PHYレジスタは他のRAMメモリと異なりSPIインターフェースから直接
読み書きすることはできません。
MAC制御レジスタを使って間接的に読み書きします。
このレジスタ群には下記のレジスタがあります。
PHCON1 : PHYの動作モード設定レジスタ
PHSTAT1 : PHY状態レジスタ
PHID1 : PHY識別レジスタ
PHID2 : PHY識別レジスタ
PHCON2 : PHY動作モード設定レジスタ
PHSTAT2 : PHY状態レジスタ
PHIE : 割り込み許可
PHIR : 割り込みフラグ
PHLCON :