天天看點

調試lan8720a遇到的奇葩問題,自動協商永遠10M。

這裡記錄一下調試stm32f407+lan8720a遇到的奇葩問題,如果有朋友遇到了相同的問題,并且解決了的話歡迎評論或私信交流。

一、電路圖

調試lan8720a遇到的奇葩問題,自動協商永遠10M。

二、問題說明

lan8720采樣自動協商模式,連接配接的是100M口的交換機,無論如何測試lan8720都工作在10M模式下,表現為speed led引腳輸出高。

這時又會引來另一個問題,那就是由于speed led引腳輸出高之後,由于speed led的初始電平決定了REFCLK/nINT引腳的功能,為高後該引腳預設作為INT功能,由于我的電路設計上将這個引腳配置為REFCLK輸出,是以會出問題。表現出來的現象就是,上電後REFCLK輸出正常,但是隻要對晶片進行複位,則REFCLK會消失。還有就是不插網線的情況下,由于沒有自動協商,無論怎麼複位REFCLK都不會消失。這個問題後面通過減小speed led上的下拉電路解決。

後面為了将晶片強制設定到100M全雙工模式,在csr_dv/mode2引腳上接了一個下拉電阻,設定mode[2:0]=011,此時禁止了自動協商功能,模式選擇100M全雙工模式,然後又出現了另一個問題,此時軟體中讀取phy的BSR寄存器bit2值為 0(link is down),軟體中就會卡死在

do
    {
      timeout++;
    } while (!(ETH_ReadPHYRegister(PHYAddress, PHY_BSR) & PHY_Linked_Status) && (timeout < PHY_READ_TO));
           

複位多次發現還是一樣的情況。看來100M模式是有問題了,認命了10M就10M吧。

之後又去掉了MODE2上的下拉電阻,軟體倒是沒有卡在哪個地方,lwip成功的跑起來了,然後我就想ping一下看看,是不是能ping通,結果還是ping不通啊。由于沒有用過10M模式的情況,不知道是不是軟體上的處理有需要注意的地方。