ZHCAAA1A December 2017 – May 2021 AM3351 , AM3352 , AM3354 , AM3356 , AM3357 , AM3358 , AM3358-EP , AM3359 , AM4372 , AM4376 , AM4377 , AM4378 , AM4379 , AM5706 , AM5708 , AM5716 , AM5718 , AM5718-HIREL , AM5726 , AM5728 , AM5729 , AM5746 , AM5748 , AM5749 , DP83822H , DP83822HF , DP83822I , DP83822IF , DP83825I
在上电或硬件复位时进行 PHY 自举配置,将器件置于所需的工作模式下。对 DP83822 PHY 中的 RESET 引脚施加一个持续时间至少为 10µs (T1) 的低脉冲,以实现硬件复位。此脉冲将复位器件,以便将所有寄存器都重新初始化为默认值,并将硬件配置值关联到器件中(请参阅 图 2-1)。
自举引脚在解除置位后具有替代功能,因此,为了最大限度地减少自举引脚信号采样期间产生的干扰,PRU-ICSS MII 复用应发生在 AMIC110 ICE 上释放 PHY RESET 之后。如果未配置这些自举引脚,那么一旦释放复位,它们就会变成 GPIO 和高阻态。TI EtherCAT 中的硬件复位序列实现如下所示:
Board_init(BOARD_INIT_MODULE_CLOCK);
Board_phyReset(2);
/* 在 PHY 复位后复用 PRU MII,以防 PRU 驱动
* 引脚上的信号并干扰 PHY 自举配置
*/
#ifdef ENABLE_UART_PRINT
Board_init(BOARD_INIT_UART_STDIO|BOARD_INIT_ICSS_PINMUX);
#else
Board_init(BOARD_INIT_ICSS_PINMUX);
Board_init( ) API 来自 TI Processor SDK 电路板库。PRU-ICSS EtherCAT 是以 TI 的 Processor SDK 为基础构建的一款统一软件平台,适用于 TI 嵌入式处理器,其设置简单,提供开箱即用的基准测试和演示。TI PRU-ICSS 工业软件包支持 EtherCAT、PROFINET、PROFIBUS、EtherNet/IP、HSR/PRP 等。
Board_phyReset() 的实现方式如下:
/* 驱动 Phy1(和 Phy2)复位到高电平;两个 PHY 复位都来自一个 GPIO */
GPIOModuleEnable(PhyResetInfo[1].baseAddr);
GPIODirModeSet(PhyResetInfo[1].baseAddr, PhyResetInfo[1].pin, GPIO_DIR_OUTPUT);
GPIOPinWrite(PhyResetInfo[1].baseAddr, PhyResetInfo[1].pin, GPIO_PIN_HIGH);
delay_us(20);
GPIOPinWrite(PhyResetInfo[1].baseAddr, PhyResetInfo[1].pin, GPIO_PIN_LOW);
/* T1 - RESET 脉冲宽度,最短时间为 10us,请参阅 DP83822 数据表 */
delay_us(20);
GPIOPinWrite(PhyResetInfo[1].baseAddr, PhyResetInfo[1].pin, GPIO_PIN_HIGH);
其中 PhyResetInfo[1] 配置了用于复位的 GPIO 引脚。
/* phy1 复位 - 驱动高电平 */
PhyResetInfo[1].pin = 13;
PhyResetInfo[1].baseAddr = SOC_GPIO_1_REGS;
也可以通过 0x001F PHY 复位控制寄存器 (PHYRCR) 来复位 PHY,具体请参阅 表 2-1。
位 | 字段 | 类型 | 复位 | 说明 |
---|---|---|---|---|
15 | 软件复位 | RW。SC | 0 | 软件复位:
|
14 | 数字重启 | RW、SC | 0 | 数字重启:
|
13:0 | 保留 | RW | 0 | 保留 |
在 DP83822 器件中,PHY 地址引脚 PHY_AD[4:1] 与 RX_D[3:0] 进行多路复用并被下拉。PHY_AD[0](地址的 LSB)与引脚 29 上的 COL 进行多路复用并被上拉。如果不存在外部上拉或下拉,则默认 PHY 地址为 0x01。DP83822 器件可通过自举配置功能,配置为 32 个可能的 PHY 地址中的任一个。该 PHY 地址在器件上电或硬件复位之时锁存到器件中,并在软件中进行硬编码。
#define AM335X_ICSS1_PORT1_PHY_ADDR 1
#ifndef iceAMIC11x
#define AM335X_ICSS1_PORT2_PHY_ADDR 3
#else
#define AM335X_ICSS1_PORT2_PHY_ADDR 13
#endif
PHY 地址以如下定义的偏移量写入共享数据 RAM 中,以通知 PRU 固件。
#define ESC_ADDR_TI_PORT0_PHYADDR 0xE08
#define ESC_ADDR_TI_PORT1_PHYADDR 0xE09
//通过供应商特定的寄存器向固件指示 PHY 地址
bsp_write_byte(pruIcssHandle, pmdio_params->addr0, ESC_ADDR_TI_PORT0_PHYADDR);
bsp_write_byte(pruIcssHandle, pmdio_params->addr1, ESC_ADDR_TI_PORT1_PHYADDR);
对于 AMIC110,共享数据 RAM 地址为 0x4A31_0000。
当 MDIO 无法使用主机 API(例如 Board_getPhyIdentifyStat())访问 PHY_ID1_REG(寄存器 0x02)时,这通常意味着 PHY 未正确复位或 PHY 地址未正确配置。由于使用不同的 GPIO,TI 和客户电路板之间的复位方法可能有所不同。