ESP-IDFを使ってみる

Ethernet通信(SPI)


ESP32ユーザがENC28J60のドライバーを公開し、2020年2月11日にESP-IDF本体にマージされました。
こ ちらにサンプルと結線が公開されています。
ENC28J60は非常に電力を消費するデバイスなので、供給電源についての注意が色々と書かれています。
ESP32開発ボードの3.3VからENC28J60に電源を供給するよりも、
十分パワーのある外部3.3V電源からESP32開発ボードとENC28J60に電力を供給した方がいいみたいです。
モジュールとの結線は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側の問題だと思います。


W5500モジュールには2つのタイプが有りますが、どちらも問題なく動きます。
どちらも$3程度で入手することができます。

このモジュールは固有の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


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


続く...