【ENC28J60のSPIインターフェース】
ENC28J60のSPIインターフェースは、標準のSPIインターフェースの
「モード0,0」で直接接続できるようになっています。
したがってPICの場合にもPICのSPI制御ピンと直接接続することができます。
とくに、PICを5V動作させたときでも、ENC28J60の入力ピンは5V対応に
なっていますので直結ができます。
SPIの基本的な接続ですので、CS、SCK、SI、SOの4本の線で接続します。
モード0,0ですので基本的なタイミングは下図のようになります。
つまりSIピンの入力はSCKの立上りエッジで行われ、SOピンへの出力は
SCKの立下りエッジで行われます。
【SPI制御コマンド構成】
SPIインターフェースを通して制御する場合のデータのフォーマットは
下表のようにします。1バイトまたは2バイト構成のコマンドとなっています。
ビットフィールドのセット、クリアコマンドはETHグループのレジスタのみ有効
でMACグループ、MIIグループ、PHYレジスタ、バッファメモリには使えません。
略号 コマンド機能 Byte0 Byte1 命令コード パラメータ データ RCR 制御レジスタ読み出し 0 0 0 a a a a a N/A RBM バッファメモリ読み出し 0 0 1 1 1 0 1 0 N/A WCR 制御レジスタ書き込み 0 1 0 a a a a a d d d d d d d d WBM バッファメモリ書き込み 0 1 1 1 1 0 1 0 d d d d d d d d BFS ビットフィールドセット 1 0 0 a a a a a d d d d d d d d BFC ビットフィールドクリア 1 0 1 a a a a a d d d d d d d d SC システムコマンド、リセット 1 1 1 1 1 1 1 1 N/A
注) a:制御レジスタのアドレス d:8ビットのデータ
【SPI読み出し】
SPIコマンドで制御レジスタやバッファを読み出すときには、3種類のタイミングがあります。
(1) ETHグループのレジスタ読み出しタイミング
ETHグループレジスタの場合には、CSピンをLowにしてからRCRコマンドを
出力すると、ENC28J60のSOピンに直ぐにデータが出力されるので、いきなり
データ入力することができます。
(2) MACグループとMIIグループのレジスタの読み出しタイミング
MACグループ、MIIグループレジスタの場合には、CSをLowにしてRCRコマンドを
出力してからSOピンに出力されるまで時間がかかるため、ダミーで1回空読みを
する必要があります。
(3) イーサネットバッファの読み出しタイミング
SPIコマンドでイーサネットバッファを読み出すときのタイミングは、上記(1)のETHの
タイミングと同じですが、AUTOINCビットを1に設定していると内部のアドレスポインタ
が自動的に+1されますから、連続でSPI読み込み用のSCKを出力すれば連続読み出し
ができます。
【SPI書き込み】
SPIインターフェースから制御レジスタやイーサネットバッファへの書き込み
のときのタイミングは下記のようになります。
(1) 制御レジスタへの書き込み
制御レジスタへの書き込みは単純で、CSをLowにしてからWCRコマンドで
書き込めます。
(2) イーサネットバッファへの書き込み
バッファへの書き込みもAUTOINCビットがセットされていれば、内部アドレス
ポインタが自動的に+1されますので、連続的に書き込みデータを送信して
書き込むことができます。
【リセット制御】
SPIコマンドでソフトウェアリセットを行う場合には、単純にSCコマンドを送信
するだけです。この場合にはパラメータもありません。CSピンをHighにしたとき
リセット解除となります。