[EtherCAT]ESC使用PHY的注意事项

ESC端口与PHY的关系

EtherCAT从站控制器(ESC)使用以太网PHY进行数据通信。

ESC每一个端口都使用一个以太网PHY进行通信,根据PHY提供的LINK信号硬件自动打开或关闭端口,实现网络拓扑的动态调整。

EtherCAT数据帧在ESC中各个端口传递,其内部处理框图如下:

数据帧从Port0进入ESC,经过处理单元实现数据交换,之后转发到Port1,如果Port1存在有效连接且端口处于打开状态,数据帧会从Port1转发出去,访问与Port1相连的设备,之后再从Port1返回ESC, 接着数据帧转发到Port2,以此类推,最终数据帧会从Port0回到上一级设备。

如果与ESC相连的PHY工作不正常,会导致对应端口不工作,扫描不到端口相连的设备,或者导致流向该端口的数据帧被丢失,造成EtherCAT主站接收不到返回数据帧,从而整个网络不能扫描到从站设备, 不能工作。

PHY的选用与使用

关于ESC对PHY的使用说明,倍福提供《an_phy_selection_guide.pdf》, 不仅描述了对PHY的自身性能要求,还包括PHY与ESC之间的硬件电路设计要求,请在使用PHY时参考该文档。

以下是一些实际使用过程中的常见问题:

  1. 推荐使用MII接口,ESC的MII接口通过省略传输FIFO具有更低的处理和传输延时。
  2. 连接到同一个ESC的PHY共享同一时钟,例如一个ESC支持2个端口,外部需要连接两个PHY,这两个PHY应当使用同一时钟源。
  3. 合理设置PHY地址,PHY地址通常由PHY的地址引脚电平决定,一个ESC会与多个PHY(数目取决于ESC端口数目)相连。这些PHY共享同一个MDC\MDIO总线,所以在硬件设计时建议为这些PHY分配不同的地址,以便在使用MDC\MDIO接口访问这些PHY时能够根据地址进行区分。
  4. PHY的reset引脚应该由MCU/ESC控制,以便在ESC未工作的情况下保持PHY处于Reset状态。如果PHY处于工作状态而ESC还未处于工作状态,上级相连的端口判断PHY给出的Link信号,将数据帧转发过来,而ESC尚未工作导致数据帧丢失,造成错误。
  5. PHY上电后默认就能进入100 Mbit/s 全双工的状态,而不是依赖MDC/MDIO接口去配置PHY之后才能工作。 该需求主要是应对ESC上电时EEPROM内容为空或者数据错误时,出现ESC配置数据校验错误,会造成MDC\MDIO不工作,不能对PHY进行配置。PHY默认也能进行通信,主站可以烧录新的EEPROM数据进行恢复。(HPM_SDK v1.8.0之后, EtherCAT例程支持直接初始化EEPROM内容, 能够避免EEPROM为空等情况。在不能配置PHY是PHY给出的Link信号电平可能不正确,需要结合Port0作为强制恢复端口的功能使用)

从目前收集的情况看,用户容易在分配合理的PHY地址和配置PHY输出合适的Link信号上出问题。部分PHY的地址引脚和LED引脚是同一引脚,地址的设置与PHY的Link(LED)信号的电平是关联的,增加了理解的难度。

PHY的地址问题:

多个端口的PHY,共用一个MDC/MDIO总线(类似I2C)。如果应用中存在要单独配置某个PHY或者获取某个PHY的状态得需求时,不同的PHY地址设置必须要满足。

通常情况下PHY的地址0时广播地址,也就是说用地址0发出的命令,全部的PHY都会响应。

如果一个场景里不存在要单独访问特定的PHY的需求,则PHY地址相同或者混乱了也没有问题,可以通过PHY广播地址0实现配置,不会影响PHY与ESC之间通过MII接口的数据通信。

推荐的PHY地址配置

ESC的逻辑端口 PHY的物理地址
Port0 1
Port1 2
Port2 3

不使用物理地址0有助于避免地址0作为广播地址功能造成不便的影响。

PHY的物理地址与对应的端口序号保持偏移值1,该偏移值可以设置到ESC的PHY偏移地址寄存器,这样ESC使用MDC/MDIO访问PHY时,会自动在地址数据增加偏移值。这种方式在主站想单独访问端口对应的PHY时变的方便,主站只需向PHY地址寄存器中写入逻辑端口号,ESC的MDC/MDIO访问PHY时自动加上偏移值, 这样主站就不需要知道ESC各个端口所使用的实际物理地址了。

PHY输出Link信号问题

PHY的Link信号需要查询PHY的手册确认,不同厂家的PHY会存在不同。
通常PHY输出的Link信号就是LED信号,PHY通过LED指示Link状态。

PHY应该在100 Mbit/s全双工的情况下,建立稳定连接后输出稳定的Link电平给ESC,另外当LED引脚与其他功能引脚复用时,如与PHY地址引脚复用,Link信号的电平还受到设置的地址影响

例如景略JL1111 PHY,首先其LED默认工作模式是“0b11”, 数据通信时100M的LED1会Blink(“Blink for 100 Activity”),该状态电平变化不可用。我们需要配置PHY的LED工作模式为“0b00”, 选用LED1作为100M全双工下的Link信号(“On for 100 Link”)。

但是不是配置了LED的工作模式就足够了? 实际还不行,LED1(“On for 100 Link”)中的On状态可能是低电平也可能是高电平,这与LED1引脚同时作为地址功能有关。

在PHY reset引脚释放时,PHY会 Strap LED引脚上的电平作为PHY的地址,当PHY开始工作后,LED输出电平作为状态指示信号,LED输出信号时电平极性与Strap时的电平极性有关,也就是PHY地址的设置影响LED输出指示信号的极性。

当LED引脚上拉为高(地址strap为1)时, 输出”On for 100 Link“时输出电平是低电平。

当LED引脚下拉为低(地址strap为0)时, 输出”On for 100 Link“时输出电平是高电平

由于ESC需要使用低电平作为Link状态电平, 如果PHY提供的Link信号是高电平,可以配置ESC翻转输入信号, 最终确保ESC获得的表示”100 Link”的电平是稳定的低电平。

下图为JL1111 LED引脚的功能描述:


某些PHY需要特殊配置的情况

  • 使用KSZ8041 PHY芯片时,发现默认的PHY配置下,每次接收会消耗Ethernet数据帧中的前导码,当前导码消耗完之后,主站设备接收到数据帧时可能将其丢弃, 造成收不到返回的数据帧而出错。
    该问题在《an_phy_selection_guide.pdf》有提及。


HPM_SDK中对PHY的配置思路:

ESC的Link信号配置会使用到ESC的二级pinmux功能,并选择是否翻转信号电平。

下一篇《[EtherCAT]ESC配置PHY的示例》中将举例说明PHY的配置情况。

4
0
发表回复 0

Your email address will not be published. Required fields are marked *