Tool/software: TI-RTOS
Hello,
We have a PCB with a TM4C129X and I will try to state the problem we are facing:
1- We are using TI-RTOS. TIRTOStivac:2.16.1.14. We are using EMAC_init(). This eventually initializes the PHY according to EMAC_PHY_CONFIG define in EMACSNOW.c . EMAC_PHY_AN_100B_T_FULL_DUPLEX .
2- From product requirement point of view, this is exactly what we want. We want the customers to be able to connect with our devices, as fast as their device allows.
2- When we connect the PCB with many network adapters, for example to a USB-Ethernet Adapter, D-Link DUB-E100, everything goes on as expected. Auto-negotiation results in a very stable link that is established at 100Mbps with Full Duplex. This is verified with reading the Phy status register also. ( with EMACPHYRead(EMAC0_BASE, 0, 0x010) ).
3- However, when we connect the to "some" ethernet hubs/switches, to give an example, Allied Telesis AT-FS705EFC, auto-negotiation fails with this setting. How it fails is as follows (from now on i will just say switch for AT-FS705EFC) :
- It connects, link is up, Ethernet PHY status register value becomes 0x0F15 (Link is up, 100Mbit, Full duplex, bit4 is 1 so auto negotiation is complete)
- At the same time Ethernet PHY Basic Mode Status (0x01) has the value of 0x786D.
- In about 1 sec, link is broken. At the FW poll time when the link is broken,
- Ethernet PHY Basic Mode Status (0x01) : 0x7849
- Ethernet PHY Status (0x10) : 0x0902
4- When i force the connection with 100Mbit full duplex, with changing the config to, EMAC_PHY_FORCE_100B_T_FULL_DUPLEX, it doesnt work. Connection can not be established, link is never up.
5- When i force the connection with 10Mbit full duplex, or 100Mbit half duplex, ceteris paribus, with just changing the config to, EMAC_PHY_FORCE_10B_T_FULL_DUPLEX or EMAC_PHY_FORCE_100B_T_HALF_DUPLEX, it does work. Very stable connection is established to the AT-FS705EFC with no problems.
6- When i connect any other 3rd party device to the AT-FS705EFC switch with 100Mbit full duplex, switch can establish a connection. So switch does not have an innate problem of not being able to establish 100Mbit Full duplex.
7- Also worth noting, EMAC_PHY_AN_100B_T_HALF_DUPLEX, EMAC_PHY_AN_10B_T_FULL_DUPLEX, does not work (same as connect disconnect cycles above) with switch, but EMAC_PHY_AN_10B_T_HALF_DUPLEX works (end result is 10B half as the name suggests, Ethernet PHY Status (0x10) = 0x117). I also fail to understand, specifiying other parameters along with auto-negotiation, and what do they really make.
So now we are coming to the question part:
1) Why our device with EMAC_PHY_AN_100B_T_FULL_DUPLEX config, does not work with the AT-FS705EFC (and some other) switches/adapters ?
2) Why our device with EMAC_PHY_AN_100B_T_HALF_DUPLEX config, does not work with the switch but EMAC_PHY_FORCE_100B_T_HALF_DUPLEX works?
3) Does these connect/disconnect cycles have some meaning that i didnt understand ? Should i poll some other registers or am i missing something ?
In case someone is interested links to datasheets of the devices mentioned:
https://www.alliedtelesis.com/sites/default/files/documents/datasheets/fs705efc_ds.pdf
https://www.alliedtelesis.com/documents/installation-guide-fs705efc-and-fs706efc

