Browse Source

【修复】PHY 状态查询过程中的 bug

SummerGift 6 years ago
parent
commit
8710b1fd06
1 changed files with 29 additions and 21 deletions
  1. 29 21
      bsp/stm32/libraries/HAL_Drivers/drv_eth.c

+ 29 - 21
bsp/stm32/libraries/HAL_Drivers/drv_eth.c

@@ -468,32 +468,40 @@ static void phy_monitor_thread_entry(void *parameter)
 
 
     while (1)
     while (1)
     {
     {
-        HAL_ETH_ReadPHYRegister(&EthHandle, PHY_BASIC_STATUS_REG, (uint32_t *)&status);
-        LOG_D("PHY BASIC STATUS REG:0x%04X", status);
-
         phy_speed_new = 0;
         phy_speed_new = 0;
 
 
-        if (status & (PHY_AUTONEGO_COMPLETE_MASK | PHY_LINKED_STATUS_MASK))
+        if(HAL_ETH_ReadPHYRegister(&EthHandle, PHY_BASIC_STATUS_REG, (uint32_t *)&status) == HAL_OK)
         {
         {
-            rt_uint32_t SR;
-
-            phy_speed_new = PHY_LINK_MASK;
-
-            SR = HAL_ETH_ReadPHYRegister(&EthHandle, PHY_Status_REG, (uint32_t *)&SR);
-            LOG_D("PHY Control/Status REG:0x%04X ", SR);
-
-            if (SR & PHY_100M_MASK)
+            LOG_D("PHY BASIC STATUS REG:0x%04X", status);
+            
+            if (status & (PHY_AUTONEGO_COMPLETE_MASK | PHY_LINKED_STATUS_MASK))
             {
             {
-                phy_speed_new |= PHY_100M_MASK;
-            }
-            else if (SR & PHY_10M_MASK)
-            {
-                phy_speed_new |= PHY_10M_MASK;
-            }
+                rt_uint32_t SR;
 
 
-            if (SR & PHY_FULL_DUPLEX_MASK)
-            {
-                phy_speed_new |= PHY_FULL_DUPLEX_MASK;
+                phy_speed_new = PHY_LINK_MASK;
+
+                if(HAL_ETH_ReadPHYRegister(&EthHandle, PHY_Status_REG, (uint32_t *)&SR) == HAL_OK)
+                {
+                    LOG_D("PHY Control/Status REG:0x%04X ", SR); 
+
+                    if (SR & PHY_100M_MASK)
+                    {
+                        phy_speed_new |= PHY_100M_MASK;
+                    }
+                    else if (SR & PHY_10M_MASK)
+                    {
+                        phy_speed_new |= PHY_10M_MASK;
+                    }
+
+                    if (SR & PHY_FULL_DUPLEX_MASK)
+                    {
+                        phy_speed_new |= PHY_FULL_DUPLEX_MASK;
+                    }
+                }
+                else
+                {
+                    LOG_D("PHY Control/Status REG read error."); 
+                }
             }
             }
         }
         }