10 Mbps Ethernet not working on xCORE-200 eXplorerKIT

Technical questions regarding the XTC tools and programming with XMOS.
tim
Junior Member
Posts: 6
Joined: Sat Mar 06, 2021 1:22 am

10 Mbps Ethernet not working on xCORE-200 eXplorerKIT

Post by tim »

Hello everyone! I am using the xCORE-200 eXplorerKIT (XK-EVK-XE216) and I have flashed the XMOS Gigabit Ethernet application (AN00199) to my board.

Ethernet communication works great at 1000 Mbps or 100 Mbps full-duplex, but 10 Mbps full-duplex does not work. When I check with Wireshark, all I see are short, malformed packets.

Has anyone successfully managed to achieve 10 Mbps Ethernet on the explorer kit? If so, what code did you use? I suspect that something may be misconfigured in the AN00199 code or its associated libraries.
User avatar
CousinItt
Respected Member
Posts: 367
Joined: Wed May 31, 2017 6:55 pm

Post by CousinItt »

Try AN00120

<edit> Sorry, should have been more explicit: I meant look at the differences between AN00120 and AN00199. The app notes cover different hardware, but it may give you info on how to configure the library to work at 10 Mbps.
tim
Junior Member
Posts: 6
Joined: Sat Mar 06, 2021 1:22 am

Post by tim »

Just wanted to follow up on this topic. We were never able to achieve 10 Mbps operation, but please let me know if anyone does successfully. Thankfully the only requirements for our product were 100 and 1000 full-duplex.

Our solution was simply to remove 10 Mbps from the PHY's advertised capabilities, so that we would not mislead our Ethernet link partner. We also removed the half-duplex options since those didn't seem to work for us either.

    while(smi_phy_is_powered_down(smi, phy_address));
    smi_configure(smi, phy_address, LINK_1000_MBPS_FULL_DUPLEX, SMI_ENABLE_AUTONEG);

    // Set SmartSpeed retry limit to the minimum (2 retries)
    smi.write_reg(phy_address, 0x14, 0x0820); // Min retries = 0x0820, max retries = 0x083C
    smi.write_reg(phy_address, 0x04, 0x1D01); // Default 1DE1 (but we remove 100M half, 10M full, and 10M half)
    // Perform a software reset for this change to take effect (see forum post "AR8035 Smart Speed disable")
    smi.write_reg(phy_address, 0x00, 0xB100);