国内外实现自行接入以太网的资料不多,主要自己慢慢摸索。具体的原理就是为ESP32加一块PHY芯片,接入GPIO口就行了。X宝上有售相关的模块,但是模块价格高,而且我一贯不喜欢线飞来飞去,所以必须自己设计PCB才够放心。
一、PHY芯片选型
https://esphome.io/components/ethernet.html 在ESPHOME的Ethernet网页中写到,ESP32支持两种PHY芯片,LAN8720和TLK110 芯片价格前者2元左右,后者50元左右,且110的芯片引脚太多,太占体积,高下立判选择前者无疑。
LAN8720是低功耗的 10/100M 以太网 PHY 层芯片, I/O 引脚电压符合 IEEE802.3-2005 标准,支持通过 RMII 接口与以太网 MAC 层通信,内置 10-BASE-T/100BASE-TX 全双工传输模块,支持 10Mbps 和 100Mbps。
LAN8720A 可以通过自协商的方式与目的主机最佳的连接方式(速度和双工模式),支持 HP Auto-MDIX 自动翻转功能,无需更换网线即可将连接更改为直连或交叉连接。 LAN8720A 的主要特点如下: 高性能的 10/100M 以太网传输模块 支持 RMII 接口以减少引脚数 支持全双工和半双工模式 两个状态 LED 输出 可以使用 25M 晶振以降低成本 支持自协商模式 支持 HP Auto-MDIX 自动翻转功能 支持 SMI 串行管理接口 支持 MAC 接口
因为千兆的普及,这块芯片的价格已经降到1块多。但是甭说百兆,十兆的带宽都足矣让智能家居控制的流量飞奔起来。。
买他!
二、芯片电路
其中的GPIO口连接是关键,没资料就慢慢翻datasheet。这里直接帮大家排坑了:一部分引脚,有规定的连接GPIO,非这么接不可;一部分引脚可以自己在ESP32中定义,随便选都行。
我先上一个连接的图吧:
连接方法:
GPIO23-MDC
GPIO18-MDIO
GPIO17 CLK_IN
GPIO21-TX_EN
GPIO19-TX0
GPIO22 TX1
GPIO25-RX0
GPIO26-RX1
GPIO27-CRS_DRV
其中,MDC MDIO CLK_IN的脚可以随便接哪个GPIO,其他的必须按照我写的接法连接。
一个PHY芯片占用了这么多的GPIO口,可能这也是8266不支持以太网的原因。
实际应用电路:
RJ45就是带网络变压器的RJ45百兆网口,我使用的型号是HR911105A。
请各位注意,其中外围元件的连接方式、参数请务必按照我给的数值,此电路经过了我的大量测试,请不要省料,否则将可能导致网络不通、不稳定。
在图中,部分元件上标了一个NC,表示不用连接,这个后面会讲到。
三、ESPHOME中如何配置
按照以上方法连接后,配置方式如下:
代码语言:javascript复制esphome:
name: supersonic
platform: ESP32
board: esp-wrover-kit
ethernet:
type: LAN8720
mdc_pin: GPIO23
mdio_pin: GPIO18
clk_mode: GPIO17_OUT
phy_addr: 0
四、一些重要的问题:
- 接地。该芯片采用QFN-24封装,GND是芯片的底部焊盘,没有额外的GND引脚,所以焊接的时候比较考验焊工。我的经验是先用电烙铁上一层薄锡,再用热风枪380°风速3.5吹,焊盘摆正后用镊子轻推能够自动回位表示底部焊盘已经充分融化连接;随后再用电烙铁补引脚拖锡,最后可以万用表确认连接情况,熟练之后成功率百分百。
- 电源隔离。LAN8720的VCC电压为3.3V,如果使用线性稳压电源就不用考虑这一步。如果采用LM2596等开关电源供电,需要考虑在电源前安装一颗磁珠电阻,滤掉150KHz高频干扰(LM2596假货太多,多半是2576的打磨片,2576振荡频率是50KHz)。我采用的稳压芯片是圣邦微SGM6232YPS8G,开关频率为1.4MHz,所以并没有使用磁珠进行电源隔离。后面有时间了打算单独开个帖子,讲一下开关电源电路,电源这部分自己DIY的时候必须要用到,且必须做好。
- PHY芯片地址设置。LAN8720可以通过PHYAD0引脚来配置,该引脚与RXER引脚复用,芯片内部自带下拉电阻,当硬复位结束后, LAN8720A 会读取该引脚电平,作为器件的 SMI 地址,接下拉电阻时(浮空也可以,因为芯片内部自带了下拉电阻),设置 SMI 地址为 0,当外接上拉电阻后,可以设置为 1。我使用时引脚浮空,即设置 LAN8720 地址为 0。
- nINT/REFCLKO 引脚功能配置。nINT/REFCLKO 引脚可以用作中断输出,或者参考时钟输出。通过 LED2(nINTSEL)引脚设置, LED2 引脚的值在芯片复位后,被LAN8720读取,当该引脚接上拉电阻(或浮空,内置上拉电阻),那么正常工作后,nINT/REFCLKO 引脚将作为中断输出引脚(选中REF_CLKIN模式)。当该引脚接下拉电阻时,正常工作后, nINT/REFCLKO 引脚将作为参考时钟输出(选中REF_CLK OUT模式)。在REF_CLK IN模式,外部必须提供50Mhz参考时钟给LAN8720的XTAL1(CLKIN)引脚。在REF_CLK OUT模式, LAN8720可以外接25Mhz石英晶振,通过内部倍频到 50Mhz,然后通过 REFCLKO 引脚,输出 50Mhz 参考时钟给 MAC 控制器。这种方式,可以降低 BOM成本。我使用时将LED2悬空,即REF_CLKIN模式,由ESP32的GPIO口输出50MHz的时钟信号,所以电路图上同时设计有这两种电路,自己选择其中一种方式即可,NC留空的选择的就是免外部晶振。
- RJ45网口插座相关问题。为nINT/REFCLKO选择不同的模式时,应当注意与RJ45的连接方式,连接错误会导致网口LED灯反相。我选择的RJ45插座是HR911105A。这里再把图放出来,务必注意R9 R10。
> 引用自:「瀚思彼岸」