dm9000ae 在u-boot上的移植小结
好久没更新blog了,有点忙也有点懒^_^。自从上次十分简单地移植dm9000到试验箱后,就一直没关注具体的细节,直到这几天自己移植dm9000ae的驱动时才发现网友遇到的问题。u-boot自带的dm9000驱动是针对dm9000,一款比较老的isa接口芯片,而现在一般用的是dm9000ae升级版芯片。这个升级并非完全兼容,稍不注意,就会有莫名其妙的错误。
1.超时问题,症状为不断地出现T。通过wireshark的抓包,有发送也有返回的包,但返回的包并没有被处理,直到T,然后重新发包。对比Linux的驱动,在收包前Linux会有
ior(db,0xf4);
ior(db,0xf5);
这两个动作。添加后问题解决。在这里说是缓冲区要复位,但我对比dm9000和dm9000ae的datasheet,都是说IMR位7置一时,缓冲区满时会自动复位。看不出dm9000和dm9000ae有什么差别...
2.tftp传送失败。传送uImage,bootm后出现"Bad Data CRC"。wireshark抓包,发送和接收都正常。通过cmp与串口传过来的uImage对比,发现每1468个字节后会有8个字节的丢失。打开驱动的debug,print收到的包,发现收到的数据都正确,只不过包的最大长度为1460,后面的8个字节在随后的包中被上层丢弃了。同时,wireshark显示tftp的分包大小为1468,修改tftp的最大分包大小为1460,问题解决。
3.每次接收都先停顿一个T。抓包,发现第一个arp包没有被抓到,即dm9000还没正常工作。而且每次接收都会等待一个T,即接收完后dm9000被停止。讲eth_init添加到board的初始化并注释eth_halt的内容,一切搞定^_^。
总结很轻松,过程总是充满辛酸...经过半年的coding,分析能力也有了很大的提高。另外,工作很忙,希望大家不要问我要代码^_^

评论
深圳爱欣文科技有限公司是DM9000AE芯片大陆总代理,希望与您以及各大工程师们合作,我们提供技术支持,它包括:1.提供完整的开发资料及强大的技术支援,成熟可靠的产品方案.
2.芯片的数据手册,原理图,驱动.
3.Layoeut(布板指南).
4.编程指南.可以提供各种产品方案,由原厂工程师解决各种技术问题。
欢迎来电索取资料,谢谢!
公司电话:02787880506 手机:13277905433
MSN:chengjungang850907@hotmail.com
在线QQ:961219157
邮箱地址:axw12580@163.com
公司网址:www.axwdragon.com
联系人:程俊刚
深圳爱欣文科技有限公司成立于1989年,长期专业从事国际最新集成电路(IC)代理批发销售业务,及其应用技术研发的一条龙业务,是集研发、商贸于体的全球化IC代理公司.
作为国内代理,我公司可提供网络部分完善的解决方案和技术支持! 对于我们的客户我们可以提供整套的产品生产方案,在产品生产过程中如果贵公司遇到技术上的问题我们可以免费为贵公司提供:
1.提供完整的开发资料及强大的技术支援,成熟可靠的产品方案.
2.芯片的数据手册,原理图,驱动.
3.Layoeut(布板指南).
4.编程指南.可以提供各种产品方案,由原厂工程师解决各种技术问题。
公司电话:02787880506 手机:13277905433
MSN:chengjungang850907@hotmail.com
在线QQ:961219157
邮箱地址:axw12580@163.com
公司网址:www.axwdragon.com
联系人:程俊刚
将eth_init添加到board的初始化并注释eth_halt的内容,一切搞定^_^ ?是什么意思,是类似lib_arm/board.c 文件中的start_armboot 函数中吗?
我用的也是dm9000aep,在uboot下移植太难了,到现在还没调通,问题和liu.xuegang提到的差不多,发送正常,接收不正常,我跟踪发现主要是数据包会丢失,希望能得到博主的帮助,也希望有用dm9000aep,移植成功的指点一下,谢谢!!
我的邮箱是 young45@126.com
呵呵,没时间调试U-BOOT了,你可以参考我的驱动http://www.blogbus.com/user/?blogid=1223936&mm=Post&aa=Edit&page=&userid=0&id=21641490
(2008-05-25 22:29:30)
回复 liu.xuegang 说:
你试试在dm9000接收的时候加入:
ior(db,0xf4);
ior(db,0xf5);
严格来说应该是在eth_rx中添加
DM9000_ior(DM9000_MRRH);
DM9000_ior(DM9000_MRRL); 吧;
我用的是uboot 1.1.4;这样修改后还是没有结果。
跟踪可以发现,ping 主机时,发送正常,接收大于一定字节后就会丢失14字节的数据,很稳定,不是liu.xuegang的问题和我是否相同,目前还不能调试通过,不过pc机回复短数据的话接收是正常的,我测试通过过!
呵呵,没时间调试U-BOOT了,你可以参考我的驱动http://www.blogbus.com/user/?blogid=1223936&mm=Post&aa=Edit&page=&userid=0&id=21641490
(2008-05-25 22:28:16)
rnbxqh qwtlxprjo zlygbmc srjo qbvxmeywz fsgpiajn ihkpdzj [URL]http://www.zfidyq.ahpxkwi.com[/URL] psgqco ofnmu
stlxuhko bzhpemngr fuhnrps bkljg ajgisbvun keqh gwpdymts http://www.sbvf.ujvnch.com
kzey phkl xscwhjkti fgvs tofey ozcbiyn zbwxlq
博主:你好!我在S3c2410上移植uboot1.3.1网卡是DM9000AEP,没有nor flash,两片三星的32M nand flash,现在移植差不多了。只是板子ping不通主机,而且插上交叉线网卡LED也不亮,只是ping的时候亮一下就灭了,提示
host 192.168.7.6 not alive
请问是不是网卡驱动的问题,我就是用的uboot里的DM9000的驱动没有改,谢谢
博主:你好!我在S3c2410上移植uboot1.3.1网卡是DM9000AEP,没有nor flash,两片三星的32M nand flash,现在移植差不多了。只是板子ping不通主机,而且插上交叉线网卡LED也不亮,只是ping的时候亮一下就灭了,提示
host 192.168.7.6 not alive
请问是不是网卡驱动的问题,我就是用的uboot里的DM9000的驱动没有改,谢谢
主人都系广州葛啊?我个专业也是网络工程啊,师兄能同我讲下关于网工呢个专业的方向吗?谢谢啦。
我大一的时候关注过网络工程,后来转到嵌入式开发了。
我认为,行行出状元,学精了那里都一样。
(2008-03-31 09:34:07)
我现在发现用2440A发送数据的时候没有问题,但是接收到ping的数据打印却都是0,再次ping就啥都接收不到。一下是我的一些打印记录:
请帮我分析分析,这是不是我的DM900AE与CPU有一个缓冲有关,以至于无法正常接受数据?
/*************************************
17:35 2008-3-20
*************************************/
[ lxi2440a ]# ping 192.168.0.63
eth_halt
phy_write(reg:0, value:32768)
eth_init()
resetting
dm9000 i/o: 0x28000300, id: 0x90000a46
phy_read(3): 32768
MAC: 08:00:3e:26:0a:5b
08:00:3e:26:0a:5b:
phy_read(17): 32768
operating at 100M full duplex mode
ping start going
sending ARP for 3f00a8c0
ARP broadcast 1
eth_send: length: 42
Send: 02x: ff ff ff ff ff ff 08 00
Send: 02x: 3e 26 0a 5b 08 06 00 01
Send: 02x: 08 00 06 04 00 01 08 00
Send: 02x: 3e 26 0a 5b c0 a8 00 de
Send: 02x: 00 00 00 00 00 00 c0 a8
Send: 02x: 00 3f
transmit done
ARP broadcast 2
eth_send: length: 42
Send: 02x: ff ff ff ff ff ff 08 00
Send: 02x: 3e 26 0a 5b 08 06 00 01
Send: 02x: 08 00 06 04 00 01 08 00
Send: 02x: 3e 26 0a 5b c0 a8 00 de
Send: 02x: 00 00 00 00 00 00 c0 a8
Send: 02x: 00 3f
transmit done
receiving packet
rx status: 0x4001 rx len: 96
passing packet to upper layer
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 //我打印ping时收到的数据,有问题。
packet received
packet received
Receive from protocol 0x0
rx status check: 255
receiving packet
rx status: 0xffff rx len: 65535 //明显len溢出了。
U-Boot 1.2.0 (Mar 20 2008 - 20:26:34)
U-Boot code: 33F80000 -> 33F9CDA0 BSS: -> 33FA2BE0
DRAM: 64 MB
Flash: 1 MB
NAND: NAND flash probing at 0x4E000000
64 MB
In: serial
Out: serial
Err: serial
Hit any key to stop autoboot: 0
[ lxi2440a ]# ping 192.168.0.63
你试试在dm9000接收的时候加入:
ior(db,0xf4);
ior(db,0xf5);
(2008-03-31 09:54:18)
楼主你好!以下是我在移植uboot1.2.0后ping网络时出现的问题,我不知道DM9000和DM9000AEP到底有何不同,能不能具体指点一下!
[ lxi2440a ]# ping 192.168.0.63
dm9000 i/o: 0x28000300, id: 0x90000a46
MAC: 08:00:3e:26:0a:5b
operating at 100M full duplex mode
ping failed; host 192.168.0.63 is not alive
[ lxi2440a ]# printenv
bootargs=console=ttySAC0 root=/dev/nfs nfsroot=192.168.0.1:/friendly-arm/rootfs_netserv ip=192.168.0.222:192.168.0.1:192.168.0.1:255.255.255.0:debian:eth0:off
bootcmd=dhcp; bootm
bootdelay=3
baudrate=115200
ethaddr=08:00:3e:26:0a:5b
ipaddr=192.168.0.222
serverip=192.168.0.1
netmask=255.255.255.0
stdin=serial
stdout=serial
stderr=serial
Environment size: 338/65532 bytes
[ lxi2440a ]# <INTERRUPT>
14:41 2008-3-18
使用wireshark工具检测网络。发现开发板ping主机时,主机可以收到开发板的请求,但主机发回去的结果开发板识别不出来,这个是什么原因呢?
我猜想,是不是ping的时候调用了网络芯片DM9000的驱动,但是发回来的时候网络芯片没法给2440A中断,让CPU处理ping回的结果?因为在启动后不ping网络时,主机现实网络没有连接好,也就是说主机没法认出有网络连接。
主机接收的ping请求信息:
36407 2178.263969 192.168.0.222 192.168.0.63 ICMP Echo (ping) request
Internet Protocol, Src: 192.168.0.222 (192.168.0.222), Dst: 192.168.0.63 (192.168.0.63)
Version: 4
Header length: 20 bytes
主机返回的ping请求信息(但开发板可能没有收到):
36408 2178.263997 192.168.0.63 192.168.0.222 ICMP Echo (ping) reply
Internet Protocol, Src: 192.168.0.63 (192.168.0.63), Dst: 192.168.0.222 (192.168.0.222)
Version: 4
Header length: 20 bytes
此外,我打开了头文件中定义的中断:#define CONFIG_USE_IRQ 1,也没有用,还是提示主机不存在,ping不通,不知怎么办。
你试试在dm9000接收的时候加入:
ior(db,0xf4);
ior(db,0xf5);
是dm9000接收包时出问题。
(2008-03-31 10:02:50)
我是DM9000AE的代理,希望有合作机会.
朱思坤 13798406509 zhskn_angel@hotmail.com
少左更新喔!~
记录下足迹嘛,投资自己,回报总是正面的
唉,有人体住,脚步行吴开,没计...
(2008-02-22 23:28:33)
请问博主是研究生吗?呵呵
你好,我是黑龙江大学的学生,毕业设计做的是关于DM9000AE的,但是缺乏资料。不知道你有没有这款芯片的说明和驱动,可以给我发一份吗?我的邮箱是xiaolin9120@163.com。谢谢了!!!
缺乏的不是资料,是时间对不?
我有这款芯片的使用经验,能给你么?
(2008-01-23 10:19:12)