DM9000可以识别ID,但是与pc连不上去???

[复制链接]
4395|5
 楼主| jianghe911 发表于 2008-1-2 17:01 | 显示全部楼层 |阅读模式
我照着技创的极品arm做了一块板子,s3c2440的,网片为dm9000ae,cpu可以识别读出DM9000的id,但是与pc相连时出现:<br />U-Boot&nbsp;1.1.2&nbsp;(Jan&nbsp;&nbsp;2&nbsp;2008&nbsp;-&nbsp;10:49:23)<br /><br /><br />U-Boot&nbsp;code:&nbsp;33C00000&nbsp;-&gt&nbsp;33C2B19C&nbsp;&nbsp;BSS:&nbsp;-&gt&nbsp;33C64BCC<br /><br />RAM&nbsp;Configuration:<br /><br />Bank&nbsp;#0:&nbsp;30000000&nbsp;64&nbsp;MB<br /><br />Get&nbsp;flash&nbsp;bank&nbsp;0&nbsp;size&nbsp;@&nbsp;0x0<br /><br />Total&nbsp;Flash&nbsp;bank's&nbsp;sizes:&nbsp;0x200000<br /><br />protect&nbsp;monitor&nbsp;2b19c&nbsp;bytes&nbsp;@&nbsp;address&nbsp;0<br /><br />Flash:&nbsp;&nbsp;2&nbsp;MB<br /><br />NAND:Flash&nbsp;chip&nbsp;found:<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Manufacturer&nbsp;ID:&nbsp;0xEC,&nbsp;Chip&nbsp;ID:&nbsp;0x76&nbsp;(Samsung&nbsp;unknown&nbsp;64Mb)<br /><br />1&nbsp;flash&nbsp;chips&nbsp;found.&nbsp;Total&nbsp;nand_chip&nbsp;size:&nbsp;64&nbsp;MB<br /><br />64&nbsp;MB<br /><br />***&nbsp;Warning&nbsp;-&nbsp;bad&nbsp;CRC,&nbsp;using&nbsp;default&nbsp;environment<br /><br /><br />Silicon&nbsp;Motion&nbsp;501&nbsp;not&nbsp;detected<br /><br />In:&nbsp;&nbsp;&nbsp;&nbsp;serial<br /><br />Out:&nbsp;&nbsp;&nbsp;serial<br /><br />Err:&nbsp;&nbsp;&nbsp;serial<br /><br />Found&nbsp;DM9000&nbsp;ID:90000a46&nbsp;at&nbsp;address&nbsp;10000000,&nbsp;ethaddr&nbsp;=&nbsp;08:00:3e:26:0a:5b!<br /><br />DM9000&nbsp;work&nbsp;in&nbsp;16&nbsp;bus&nbsp;width<br /><br />Not&nbsp;link&nbsp;of&nbsp;ethernet<br /><br /><br />SD&nbsp;Initialize&nbsp;fail..<br /><br /><br />Hit&nbsp;any&nbsp;key&nbsp;to&nbsp;stop&nbsp;autoboot:&nbsp;&nbsp;0&nbsp;<br /><br />MDS522C@Xlongtech&nbsp;#&nbsp;set&nbsp;ipaddr&nbsp;192.168.3.15<br /><br />MDS522C@Xlongtech&nbsp;#&nbsp;set&nbsp;serverip&nbsp;192.168.3.96<br /><br />MDS522C@Xlongtech&nbsp;#&nbsp;t&nbsp;30038000&nbsp;eboot.nb0<br /><br />DM9000&nbsp;work&nbsp;in&nbsp;16&nbsp;bus&nbsp;width<br /><br />Not&nbsp;link&nbsp;of&nbsp;ethernet<br /><br />TFTP&nbsp;from&nbsp;server&nbsp;192.168.3.96;&nbsp;our&nbsp;IP&nbsp;address&nbsp;is&nbsp;192.168.3.15<br /><br />Filename&nbsp;'eboot.nb0'.<br /><br />Load&nbsp;address:&nbsp;0x30038000<br /><br />Loading:&nbsp;T&nbsp;T&nbsp;T&nbsp;T&nbsp;T&nbsp;T&nbsp;T&nbsp;T&nbsp;T&nbsp;T&nbsp;<br /><br />Retry&nbsp;count&nbsp;exceeded;&nbsp;starting&nbsp;again<br /><br />TFTP&nbsp;from&nbsp;server&nbsp;192.168.3.96;&nbsp;our&nbsp;IP&nbsp;address&nbsp;is&nbsp;192.168.3.15<br /><br />Filename&nbsp;'eboot.nb0'.<br /><br />Load&nbsp;address:&nbsp;0x30038000<br /><br />Loading:&nbsp;T&nbsp;T&nbsp;T&nbsp;T&nbsp;<br />一直重复,感觉与pc没有连接上,拔掉网线的现象与这个一摸一样,驱动程序如下:<br />#include&nbsp;&ltcommon.h&gt<br />#include&nbsp;&ltcommand.h&gt<br />#include&nbsp;&ltnet.h&gt<br /><br />#ifdef&nbsp;CONFIG_DRIVER_DM9000<br /><br />#if&nbsp;(CONFIG_COMMANDS&nbsp;&&nbsp;CFG_CMD_NET)<br />#define&nbsp;DM9000_VID_L&nbsp;&nbsp;&nbsp;&nbsp;0x28<br />#define&nbsp;DM9000_VID_H&nbsp;&nbsp;&nbsp;&nbsp;0x29<br />#define&nbsp;DM9000_PID_L&nbsp;&nbsp;&nbsp;&nbsp;0x2A<br />#define&nbsp;DM9000_PID_H&nbsp;&nbsp;&nbsp;&nbsp;0x2B<br />#define&nbsp;DM9000_ID&nbsp;&nbsp;&nbsp;&nbsp;0x90000A46<br />#define&nbsp;DM9000_INT_MII&nbsp;&nbsp;&nbsp;&nbsp;0x00<br />#define&nbsp;DM9000_PPTR&nbsp;&nbsp;&nbsp;*(volatile&nbsp;u16&nbsp;*)(DM9000_BASE)<br />#define&nbsp;DM9000_PDATA&nbsp;&nbsp;*(volatile&nbsp;u16&nbsp;*)(DM9000_BASE&nbsp;+&nbsp;4)<br />static&nbsp;unsigned&nbsp;char&nbsp;ior(int&nbsp;reg);<br />static&nbsp;int&nbsp;polling_times;<br /><br /><br /><br />/*&nbsp;&nbsp;edit&nbsp;by&nbsp;davicom&nbsp;*/<br />static&nbsp;void&nbsp;eth_mem_test&nbsp;(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;u8&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;u16&nbsp;j&nbsp;,&nbsp;k&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;iow(0x00,&nbsp;3);<br />&nbsp;&nbsp;&nbsp;&nbsp;udelay(50);&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;delay&nbsp;100us&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;iow(0x00,&nbsp;2);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;iow(0xff&nbsp;,&nbsp;0x00);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;\n&nbsp;&ltDM9000A&gt&nbsp;REG&nbsp;R/W&nbsp;TEST&nbsp;&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt&nbsp;7;&nbsp;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iow(0x16&nbsp;+&nbsp;i,&nbsp;(0x5a&nbsp;+&nbsp;i));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(ior(0x16&nbsp;+&nbsp;i)&nbsp;!=&nbsp;(0x5a&nbsp;+&nbsp;i))&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iow(0x16&nbsp;+&nbsp;i,&nbsp;0x00);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if(i&nbsp;!=&nbsp;7)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;===&gt&nbsp;REG&nbsp;R/W&nbsp;FALSE&nbsp;&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;===&gt&nbsp;REG&nbsp;R/W&nbsp;PASS&nbsp;&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i&nbsp;=&nbsp;0&nbsp;;&nbsp;i&nbsp;&lt&nbsp;0x4&nbsp;;&nbsp;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//if((i&nbsp;*&nbsp;0x1000)&nbsp;!=&nbsp;((ior(0xf4)&lt&lt8)+ior(0xf5)))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;\n&nbsp;io&nbsp;mode&nbsp;error&nbsp;or&nbsp;data&nbsp;jump&nbsp;error&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k&nbsp;=&nbsp;0xaa55;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;\n&nbsp;&ltDM9000A&gt&nbsp;FIFO&nbsp;TEST&nbsp;R:&nbsp;%02x%02x&nbsp;W:&nbsp;%02x%02x&nbsp;&quot;,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ior(0xf5)&nbsp;,&nbsp;ior(0xf4)&nbsp;,&nbsp;ior(0xfa)&nbsp;,&nbsp;ior(0xfb));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DM9000_PPTR&nbsp;=&nbsp;0xf8;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(j&nbsp;=&nbsp;0&nbsp;;&nbsp;j&nbsp;&lt&nbsp;0x1000&nbsp;;&nbsp;j&nbsp;+=&nbsp;2)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k&nbsp;-=&nbsp;0x0303;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DM9000_PDATA&nbsp;=&nbsp;k;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DM9000_PPTR&nbsp;=&nbsp;0xf0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k&nbsp;=&nbsp;DM9000_PDATA;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k&nbsp;=&nbsp;DM9000_PDATA;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k&nbsp;=&nbsp;0xaa55;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DM9000_PPTR&nbsp;=&nbsp;0xf2;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(j&nbsp;=&nbsp;0&nbsp;;&nbsp;j&nbsp;&lt&nbsp;0x1000&nbsp;;&nbsp;j&nbsp;+=&nbsp;2)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k&nbsp;-=&nbsp;0x0303;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(DM9000_PDATA&nbsp;!=&nbsp;k)break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(j&nbsp;!=&nbsp;0x1000)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;===&gt&nbsp;FIFO&nbsp;TEST&nbsp;R/W&nbsp;FALSE&nbsp;&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;===&gt&nbsp;FIFO&nbsp;TEST&nbsp;R/W&nbsp;PASS&nbsp;&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />/*&nbsp;&nbsp;edit&nbsp;by&nbsp;davicom&nbsp;*/<br /><br />/*&nbsp;packet&nbsp;page&nbsp;register&nbsp;access&nbsp;functions&nbsp;*/<br />static&nbsp;u32&nbsp;GetDM9000ID(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;u32&nbsp;&nbsp;&nbsp;&nbsp;id_val;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;DM9000_PPTR&nbsp;=&nbsp;DM9000_PID_H;<br />&nbsp;&nbsp;&nbsp;&nbsp;id_val&nbsp;=&nbsp;(DM9000_PDATA&nbsp;&&nbsp;0xff)&nbsp;&lt&lt&nbsp;8;<br />&nbsp;&nbsp;&nbsp;&nbsp;DM9000_PPTR&nbsp;=&nbsp;DM9000_PID_L;<br />&nbsp;&nbsp;&nbsp;&nbsp;id_val+=&nbsp;(DM9000_PDATA&nbsp;&&nbsp;0xff);<br />&nbsp;&nbsp;&nbsp;&nbsp;id_val&nbsp;=&nbsp;id_val&nbsp;&lt&lt&nbsp;16;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;DM9000_PPTR&nbsp;=&nbsp;DM9000_VID_H;<br />&nbsp;&nbsp;&nbsp;&nbsp;id_val&nbsp;+=&nbsp;(DM9000_PDATA&nbsp;&&nbsp;0xff)&nbsp;&lt&lt&nbsp;8;<br />&nbsp;&nbsp;&nbsp;&nbsp;DM9000_PPTR&nbsp;=&nbsp;DM9000_VID_L;<br />&nbsp;&nbsp;&nbsp;&nbsp;id_val&nbsp;+=&nbsp;(DM9000_PDATA&nbsp;&&nbsp;0xff);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;id_val;<br />}<br /><br />static&nbsp;unsigned&nbsp;short&nbsp;get_reg&nbsp;(int&nbsp;regno)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;DM9000_PPTR&nbsp;=&nbsp;regno;<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(unsigned&nbsp;short)&nbsp;DM9000_PDATA;<br />}<br /><br /><br />static&nbsp;void&nbsp;put_reg&nbsp;(int&nbsp;regno,&nbsp;unsigned&nbsp;short&nbsp;val)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;DM9000_PPTR&nbsp;=&nbsp;regno;<br />&nbsp;&nbsp;&nbsp;&nbsp;DM9000_PDATA&nbsp;=&nbsp;val;<br />}<br /><br />static&nbsp;void&nbsp;iow(int&nbsp;reg,&nbsp;u8&nbsp;value)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;DM9000_PPTR&nbsp;=&nbsp;reg;<br />&nbsp;&nbsp;&nbsp;&nbsp;DM9000_PDATA&nbsp;&nbsp;=&nbsp;&nbsp;value&nbsp;&&nbsp;0xff;<br />}<br /><br />static&nbsp;unsigned&nbsp;char&nbsp;ior(int&nbsp;reg)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;DM9000_PPTR&nbsp;=&nbsp;reg;<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;DM9000_PDATA&nbsp;&&nbsp;0xff;<br />}<br /><br />static&nbsp;void&nbsp;eth_reset&nbsp;(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;IoMode;<br />&nbsp;&nbsp;&nbsp;&nbsp;u8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp;<br />&nbsp;&nbsp;&nbsp;&nbsp;//printf(&quot;----&gteth_reset&nbsp;\n&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;iow(0x1f,&nbsp;0x00);/*&nbsp;Enable&nbsp;PHY&nbsp;,&nbsp;Let&nbsp;GPIO0&nbsp;output&nbsp;value&nbsp;=&nbsp;&nbsp;0*/<br />&nbsp;&nbsp;&nbsp;&nbsp;udelay(50);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;iow(0,&nbsp;3);/*&nbsp;register&nbsp;0&nbsp;set&nbsp;1&nbsp;in&nbsp;order&nbsp;to&nbsp;reset,&nbsp;auto&nbsp;clean&nbsp;after&nbsp;10us*/<br />&nbsp;&nbsp;&nbsp;&nbsp;udelay(50);/*&nbsp;delay&nbsp;100us&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;iow(0,&nbsp;3);/*&nbsp;register&nbsp;0&nbsp;set&nbsp;1&nbsp;in&nbsp;order&nbsp;to&nbsp;reset,&nbsp;auto&nbsp;clean&nbsp;after&nbsp;10us*/<br />&nbsp;&nbsp;&nbsp;&nbsp;udelay(50);/*&nbsp;delay&nbsp;100us&nbsp;*/<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;IoMode&nbsp;=&nbsp;ior(0xfe)&nbsp;&gt&gt&nbsp;6;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;ISR&nbsp;bit7:6&nbsp;keeps&nbsp;I/O&nbsp;mode&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;if(!IoMode)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;DM9000&nbsp;work&nbsp;in&nbsp;16&nbsp;bus&nbsp;width\n&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(IoMode&nbsp;==&nbsp;2)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;DM9000&nbsp;work&nbsp;in&nbsp;8&nbsp;bus&nbsp;width\n&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(IoMode&nbsp;==&nbsp;1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;DM9000&nbsp;work&nbsp;in&nbsp;32&nbsp;bus&nbsp;width\n&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;DM9000&nbsp;work&nbsp;in&nbsp;wrong&nbsp;bus&nbsp;width,&nbsp;error\n&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;iow(0,&nbsp;0);<br />&nbsp;&nbsp;&nbsp;&nbsp;iow(0x8,&nbsp;0x3f);/*Back&nbsp;Pressure&nbsp;Threshold&nbsp;Register*/<br />&nbsp;&nbsp;&nbsp;&nbsp;iow(0x2f,&nbsp;0);/*Special&nbsp;Mode*/<br />&nbsp;&nbsp;&nbsp;&nbsp;iow(0x1,&nbsp;0x2c);/*Clear&nbsp;Wakeup,&nbsp;TX1&nbsp;and&nbsp;TX2&nbsp;complete&nbsp;status*/<br />&nbsp;&nbsp;&nbsp;&nbsp;//iow(0xfe,&nbsp;0x0f);<br />&nbsp;&nbsp;&nbsp;&nbsp;iow(0x5,&nbsp;0x31);/*&nbsp;enable&nbsp;rx&nbsp;fuction&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;iow(0xff,&nbsp;0x80);&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;//iow(0x1e,&nbsp;0x01);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Let&nbsp;GPIO0&nbsp;output&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;//iow(0xff,&nbsp;0x80);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;disable&nbsp;interrupt&nbsp;and&nbsp;sram&nbsp;read/write&nbsp;point&nbsp;auto&nbsp;return*/<br />&nbsp;&nbsp;&nbsp;&nbsp;//iow(0x01,&nbsp;0xc);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;clear&nbsp;TX&nbsp;status&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;//iow(0x5,&nbsp;0x33);&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;enable&nbsp;rx&nbsp;fuction,&nbsp;note:&nbsp;must&nbsp;set&nbsp;promiscuous&nbsp;mode&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;//iow(0x5,&nbsp;0x31);&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;enable&nbsp;rx&nbsp;fuction&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;//ior(0x6);<br />&nbsp;&nbsp;&nbsp;&nbsp;//iow(0x2,&nbsp;1);&nbsp;&nbsp;&nbsp;/*&nbsp;enable&nbsp;tx&nbsp;fuction&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;IoMode&nbsp;=&nbsp;ior(0x01);<br />&nbsp;&nbsp;&nbsp;&nbsp;if(IoMode&nbsp;&&nbsp;0x40)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;Link&nbsp;on&nbsp;ethernet&nbsp;at:%d&nbsp;Mbps\n&quot;,&nbsp;(IoMode&nbsp;&&nbsp;0x80)&nbsp;?&nbsp;10:100);<br />&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;Not&nbsp;link&nbsp;of&nbsp;ethernet\n&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;//printf(&quot;&lt----&nbsp;eth_reset&nbsp;\n&quot;);<br />}<br /><br /><br />void&nbsp;DM9000_get_enetaddr&nbsp;(uchar&nbsp;*&nbsp;addr)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;i,&nbsp;oft;<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;env_enetaddr[6];<br />&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;*tmp&nbsp;=&nbsp;getenv&nbsp;(&quot;ethaddr&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;&nbsp;&nbsp;&nbsp;*tmp1&nbsp;=&nbsp;tmp;<br />&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;*end;<br />&nbsp;&nbsp;&nbsp;&nbsp;u32&nbsp;&nbsp;&nbsp;&nbsp;ID;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(i=0;&nbsp;i&lt6;&nbsp;i++)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;env_enetaddr&nbsp;=&nbsp;tmp&nbsp;?&nbsp;simple_strtoul(tmp,&nbsp;&end,&nbsp;16)&nbsp;:&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(tmp)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp&nbsp;=&nbsp;(*end)&nbsp;?&nbsp;end+1&nbsp;:&nbsp;end;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;memcpy&nbsp;(addr,&nbsp;env_enetaddr,&nbsp;6);<br />&nbsp;&nbsp;&nbsp;&nbsp;ID&nbsp;=&nbsp;GetDM9000ID();<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(&nbsp;ID&nbsp;!=&nbsp;DM9000_ID){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;not&nbsp;found&nbsp;the&nbsp;dm9000\n&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;}<br />&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;Found&nbsp;DM9000&nbsp;ID:%x&nbsp;at&nbsp;address&nbsp;%x,&nbsp;ethaddr&nbsp;=&nbsp;%s!\n&quot;,&nbsp;ID,&nbsp;&nbsp;DM9000_BASE,&nbsp;tmp1);<br />&nbsp;&nbsp;&nbsp;&nbsp;eth_reset&nbsp;();<br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(i&nbsp;=&nbsp;0,&nbsp;oft&nbsp;=&nbsp;0x10;&nbsp;i&nbsp;&lt&nbsp;6;&nbsp;i++,&nbsp;oft++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iow(oft,&nbsp;addr);<br />&nbsp;&nbsp;&nbsp;&nbsp;iow(0x1d,&nbsp;0x80);/*receive&nbsp;broadcast&nbsp;packets*/<br />&nbsp;&nbsp;&nbsp;&nbsp;return;<br />}<br /><br />void&nbsp;eth_halt&nbsp;(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;GetDM9000ID();<br />}<br /><br />int&nbsp;eth_init&nbsp;(bd_t&nbsp;*&nbsp;bd)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;//eth_mem_test();<br />&nbsp;&nbsp;&nbsp;&nbsp;eth_reset();<br />&nbsp;&nbsp;&nbsp;&nbsp;polling_times=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;<br />}<br /><br />/*&nbsp;Get&nbsp;a&nbsp;data&nbsp;block&nbsp;via&nbsp;Ethernet&nbsp;*/<br />extern&nbsp;int&nbsp;eth_rx&nbsp;(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;short&nbsp;rxlen;<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;short&nbsp;*addr;<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;short&nbsp;status;<br />&nbsp;&nbsp;&nbsp;&nbsp;u8&nbsp;RxRead;<br />&nbsp;&nbsp;&nbsp;&nbsp;u8&nbsp;*tmp;<br />&nbsp;&nbsp;&nbsp;&nbsp;polling_times++;<br />&nbsp;&nbsp;&nbsp;&nbsp;//printf(&quot;Read&nbsp;address=0x%04x&nbsp;%04x\n&quot;,ior(0xf4),&nbsp;ior(0xf5));&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ior(0xf4);&nbsp;ior(0xf5);&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;RxRead&nbsp;=&nbsp;ior(0xf0);<br />&nbsp;&nbsp;&nbsp;&nbsp;RxRead&nbsp;=&nbsp;(DM9000_PDATA)&nbsp;&&nbsp;0xff;<br />&nbsp;&nbsp;&nbsp;&nbsp;RxRead&nbsp;=&nbsp;(DM9000_PDATA)&nbsp;&&nbsp;0xff;<br />&nbsp;&nbsp;&nbsp;&nbsp;RxRead&nbsp;=&nbsp;(DM9000_PDATA)&nbsp;&&nbsp;0xff;<br />&nbsp;&nbsp;&nbsp;&nbsp;RxRead&nbsp;=&nbsp;(DM9000_PDATA)&nbsp;&&nbsp;0xff;<br />&nbsp;&nbsp;&nbsp;&nbsp;RxRead&nbsp;=&nbsp;(DM9000_PDATA)&nbsp;&&nbsp;0xff;<br />&nbsp;&nbsp;&nbsp;&nbsp;RxRead&nbsp;=&nbsp;(DM9000_PDATA)&nbsp;&&nbsp;0xff;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;//printf(&quot;Read&nbsp;address=0x%04x&nbsp;%04x\n&quot;,ior(0xfa),&nbsp;ior(0xfb));&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;//udelay(1000);<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(RxRead&nbsp;!=&nbsp;1)&nbsp;&nbsp;/*&nbsp;no&nbsp;data&nbsp;*/&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;DM9000_PPTR&nbsp;=&nbsp;0xf2;&nbsp;/*&nbsp;set&nbsp;read&nbsp;ptr&nbsp;++&nbsp;*/<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;status&nbsp;=&nbsp;DM9000_PDATA;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;get&nbsp;stat&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;rxlen&nbsp;=&nbsp;DM9000_PDATA;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;get&nbsp;len&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;//printf(&quot;rxlen&nbsp;=&nbsp;%d\n&quot;,&nbsp;rxlen);<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(rxlen&nbsp;&gt&nbsp;PKTSIZE_ALIGN&nbsp;+&nbsp;PKTALIGN)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf&nbsp;(&quot;packet&nbsp;too&nbsp;big!&nbsp;%d&nbsp;%d\n&quot;,&nbsp;rxlen,&nbsp;PKTSIZE_ALIGN&nbsp;+&nbsp;PKTALIGN);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(addr&nbsp;=&nbsp;(unsigned&nbsp;short&nbsp;*)&nbsp;NetRxPackets[0],&nbsp;i&nbsp;=&nbsp;rxlen&nbsp;&gt&gt&nbsp;1;&nbsp;i&nbsp;&gt&nbsp;0;&nbsp;i--)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*addr++&nbsp;=&nbsp;DM9000_PDATA;<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(rxlen&nbsp;&&nbsp;1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*addr&nbsp;=&nbsp;DM9000_PDATA;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Pass&nbsp;the&nbsp;packet&nbsp;up&nbsp;to&nbsp;the&nbsp;protocol&nbsp;layers.&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;NetReceive&nbsp;(NetRxPackets[0],&nbsp;rxlen);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;rxlen;<br />}<br /><br />/*&nbsp;Send&nbsp;a&nbsp;data&nbsp;block&nbsp;via&nbsp;Ethernet.&nbsp;*/<br />extern&nbsp;int&nbsp;eth_send&nbsp;(volatile&nbsp;void&nbsp;*packet,&nbsp;int&nbsp;length)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;volatile&nbsp;unsigned&nbsp;short&nbsp;*addr;<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;tmo;<br />&nbsp;&nbsp;&nbsp;&nbsp;u8&nbsp;&nbsp;&nbsp;&nbsp;TxStatus;<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;length1&nbsp;=&nbsp;length;<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;IoMode;<br />retry:<br />&nbsp;&nbsp;&nbsp;&nbsp;TxStatus&nbsp;=&nbsp;ior(0x01);<br />&nbsp;&nbsp;&nbsp;&nbsp;TxStatus&nbsp;=&nbsp;TxStatus&nbsp;&&nbsp;0xc;<br />#if&nbsp;0<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Test&nbsp;to&nbsp;see&nbsp;if&nbsp;the&nbsp;chip&nbsp;has&nbsp;allocated&nbsp;memory&nbsp;for&nbsp;the&nbsp;packet&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!TxStatus)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf&nbsp;(&quot;unable&nbsp;to&nbsp;send&nbsp;packet;&nbsp;retrying...&nbsp;%d\n&quot;,&nbsp;TxStatus);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(tmo&nbsp;=&nbsp;get_timer&nbsp;(0)&nbsp;+&nbsp;&nbsp;CFG_HZ;&nbsp;get_timer&nbsp;(0)&nbsp;&lt&nbsp;tmo;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*NOP*/;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IoMode&nbsp;=&nbsp;ior(0x01);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(IoMode&nbsp;&&nbsp;0x40)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eth_reset&nbsp;();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;goto&nbsp;retry;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />#endif<br />&nbsp;&nbsp;&nbsp;&nbsp;//printf(&quot;polling&nbsp;times&nbsp;=&nbsp;%d\n&quot;,polling_times);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;DM9000_PPTR&nbsp;=&nbsp;0xf8;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;data&nbsp;copy&nbsp;ready&nbsp;set&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;copy&nbsp;data&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(addr&nbsp;=&nbsp;packet;&nbsp;length&nbsp;&gt&nbsp;0;&nbsp;length&nbsp;-=&nbsp;2)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//printf(&quot;[%02x][%02x]&quot;,&nbsp;*(u8&nbsp;*)addr,&nbsp;*((u8&nbsp;*)addr&nbsp;+&nbsp;1));&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DM9000_PDATA&nbsp;=&nbsp;*addr++;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;//printf(&quot;\n&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;iow(0xfd,&nbsp;(length1&nbsp;&gt&gt&nbsp;8)&nbsp;&&nbsp;0xff);&nbsp;&nbsp;/*set&nbsp;transmit&nbsp;leng&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;iow(0xfc,&nbsp;length1&nbsp;&&nbsp;0xff);<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;start&nbsp;transmit&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;iow(0x02,&nbsp;1);<br />&nbsp;&nbsp;&nbsp;&nbsp;polling_times=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;<br />}<br />#endif&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;COMMANDS&nbsp;&&nbsp;CFG_NET&nbsp;*/<br /><br />#endif&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;CONFIG_DRIVER_DM9000&nbsp;*/<br />电路检查没有发现问题!!<br />希望各位大虾帮看看啊!!!<br />谢谢了!!!
阿南 发表于 2008-1-2 17:39 | 显示全部楼层

与PC的windows系统相连时,有无显示"网络已连接"?

如果没有,物理层还有问题
bass339 发表于 2008-1-3 09:08 | 显示全部楼层

回复主题:DM9000可以识别ID,但是与pc连不上去???

1.物理连接可能有问题<br />2.驱动可能有问题
ARM.9 发表于 2008-1-5 13:46 | 显示全部楼层

驱动不一样。

驱动不一样,极品2440用的不是DM9000AE。所以驱动有些区别。你可以找些别人的驱动来看下。现在很多开发板上用的网络芯片都改为DM9000AE了。
 楼主| jianghe911 发表于 2008-1-8 19:37 | 显示全部楼层

谢谢各位:极品arm用的是dm9000ae啊!

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

14

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部