summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernard Xiong <[email protected]>2019-05-16 09:29:22 +0800
committerGitHub <[email protected]>2019-05-16 09:29:22 +0800
commit361754e0375b3ef61438ff2d0ec96e330b5a4147 (patch)
tree978d7ea7ff6bcac9edf85253577b07fb2d87114c
parent8b312c2cf0f2aecab90eeabeffa531a24353909d (diff)
parent6309492ec5daff70289da513cd184d2e52a96bbf (diff)
Merge pull request #2692 from SummerGGift/phy_check
[bsp][stm32][driver] fix phy detection driver
-rw-r--r--bsp/stm32/libraries/HAL_Drivers/drv_eth.c41
1 files changed, 22 insertions, 19 deletions
diff --git a/bsp/stm32/libraries/HAL_Drivers/drv_eth.c b/bsp/stm32/libraries/HAL_Drivers/drv_eth.c
index 1c9055be89..148a03f45b 100644
--- a/bsp/stm32/libraries/HAL_Drivers/drv_eth.c
+++ b/bsp/stm32/libraries/HAL_Drivers/drv_eth.c
@@ -91,10 +91,10 @@ static rt_err_t rt_stm32_eth_init(rt_device_t dev)
EthHandle.Init.RxMode = ETH_RXINTERRUPT_MODE;
#ifdef RT_LWIP_USING_HW_CHECKSUM
EthHandle.Init.ChecksumMode = ETH_CHECKSUM_BY_HARDWARE;
-#else
+#else
EthHandle.Init.ChecksumMode = ETH_CHECKSUM_BY_SOFTWARE;
#endif
-
+
HAL_ETH_DeInit(&EthHandle);
/* configure ethernet peripheral (GPIOs, clocks, MAC, DMA) */
@@ -431,31 +431,34 @@ static void phy_monitor_thread_entry(void *parameter)
uint8_t phy_addr = 0xFF;
uint8_t phy_speed_new = 0;
rt_uint32_t status = 0;
+ uint8_t detected_count = 0;
- /* phy search */
- rt_uint32_t i, temp;
- for (i = 0; i <= 0x1F; i++)
+ while(phy_addr == 0xFF)
{
- EthHandle.Init.PhyAddress = i;
+ /* phy search */
+ rt_uint32_t i, temp;
+ for (i = 0; i <= 0x1F; i++)
+ {
+ EthHandle.Init.PhyAddress = i;
+ HAL_ETH_ReadPHYRegister(&EthHandle, PHY_ID1_REG, (uint32_t *)&temp);
+
+ if (temp != 0xFFFF && temp != 0x00)
+ {
+ phy_addr = i;
+ break;
+ }
+ }
- HAL_ETH_ReadPHYRegister(&EthHandle, PHY_ID1_REG, (uint32_t *)&temp);
+ detected_count++;
+ rt_thread_mdelay(1000);
- if (temp != 0xFFFF && temp != 0x00)
+ if (detected_count > 10)
{
- phy_addr = i;
- break;
+ LOG_E("No PHY device was detected, please check hardware!");
}
}
- if (phy_addr == 0xFF)
- {
- LOG_E("phy not probe!");
- return;
- }
- else
- {
- LOG_D("found a phy, address:0x%02X", phy_addr);
- }
+ LOG_D("Found a phy, address:0x%02X", phy_addr);
/* RESET PHY */
LOG_D("RESET PHY!");