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)。
圖 2-1 PHY 復位信號自舉引腳在解除置位后具有替代功能,因此,為了最大限度地減少自舉引腳信號采樣期間產生的干擾,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 和客戶電路板之間的復位方法可能有所不同。