ESP-IDFを使ってみる
Ethernet通信(SPI)
ESP32ユーザがENC28J60のドライバーを公開し、2020年2月11日にESP-IDF本体にマージされました。
こ
ちらにサンプルと結線が公開されています。
ENC28J60は非常に電力を消費するデバイスなので、供給電源についての注意が色々と書かれています。
ESP32開発ボードの3.3VからENC28J60に電源を供給するよりも、
5Vからレギュレータ経由でENC28J60に電力を供給した方がいいみたいです。
ENC28J60は非推奨となっていて、ESP-IDF V5.4からは公式のサンプルから削除されました。
モジュールとの結線はmenuconfigで変更することができます。


最初、20cmのジャンパーケーブルを使ったらエラーとなりました。
そこで、10cmのジャンパーケーブルに変えたら正常に動きました。

ENC28J60にはMACアドレスが書き込まれていません。
2台以上のENC28J60を同時に使う場合は、こ
ちらを変更する必要が有ります。
ENC28J60のモジュールには5V仕様の物と、3.3V仕様の物が有ります。
ESP32では3.3V仕様の物しか使えません。
左/中:3.3V仕様 右:5V仕様

ENC28J60チップ自体は3.3V仕様です。
5Vモジュールには裏面に5V→3.3Vのレギュレータが実装されています。

Linuxマシンからpingを打ち続けてみましたが、途中でUnreachableになってしまいました。
やはりESP32開発ボードからの3.3V給電では、無理が有るのかもしれません。

ESP-IDFのV4.3からESP32-S2のサポートが追加されました。
このチップにはEMAC(Ethernet Media Access Controller)が搭載されていないので、
MII または RMII インターフェイスの有線 LAN モジュールが使えません。
そこで、W5500のSPI Ethernetモジュールが正式にサポートされました。
W5500はハードウェアレベルでTCP/IPスタックをサポートしています。
Arduinoなどで使うには便利はチップです。
ESP-IDFはソフトウェアコンポーネントとしてTCP/IPスタック(lwip)を組み込んでいるので、W5500のMACRAWモード機能
を使用しています。
こ
ちらのサンプルを使って、ESP32で試してみました。
W5500を使う場合、menuconfigで以下の設定を行います。
ESP-IDF Version4.4から、Ethernet関連のメニュー項目が大幅に変わっています。

SPIのGPIOは好きなGPIOを使うことができます。

ちゃんとルーターからアドレスが取れました。

但し、SPIクロックを30MHzにするとこのようなエラーになります。
これはPHY側の問題だと思います。

このモジュールは固有のMACアドレスを持っていません。
MACアドレスは外部から与える仕様ですが、ESP-IDFで使う場合、以下の様に、
WiFi-STAのMACアドレスの最初のオクテットだけ0xC8→0xCAに変えて、モジュールに与えるので、
1つのNetwork上で複数のW5500を使うときも、何も考える必要ありません。
[WiFi-STA] mac=c8-c9-a3-cf-10-c4
[W5500] mac=ca-c9-a3-cf-10-c4
W5500モジュールには2つのタイプが有りますが、どちらも問題なく動きます。
どちらも$3程度で入手することができます。

SPIのPHYとしてこれらを使うことができますが、モジュールとして入手できるのはW5500だけです。
DM9051もKSZ8851もチップ単体は入手できますが、BreakOutモジュールは見たことが有りません。
->DM9051のBreakOutを見つけましたが、$20とバカ高いです。

続く...