DM9000CEP調試工作過程總結

原文鏈接:http://blog.sina.com.cn/s/blog_70ef2ee90100z7lr.html#cmt_3435851
轉自 Detective_ALong的博客


一、 原理圖設計階段:


這個階段有三個主要的思路:

1、收集通用的、正確的原理圖,作爲設計的可靠參考。我的主要參考爲:《Davicom-DM9000A-Application-Notes》第18頁中的schematic for 16-bit processor;邁衝提供的底板原理圖。

2、學習DM9000CEP芯片的工作過程,既數據的讀寫時序和相關寄存器的配置讀寫。主要參考爲:《DM9000A_datasheet》第42頁funcation descriptiom和電子科大碩士論文《基於DM9000以太網控制器的網絡家電控制系統》對於DM9000CEP基本功能和操作的介紹。

3、AT91SAM9G10的SMC,既SRAM控制器的使用方法,由於讀寫時序都是由本單元發起的,所以相關管腳的功能定義和程序是如何控制時序,這兩部分非常重要,其中,前者的主要參考是《AT91SAM9G10_datasheet》中Static Memory Controller部分的相關介紹;後者的瞭解主要通過U-Boot中DM9000CEP芯片的讀寫函數。

二、 PCB設計階段:

這個階段主要有兩個設計思路:

1、閱讀DM9000CEP佈線的相關注意事項:對於這方面的說明最詳細的是《dm9000a_layoutguid》。另外,DM9000CEP和ARM之間數據、控制信號的佈線也需要注意等長、儘量短和遠離其它高速信號線的原則。

2、參考一些成功的PCB圖。網上搜集一些已經成功的DM9000CEP及類似設計的PCB圖,模仿、學習他們的走線技巧。我參考的設計有:基於2440和DM9000的鴻雁燈光控設計、基於9G10和DM9000的9G10評估板設計、基於DM9000的SKY2440開發板設計、基於9261和CS8900的SBC9261開發板設計。

三、 電路調試階段:

1、問題的發現與初步判斷:U-Boot下發現ping不同主機,但是可以讀取DM9000CEP的ID號以及可以判斷當前網絡的工作模式(100M全雙工)。通過驅動程序初步判斷,ARM與DM9000CEP接口電路基本工作正常,ARM也可以正常讀寫DM9000CEP,ping不通問題可能存在於PHY層。

2、示波器測試芯片差分輸出:利用示波器按照其說明書上關於差分信號的測試方法,觀察到芯片有差分信號輸出,並且差分現象明顯。運用示波器數學功能對差分信號進行相減處理後,將得到的信號與開發板相關信號進行比對,未發現明顯差異(因爲以太網數據量比較大,所以單純的示波器捕捉信號並比對的方法已經不適用)。

3、利用抓包工具進行數據比對:通過閱讀U-Boot驅動源碼,發現DM9000_DEBUG_CONFIG宏控制着以太網數據包的控制檯打印,有了這樣的條件,我就可以在PC端安裝wireshark抓包軟件對比ARM端發送的數據和PC端接收到的有何不同。通過學習《計算機網絡》瞭解到,ping過程又分arp和icmp兩個交互過程,通過抓包軟件分析得知,icmp包數據段若連續出現零,再出現1時,就回丟bit位。

4、理論分析推斷問題根源:實驗獲得的連零數據錯誤現象,根據《通信原理》課程中基帶信號章節中相關描述,此類問題一般是會出現在串行數據的時鐘錯誤上。而我們的信道存在串行數據的就是差分信號。另外,arm和dm9000cep的並行總線上,儘管#IOW和#IOR的上升沿控制着數據的讀寫觸發,相當於存在同步時鐘,但是,高速模式下的高低電平切換也會存在信號建立時間和保持時間的時序裕量問題,所以也不能排除問題出現在這裏。我對dm9000cep芯片內部硬件編碼深入瞭解(也是以太網phy層的規範),發現其中的4B5B編碼、NRZI、擾碼和MLT-3等技術處理,已經將建立在網線上的數據消除了連零隱患,所以,我感覺問題更可能出現在arm與dm9000cep的數據時序上。

5、Arm和dm9000cep時序問題的解決:這部分時序是由arm的sram控制器來實現的,信號建立時間和保持時間,以及讀寫觸發時刻是編程實現的,具體函數在U-Boot的at91sam9g10ek.c中的函數static void at91sam9g10ek_dm9000_hw_init(void)中。具體的參數設置規則在《AT91SAM9G10_datasheet》中Static Memory Controller部分。但是,通過調節此處效果也並不明顯。

6、部門經理指導階段:經理的調試思路:對比原理圖和佈線與參考設計的不同之處,後發現數字電源和模擬電源104濾波電容應該儘量靠近管腳擺放,並且大電容應該選擇220UF;rj45兩個中間抽頭應該分別濾波後再接在一起;47腳應該接模擬地;將模擬地和數字地的連接點用飛線拉遠距離觀察效果;爲dm9000cep接ams1117供電觀察效果;差分線用飛線拉出變換位置觀察效果;拉大數字地和模擬地之間的距離。其它操作及得到的結論見附錄。總之,經理思路的不同之處在於更多的是用飛線改變佈線要點,來測試可能的情況,這點非常值得學習。

7、 深圳愛欣文FAE幫助:FAE幫助修改了U-Boot和linux下dm9000cep的驅動,以現在的分析來看,主要是加入了對於DM9000_NSR寄存器link status位的校驗,改善了通信的質量。



附錄:

Dm9000cep佈線注意:(來自實驗)

1、 數字VDD、模擬VDD和RJ45VDD各接一個220uF鉭電容。

2、 芯片所有VDD腳104濾波電容儘量靠近擺放(不超過2.5mm),同樣針對RJ45。

3、 芯片兩個模擬VDD應該各自由104電容濾波後再短接在一起。

4、 RJ45兩VDD管腳應該各自接104濾波電容後短接。

5、 47腳應該接模擬地。

6、 模擬地平面和數字地平面儘量不要進入彼此區域。

7、 復位按鍵接電容,形成上電覆位。

8、 由AMS1117單獨給DM9000CEP供電。

9、 ACT4060佈線元件擺放位置要注意,學習瀚瀾設計。

10、 DM9000CEP數據線等長佈線。



以下是第二考慮事項:(大部分來自《layout guide》)

1、 差分對儘量靠近(不要超過2mm),差分線儘量等長。接收和發送差分對之間最好有模擬地屏蔽,之間最少相距3mm以上。

2、 25M晶振遠離差分對、6.8k精度電阻和板子邊緣,遠離一切重要信號線,距離至少5mm以上。

3、 RJ45最好接近DM9000CEP放置。

4、 差分線上避免使用過孔。

5、 差分線、時鐘線、電源線儘量短和寬。

6、 差分對遠離其它信號線及RJ45外殼地。

7、 6.8k精度電阻靠近25和26管腳擺放(不要超過3mm),遠離高速信號線。

8、 終端電阻及接地電容靠近DM9000CEP擺放(不超過10mm)。

9、 模擬地平面和數字地平面進行分割,兩地平面的連接處遠離芯片模擬管腳。

10、 模擬地管腳不應短接,應該各自接模擬地平面。

11、 模擬地平面儘量大。

12、 模擬和數字電源用磁珠隔離,此磁珠在100M且250mA以上時表現出100歐姆的阻抗,例如松下EXCCL4532U。在磁珠兩端各接10uF、0.1uF和0.01uF電解旁路電容。

附:電容選型表格
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章