eth_speed_mode_t phy_lan8720_get_speed_mode(void) { if(esp_eth_smi_read(PHY_SPECIAL_CONTROL_STATUS_REG) & SPEED_INDICATION_100T) { ESP_LOGD(TAG, "phy_lan8720_get_speed_mode(100)"); return ETH_SPEED_MODE_100M; } else { ESP_LOGD(TAG, "phy_lan8720_get_speed_mode(10)"); return ETH_SPEED_MODE_10M; } }
eth_duplex_mode_t phy_lan8720_get_duplex_mode(void) { if(esp_eth_smi_read(PHY_SPECIAL_CONTROL_STATUS_REG) & DUPLEX_INDICATION_FULL) { ESP_LOGD(TAG, "phy_lan8720_get_duplex_mode(FULL)"); return ETH_MODE_FULLDUPLEX; } else { ESP_LOGD(TAG, "phy_lan8720_get_duplex_mode(HALF)"); return ETH_MODE_HALFDUPLEX; } }
eth_duplex_mode_t phy_tlk110_get_duplex_mode(void) { if((esp_eth_smi_read(PHY_STATUS_REG) & DUPLEX_STATUS ) == DUPLEX_STATUS) { ESP_LOGD(TAG, "phy_tlk110_get_duplex_mode(FULL)"); return ETH_MODE_FULLDUPLEX; } else { ESP_LOGD(TAG, "phy_tlk110_get_duplex_mode(HALF)"); return ETH_MODE_HALFDUPLEX; } }
eth_speed_mode_t phy_tlk110_get_speed_mode(void) { if((esp_eth_smi_read(PHY_STATUS_REG) & SPEED_STATUS ) != SPEED_STATUS) { ESP_LOGD(TAG, "phy_tlk110_get_speed_mode(100)"); return ETH_SPEED_MODE_100M; } else { ESP_LOGD(TAG, "phy_tlk110_get_speed_mode(10)"); return ETH_SPEED_MODE_10M; } }
bool phy_mii_get_partner_pause_enable(void) { if((esp_eth_smi_read(MII_PHY_LINK_PARTNER_ABILITY_REG) & MII_PARTNER_PAUSE)) { ESP_LOGD(TAG, "phy_mii_get_partner_pause_enable(TRUE)"); return true; } else { ESP_LOGD(TAG, "phy_mii_get_partner_pause_enable(FALSE)"); return false; } }
bool phy_mii_check_link_status(void) { if ((esp_eth_smi_read(MII_BASIC_MODE_STATUS_REG) & MII_LINK_STATUS)) { ESP_LOGD(TAG, "phy_mii_check_link_status(UP)"); return true; } else { ESP_LOGD(TAG, "phy_mii_check_link_status(DOWN)"); return false; } }
void phy_lan8720_dump_registers() { ESP_LOGD(TAG, "LAN8720 Registers:"); ESP_LOGD(TAG, "BCR 0x%04x", esp_eth_smi_read(0x0)); ESP_LOGD(TAG, "BSR 0x%04x", esp_eth_smi_read(0x1)); ESP_LOGD(TAG, "PHY1 0x%04x", esp_eth_smi_read(0x2)); ESP_LOGD(TAG, "PHY2 0x%04x", esp_eth_smi_read(0x3)); ESP_LOGD(TAG, "ANAR 0x%04x", esp_eth_smi_read(0x4)); ESP_LOGD(TAG, "ANLPAR 0x%04x", esp_eth_smi_read(0x5)); ESP_LOGD(TAG, "ANER 0x%04x", esp_eth_smi_read(0x6)); ESP_LOGD(TAG, "MCSR 0x%04x", esp_eth_smi_read(0x17)); ESP_LOGD(TAG, "SM 0x%04x", esp_eth_smi_read(0x18)); ESP_LOGD(TAG, "SECR 0x%04x", esp_eth_smi_read(0x26)); ESP_LOGD(TAG, "CSIR 0x%04x", esp_eth_smi_read(0x27)); ESP_LOGD(TAG, "ISR 0x%04x", esp_eth_smi_read(0x29)); ESP_LOGD(TAG, "IMR 0x%04x", esp_eth_smi_read(0x30)); ESP_LOGD(TAG, "PSCSR 0x%04x", esp_eth_smi_read(0x31)); }
void phy_tlk110_dump_registers(void) { ESP_LOGD(TAG, "TLK110 Registers:"); ESP_LOGD(TAG, "BMCR 0x%04x", esp_eth_smi_read(0x0)); ESP_LOGD(TAG, "BMSR 0x%04x", esp_eth_smi_read(0x1)); ESP_LOGD(TAG, "PHYIDR1 0x%04x", esp_eth_smi_read(0x2)); ESP_LOGD(TAG, "PHYIDR2 0x%04x", esp_eth_smi_read(0x3)); ESP_LOGD(TAG, "ANAR 0x%04x", esp_eth_smi_read(0x4)); ESP_LOGD(TAG, "ANLPAR 0x%04x", esp_eth_smi_read(0x5)); ESP_LOGD(TAG, "ANER 0x%04x", esp_eth_smi_read(0x6)); ESP_LOGD(TAG, "ANNPTR 0x%04x", esp_eth_smi_read(0x7)); ESP_LOGD(TAG, "ANLNPTR 0x%04x", esp_eth_smi_read(0x8)); ESP_LOGD(TAG, "SWSCR1 0x%04x", esp_eth_smi_read(0x9)); ESP_LOGD(TAG, "SWSCR2 0x%04x", esp_eth_smi_read(0xa)); ESP_LOGD(TAG, "SWSCR3 0x%04x", esp_eth_smi_read(0xb)); ESP_LOGD(TAG, "REGCR 0x%04x", esp_eth_smi_read(0xd)); ESP_LOGD(TAG, "ADDAR 0x%04x", esp_eth_smi_read(0xe)); ESP_LOGD(TAG, "PHYSTS 0x%04x", esp_eth_smi_read(0x10)); ESP_LOGD(TAG, "PHYSCR 0x%04x", esp_eth_smi_read(0x11)); ESP_LOGD(TAG, "MISR1 0x%04x", esp_eth_smi_read(0x12)); ESP_LOGD(TAG, "MISR2 0x%04x", esp_eth_smi_read(0x13)); ESP_LOGD(TAG, "FCSCR 0x%04x", esp_eth_smi_read(0x14)); ESP_LOGD(TAG, "RECR 0x%04x", esp_eth_smi_read(0x15)); ESP_LOGD(TAG, "BISCR 0x%04x", esp_eth_smi_read(0x16)); ESP_LOGD(TAG, "RBR 0x%04x", esp_eth_smi_read(0x17)); ESP_LOGD(TAG, "LEDCR 0x%04x", esp_eth_smi_read(0x18)); ESP_LOGD(TAG, "PHYCR 0x%04x", esp_eth_smi_read(0x19)); ESP_LOGD(TAG, "10BTSCR 0x%04x", esp_eth_smi_read(0x1a)); ESP_LOGD(TAG, "BICSR1 0x%04x", esp_eth_smi_read(0x1b)); ESP_LOGD(TAG, "BICSR2 0x%04x", esp_eth_smi_read(0x1c)); ESP_LOGD(TAG, "CDCR 0x%04x", esp_eth_smi_read(0x1e)); ESP_LOGD(TAG, "TRXCPSR 0x%04x", esp_eth_smi_read(0x42)); ESP_LOGD(TAG, "PWRBOCR 0x%04x", esp_eth_smi_read(0xae)); ESP_LOGD(TAG, "VRCR 0x%04x", esp_eth_smi_read(0xD0)); ESP_LOGD(TAG, "ALCDRR1 0x%04x", esp_eth_smi_read(0x155)); ESP_LOGD(TAG, "CDSCR1 0x%04x", esp_eth_smi_read(0x170)); ESP_LOGD(TAG, "CDSCR2 0x%04x", esp_eth_smi_read(0x171)); }
void phy_mii_enable_flow_ctrl(void) { uint32_t data = esp_eth_smi_read(MII_AUTO_NEG_ADVERTISEMENT_REG); data |= MII_ASM_DIR | MII_PAUSE; esp_eth_smi_write(MII_AUTO_NEG_ADVERTISEMENT_REG, data); }