一、原理圖設計階段:
這個階段有三個主要的思路:
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電解旁路電容。
附:電容選型**
DM9000A網絡卡模組除錯總結
從開始寫 到除錯成功大概花了兩周時間,首先把出現的問題歸納一下。1 兩台電腦用直連網線通訊,需要指定各自的ip位址,若有連線故障 乙個嘆號 改變一下ip,直到連線成功。這樣其中電腦a就學習到了 電腦b的mac位址,將這個mac位址寫入dm9000a網絡卡模組,將其與電腦a相連,電腦a將顯示連線成功 ...
STM32與DM9000A除錯(一)
dm9000a的phy 能夠以10base t 的標準在utp3 4 5或者以100base t的標準在utp5上介面通訊。它的自動協商功能是夠自動配置dm9000a最大地發揮出自身效能。它同時支援ieee 802.3x全雙工資料流通訊。1 處理器介面 引腳號名稱 電氣連線 說明35 ior fsm...
DM9000AEP除錯的時候注意事項
dm9000aep除錯的時候注意事項 1.首先要判斷晶元的真假。常見的方法是讀取晶元的id號。當然有些工程師朋友的暫存器設定,以及時序設定有問題,讀取晶元的id號就會錯。讀取id是最基本的操作。2.其次確認晶元無質量問題後,再確定是硬體,還是軟體方面的問題。一般軟體方面,問題很容易解決。硬體問題,需...