TI am335x驅動除錯記錄
調TI am 335x有些時間了。
總是沒有精力來總結這些經驗教訓,現在慢慢發上來。
硬體原理圖是:cpu <-->mac <---->phy <---->rj45
eth除錯:
1.讀硬體電路圖,拿著晶片手冊,把所有pin的配置修改成對應的配置。我們修改的參考板上有兩個eth ,我們只用了eth1,餘下的eth0由於pin和別的複用了。
在參考板上引腳定義多數不一樣。
2.配完引腳,那麼init部分就要按硬體修改了。phy addr從硬體原理圖上的是0100,修改軟體設定。跑起來看到可以正常讀寫phy,這樣說明phy->mac這個通路是沒有問題的。也就是mdio配置正常。讀寫出來的值也正確,讀明引腳,電源,訊號正常。算是進了一點。
3.從原理圖上,仔細比較了和參考板上的配置,發現mode配置不一樣,本應當配配的rgmii方式,硬體上拉卻搞錯了。這東西都能不能錯,mode決定了別的pin腳連線。
4.phy可配了,但出現一個提示是協商失敗。我們init裡是配的自協商,理論上是phy晶片檢測線後,就會發協商資料。看樣子是phy-phy之間不通。拿示波器測phy出來的線上,
果然沒有協商碼流,拿參考板對比較,協商碼流是上電後,就會從phy上發出來,這管mac是否工作。
5.再從phy到rj45線之間來找問題,從原理圖上看不出什麼不對,phy到線是直通的,沒有器件,這個問題就怪了。找來硬體人員,他說原理圖和實際板子有差別。實際板子把電平轉換模組和插座分開的,我們的參考板是一體整合的模組。那就換座子再測吧。
6.換完座子,焊接上也有些問題,不停反覆測試,座子的燈終於可以正常閃起,說明自協商是正常的。這時從軟體uboot裡的測試來看,能收到一些資料,傳送資料後,有時能收到包,有時收很多個包,把krnel修改下,放上去測吧。
7.kernel還跑不起來,因為引腳配置,和local bus上的配置沒有做,每次都掛死。看來不容易的,這時下定決心把所有引腳都配了。把不相關的初始化全關了,包括nand的驅動,並把local bus匯流排物理上切開,不影響系統執行才行。終於把kernel跑起來了。算是進了一大步。修改phy地址,修改成一個eth,結果ping不通。再軟體上配成兩個eth,試了一下能ping通一兩個資料,這也算通了吧。把phy到座子的線取短,焊得更正規點。再試試,ping的資料丟包率就好多了,這個應當時訊號質量上的問題。基本算除錯通了。丟包就靠後面重新畫板了。
總結下:
1.eth是很成熟的東西了,按demo來做就可以了。但從驅動人員來看,一層層的來除錯,方便發現問題。
2.開發一定要懂硬體工作原理,有問題很正常,但硬體人員的錯誤,那軟體人員從軟體上來定就完全無能為力,所以一定要檢查仔細,軟體配置和硬體配置都重要
3.軟體人員得會用示波器,這次開發,還好有個硬體人員協助,測訊號,測電平,焊接器件。