I have a K64F connected to a KSZ8081RNBIA Ethernet phy. I want to read/write the configuration registers within the Ethernet phy part. There is an external 1K pull up on the MDIO. I had this working at one time but now it is not working, or maybe in the past it just happen to work. Anyway, when I call the PHY_DRV_Autodiscover() it crashes and goes to the DefaultISR in startup_MK64F12.S when it is in the ENET_HAL_GetStatus() function (see attached image). I just don't know what might be the cause of it.
// Note: FSL_ENET1 is zero (0) and ENET_BASE_PTR is defined in MK64F12.h.
uint32_t phy_address;
enet_status_t status;
//ENET_HAL_Init( ENET_BASE_PTR ); <-- crashes with this too
//ENET_HAL_Enable( ENET_BASE_PTR ); <-- crashes with this as well
status = PHY_DRV_Autodiscover( FSL_ENET1, &phy_address );
The PHY_DRV_Autodiscover() function comes from the "fsl_phy_driver.c" which is from the
C:\Freescale\KSDK_1.2.0\middleware\tcpip\rtcs\source\port\phyksz8081 folder. I copied over the header file to my project as well.
The project is a KSDK 1.2.0 along with processor expert. KDS 3.0.0.
The project includes the eNet1:fsl_enet module, see attached image for all PE modules in the project.
The function init_enet_pins() is run during hardware_init(). See init_enet_pins() function below.
There is also a 1K pull up on the MDIO pin.
I tried initializing ENET (lines commented out above), but it just crashes earlier (i.e. tried using functions ENET_HAL_Init() and ENET_HAL_Enable() and both of them cause the exact same crash situation).
If I use the example demo project "shell_frdmk64f" (KSDK 1.3.0), the board network communications work great which leads me to believe it is not a hardware, but more like a software config sort of issue, but not sure what it might be.
What am I missing? Any suggestions?
Thank you.
void init_enet_pins(uint32_t instance)
{
/* Affects PORTB_PCR1 register */
PORT_HAL_SetMuxMode(PORTB,1UL,kPortMuxAlt4);
/* Affects PORTB_PCR0 register */
PORT_HAL_SetMuxMode(PORTB,0UL,kPortMuxAlt4);
PORT_HAL_SetPullMode(PORTB,0UL,kPortPullUp);
PORT_HAL_SetPullCmd(PORTB,0UL,true);
PORT_HAL_SetOpenDrainCmd(PORTB,0UL,true);
/* Affects PORTA_PCR13 register */
PORT_HAL_SetMuxMode(PORTA,13UL,kPortMuxAlt4);
/* Affects PORTA_PCR12 register */
PORT_HAL_SetMuxMode(PORTA,12UL,kPortMuxAlt4);
/* Affects PORTA_PCR14 register */
PORT_HAL_SetMuxMode(PORTA,14UL,kPortMuxAlt4);
/* Affects PORTA_PCR5 register */
PORT_HAL_SetMuxMode(PORTA,5UL,kPortMuxAlt4);
/* Affects PORTA_PCR16 register */
PORT_HAL_SetMuxMode(PORTA,16UL,kPortMuxAlt4);
/* Affects PORTA_PCR17 register */
PORT_HAL_SetMuxMode(PORTA,17UL,kPortMuxAlt4);
/* Affects PORTA_PCR15 register */
PORT_HAL_SetMuxMode(PORTA,15UL,kPortMuxAlt4);
/* Affects PORTA_PCR18 register */
PORT_HAL_SetMuxMode(PORTA,18UL,kPortPinDisabled);
}