void mdio_write(GPIO_TypeDef* GPIOx, uint32_t PhyRegAddr, uint32_t val) { /* 32 Consecutive ones on MDO to establish sync */ //printf("mdio write- sync \r\n"); output_MDIO(GPIOx, 0xFFFFFFFF, 32); /* start code 01, write command (01) */ //printf("mdio write- start \r\n"); output_MDIO(GPIOx, 0x05, 4); /* write PHY address */ //printf("mdio write- 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 */ //printf("mdio write- turnaround (1,0)\r\n"); output_MDIO(GPIOx, 0x02, 2); /* Write the data value */ //printf("mdio writeread - read the data value \r\n"); output_MDIO(GPIOx, val, 16); /* turnaround MDO is tristated */ //printf("mdio write- idle \r\n"); idle_MDIO(GPIOx); }
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; }
void mdio_write(u32 PhyRegAddr, u32 val) { /* 32 Consecutive ones on MDO to establish sync */ output_MDIO(0xFFFFFFFF, 32); /* start code 01, write command (01) */ output_MDIO(0x05, 4); /* write PHY address */ output_MDIO(PHY_ADDR, 5); output_MDIO(PhyRegAddr, 5); /* turnaround MDO */ output_MDIO(0x02, 2); /* Write the data value */ output_MDIO(val, 16); /* turnaround MDO is tristated */ idle_MDIO(); }