u32 mdio_read(u32 PhyRegAddr, u32 PhyAddr) { u32 val =0; /* 32 Consecutive ones on MDO to establish sync */ output_MDIO(0xFFFFFFFF, 32); /* start code 01, read command (10) */ output_MDIO(0x06, 4); /* write PHY address */ output_MDIO(PhyAddr, 5); output_MDIO(PhyRegAddr, 5); /* turnaround MDO is tristated */ turnaround_MDIO(); /* Read the data value */ val = input_MDIO(); /* turnaround MDO is tristated */ idle_MDIO(); return val; }
uint32_t mdio_read(GPIO_TypeDef* GPIOx, uint32_t PhyRegAddr) { uint32_t val =0; /* 32 Consecutive ones on MDO to establish sync */ //printf("mdio read - sync \r\n"); output_MDIO(GPIOx, 0xFFFFFFFF, 32); /* start code 01, read command (10) */ //printf("mdio read - start \r\n"); output_MDIO(GPIOx, 0x06, 4); /* write PHY address */ //printf("mdio read - PHY address \r\n"); output_MDIO(GPIOx, PHY_ADDR, 5); //printf("mdio read - PHY REG address \r\n"); output_MDIO(GPIOx, PhyRegAddr, 5); /* turnaround MDO is tristated */ //printf("mdio read - turnaround \r\n"); turnaround_MDIO(GPIOx); /* Read the data value */ //printf("mdio read - read the data value \r\n"); val = input_MDIO(GPIOx ); //printf("mdio read - val : %X\r\n", val ); /* turnaround MDO is tristated */ //printf("mdio read - idle \r\n"); idle_MDIO(GPIOx); return val; }