I'm trying to detect the status of the network cable (plugged, un-plugged) on a TWR-SER2 board connected with TWR-K60F120M using MQX 4.2.
I am using the RTCS function - "ipcfg_get_link_active()" but it seems to always return a 'TRUE' once the Ethernet system is configured. Prior to configuring the Ethernet it reports a 'FALSE'.
Once the Ethernet system is configured and operational, plugging or un-plugging the Ethernet cable from the TWR-SER2 module seems to make no difference, the function always returns a 'TRUE'.
Code Snippet:
#define BSP_DEFAULT_ENET_DEVICE 0
error = RTCS_create();
if(error == RTCS_OK)
{
/* Initialise Ethernet */
error = ipcfg_init_device(BSP_DEFAULT_ENET_DEVICE, mac_address);
if (error != IPCFG_OK)
{
printf("Fatal Error 0x%X: Network device initialisation failed.\n", error);
_task_block();
}
while(retVal == FALSE)
{
retVal = ipcfg_get_link_active(BSP_DEFAULT_ENET_DEVICE);
if(retVal == TRUE)
printf("\nCable Connected..!!");
else
printf("\nCable not connected..!!");
_time_delay(100);
}
-- It comes out of while loop at once.
Also, i tried to read the data value in phy_dp83xxx_get_link_status() function; it always returns 0x7FFF, no matter whether the cable is connected or not connected.
static bool phy_dp83xxx_get_link_status
(
ENET_CONTEXT_STRUCT_PTR enet_ptr
)
{
uint32_t data;
bool res = FALSE;
/* Some PHY (e.g.DP8340) returns "unconnected" and than "connected" state
* just to show that was transition event from one state to another.
* As we need only curent state, read 2 times and return
* the current/latest state. */
if ((*enet_ptr->PARAM_PTR->ENET_IF->MAC_IF->PHY_READ)(enet_ptr, DP83XXX_REG_BMSR, &data, MII_TIMEOUT)) {
if ((*enet_ptr->PARAM_PTR->ENET_IF->MAC_IF->PHY_READ)(enet_ptr, DP83XXX_REG_BMSR, &data, MII_TIMEOUT))
{
printf("\nData: %lx", data);
res = ((data & DP83XXX_REG_BMSR_LINK_STATUS) != 0) ? TRUE : FALSE;
}
}
return res;
}
Can anyone please provide inputs for resolving the above stated issue?
Hi
It sounds as though the PHY may not be responding. Try reading its ID registers (and match with the expected values) to ensure that reads are basically operating.
Regards
Mark