2018年3月9日金曜日
ESP32のEthernet (有線internet接続)には、
当初から期待していて、
AliExpressに売っている
LAN8720 PHYモジュールを買ってみて試したが
上手く行かなかった。
原因は、ESP32のEthenetモジュールを使用するのに、
50MHzのPHYのクロックを GPIO0に入力する必要があること。
ご存知の通り GPIO0は、起動時にHighにしたり、
Lowにしたりすることで 通常起動モードと
ファームウェア書換モードの切り替えに
使用する。 つまり起動時に50MHzのクロックを
止める機能が必要になる。
実際、Olimexの
ESP32-GATEWAYボード
の回路では、そのようになっている。
その時はLAN8720 PHYモジュールの使用を諦め、
ESP-GATEWAYボードで実験を行い、
lwIPが動くことなど確認していた。
今回、ESP32でEthernetを使えるボードを
自分で作ろうと思い、調べ直すと
ESP32 arduinoに
ETH_LAN8720_internal_clockとか言う
サンプルプログラムがある。
GPIO17からPHY用の50MHzを出力できるらしい。
これならLAN8720 PHYモジュールを改造して実験できるかも
しれないと試したら出来たので報告する。
まず、LAN8720モジュールのクロックを止める必要がある。
パターンカットでいけるかと思ったが、パターンが見えない。
回路図を見て、
R12,R14から追っていけばわかりそうだが、
部品名が書いてないのでどれがR12,14だかわからない。
あきらめて発振器を取り外すことにする。
はんだごて2本あれば行けそうだが、
何故か1本しか無い。
仕方が無いので
SMD Rework Stationを引っ張り出して、取り外した。
Rework Stationは、半田ごての方はFX-888を購入したので
使わなくなったが、
Hot Airの方はよく使う。便利だ。
スケッチの例「ETH_LAN8720_internal_clock」を呼出し、
コンパイルする。何故か ETH_CLK_MODEの定義が
ETH.hと重複し、コンパイルエラーとなるので、
setup()
で呼び出している
ETH.begin
の引数で
直接ETH_CLOCK_GPIO17_OUT
を指定。
その後、試行錯誤のあと、回路などを修正し、
無事 Ethernet経由でインターネットから情報を取得できた。
最終的な回路、というか LAN8720 PHYモジュールとESP32の
接続は次のようになった。
MDCとMDIOに接続しているIOは変更可能、他は変更不可。
IO25とIO26が使用されているのでDACが使えないのが残念。
LAN8720はAliExpresで買えば$2程度。
発振器を外すだけで ESP32のEthernetの実験ができるのは、
悪くないと思うのだが、どうだろう。