DM9000A網絡卡模組除錯總結

2021-05-25 07:49:48 字數 1390 閱讀 8289

從開始寫**到除錯成功大概花了兩周時間,首先把出現的問題歸納一下。

1、兩台電腦用直連網線通訊,需要指定各自的ip位址,若有連線故障(乙個嘆號),改變一下ip,直到連線成功。這樣其中電腦a就學習到了

電腦b的mac位址,將這個mac位址寫入dm9000a網絡卡模組,將其與電腦a相連,電腦a將顯示連線成功(而不是在尋找ip),否則重新學習。

3、reset一定要給晶元足夠的時間讓其完成初始化,1s差不多,我只用了一次軟復位,只有人說要兩次軟復位,沒試;然後,linux驅動中一些看似囉嗦沒用的**不要忽視,例如mrcmdx這個暫存器驅動中有個地方連讀了兩次,其實有必要的,否則資料報第乙個位元組不是01;個人感覺讀完一幀資料後等下乙個中斷來了重讀下一幀的mrcmdx即可,不過還是可以嘗試一下讀完一幀後接著讀下一幀的mrcmdx,發現沒有下一幀再把中斷關掉。開中斷後各個狀態要立即返回,防止開中斷後立馬來中斷,這個開中斷防止只有第一包來中斷。另外,時鐘是50m,即20ns,是晶元手冊上的最短時鐘週期,不能採用最短的,可以適當降低時鐘為40m或25m試試。phy暫存器有人說操作不當反而影響穩定,我操作了沒有影響,可以通訊。注意dm9000中的par暫存器,10h~15h,若mac位址為90-fb-a6...-a4,則  10h寫入90,15h寫入a4。

4、乙太網相關,乙太網幀格式參考《乙太網資料幀的格式分析比較》,最常用的事ethernet ii,其次是ieee802.3。一下都是根據ethernet ii分析的。mac層18個位元組(目的mac、源mac、協議型別2位元組、fcs4位元組),上層46~1500個位元組。乙太網硬體自動在mac幀前新增前導碼和sd,以及fcs,故送給dm9000的資料長度最少為60個位元組(14+46),不夠要自己補0再送給dm9000,發ip和arp包都要補到60,長度暫存器填60。乙太網是大端格式,先傳送高8位,即如果16bit模式,高8位在0-7bit的位置。傳送時給dm9000的ip頭部校驗和不能設為0,其計算值與ip的長度等有關;與udp頭部校驗和能設為0,設為0則與udp的資料無關,否則有關;屬於哪個分組每次都不同,隨機的,可以把它固定為某個值;生存期是固定的。如果不自己計算,可把電腦給dm9000模組發的ip包中這幾個值拷貝到dm9000發給電腦的ip包中即可(傳送的資料要是一致的,且ip頭中屬於哪個分組即第3個字也要一樣,生存期也要一樣)。電腦會自動發一些特殊用途的ip包,它們的共同特點是有可選字段(一般是8900或8a00),即ip頭不止20位元組,可以以此區分電腦自動發的ip包和我自己發的ip包。

5、arp相關,cmd進入命令列,arp -a檢視arp快取,arp -s 192.168.1.8 f8-06-29-84-6f-a8建立連線,arp -d清空快取。

總之,根據linux驅動,不要自作主張去掉一些看似重複的**,細心檢查自己的程式。乙個檢查程式在哪出錯的方法是根據logic analyzer抓到的時序分析自己的**可能哪有問題。然後當不出現中斷時,要分析如何去找問題,如讀取中斷狀體暫存器等等方法。

STM32與DM9000A除錯(一)

dm9000a的phy 能夠以10base t 的標準在utp3 4 5或者以100base t的標準在utp5上介面通訊。它的自動協商功能是夠自動配置dm9000a最大地發揮出自身效能。它同時支援ieee 802.3x全雙工資料流通訊。1 處理器介面 引腳號名稱 電氣連線 說明35 ior fsm...

2410平台上dm9000a網絡卡驅動分析(六)

上面已經分析到中斷處理的接收中斷處理函式,下面分析傳送中斷處理函式。在前面,我們說到系統呼叫dmfe start xmit來進行資料傳送,當資料傳送完成後,將產生乙個資料傳送中斷,由interrupt函式檢測到該中斷後,將呼叫dmfe tx done 進行處理 static void dmfe tx...

DM9000A網路介面LwIP軟體元件的新增

2013 06 10 11 08 07 最近在de2開發板上進行 socket server範例除錯時,系統庫屬性設定中新增lwip軟體元件選項不可用,出錯資訊為 there is no compatible ethernet mac in your design.開發環境為quartus ii 和...