DM9000双网卡不能同时用的问题,求指教!!

chalimenggan 2011-06-15 07:24:30
现在在2440上开发双网口,自己做的板子,用了两个DM9000A,操作系统是WinCE5.0。现在的问题是每个网口单独使用,比如只加载一个dm9000的驱动,这样的话,和PC机都能ping通,但是如果在wince中将两个网口的驱动同时编译进内核的话其中一个就不能用,但是连上网线的话指示灯还是会亮的,求指教~
我把注册表中的部分信息贴出来:
[HKEY_LOCAL_MACHINE\Comm\DM9CE1\Parms]
"BusNumber"=dword:0
"BusType"=dword:1

[HKEY_LOCAL_MACHINE\Comm\DM9CE2\Parms]
"BusNumber"=dword:1
"BusType"=dword:1
然后它们的IP我设置的不在同一网段,MAC地址设置的也不一样。

翻遍了各大论坛,最后我觉得问题可能跟"BusType"和"BusNumber"两个参数有关系,但是不知道操作系统是如何处理这两个参数的,在BSP中也没找到关于这两个参数的调用,请高手指教~
另外,据说一个DeviceID要对应一个WindowsID,不明白什么意思,求指教~
...全文
1605 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
shareCode 2013-09-15
  • 打赏
  • 举报
回复
问题解决否,我觉得要添加路由规则
lxflovecy 2013-04-01
  • 打赏
  • 举报
回复
楼主问题解决了吗,我也是同样的问题,求解答啊!
linziyuan89 2013-01-09
  • 打赏
  • 举报
回复
不能设在同一网段内
wjcapple 2011-12-12
  • 打赏
  • 举报
回复
期待楼主给出答案,不能就这么沉了,经验很重要啊
wuxililena 2011-11-17
  • 打赏
  • 举报
回复
26楼 你的弄好了吗?我这 是6410,同样的问题
elcon2009 2011-09-10
  • 打赏
  • 举报
回复
LZ调通了吗?我这里也是在2440下驱动双网卡DM9000,遇到了同样的问题,希望lz指导一下。
hohohahahoho 2011-07-06
  • 打赏
  • 举报
回复
我原来弄过一款ARM8020,270的,带两个DM9000是可以的,可能还是中断的问题,好像是上升沿触发吧
sunshine2122 2011-07-04
  • 打赏
  • 举报
回复
2440里的中断分大中断和小中断,在中断处理的时候,要先关大中断再关小中断
180度大转弯 2011-06-24
  • 打赏
  • 举报
回复
注意是不是设网关了?两网卡同时用不能都设网关的。
wolong98 2011-06-23
  • 打赏
  • 举报
回复
我对 2410的 中断不是很熟悉, 给不了建议~
chalimenggan 2011-06-22
  • 打赏
  • 举报
回复
顶起~
chalimenggan 2011-06-22
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 wolong98 的回复:]
参考自己的一个项目注册表的修改内容如下,只用一个DLL, 对你的注册表内容,主要少了下面几行

C/C++ code

[HKEY_LOCAL_MACHINE\Comm\Tcpip\Linkage]
"Bind"="DM9CE1"

[HKEY_LOCAL_MACHINE\Comm\Tcpip1\Linkage]
"Bind"="DM9EPCE1"






C/C……
[/Quote]

参考了你给的注册表,也就是只调用一个dll,结果还是不行。之后我检查了一下中断,是有一个网卡的中断没有产生,我尽可能详细地描述一下。

先贴一些OAL层中断部分的代码。

OEMInterruptEnable()...
case SYSINTR_ETHER: // Ethernet on EINT9.
s2440IOP->rEINTPEND = 0x200;
s2440IOP->rEINTMASK &= ~0x200;
if (s2440INT->rINTPND & BIT_EINT8_23) s2440INT->rINTPND = BIT_EINT8_23;
s2440INT->rINTMSK &= ~BIT_EINT8_23;
RETAILMSG(1,(TEXT("::: SYSINTR_DM9000AEP OEMInterruptEnable\r\n")));
break;
case SYSINTR_DM9000: // Ethernet on EINT14.

s2440IOP->rEINTPEND = 0x4000;
s2440IOP->rEINTMASK &= ~0x4000;
if (s2440INT->rINTPND & BIT_EINT8_23) s2440INT->rINTPND = BIT_EINT8_23;
s2440INT->rINTMSK &= ~BIT_EINT8_23;
RETAILMSG(1,(TEXT("::: SYSINTR_DM9000EP OEMInterruptEnable\r\n")));
break;


OEMInterruptDone()...
case SYSINTR_ETHER:
s2440INT->rINTMSK &= ~BIT_EINT8_23;
s2440IOP->rEINTMASK &= ~0x200;
RETAILMSG(1, (TEXT("::: SYSINTR_DM9000AEP OEMInterruptDone\r\n")));
break;
case SYSINTR_DM9000:
s2440INT->rINTMSK &= ~BIT_EINT8_23;
s2440IOP->rEINTMASK &= ~0x4000;
RETAILMSG(1, (TEXT("::: SYSINTR_DM9000EP OEMInterruptDone\r\n")));
break;


OEMInterruptHandler()...
if ( dwSubMask & (1 << 9))
{
s2440IOP->rEINTMASK |= 0x200;
s2440IOP->rEINTPEND = 0x200;
s2440INT->rSRCPND = BIT_EINT8_23;
if (s2440INT->rINTPND & BIT_EINT8_23) s2440INT->rINTPND = BIT_EINT8_23;
RETAILMSG(1,(TEXT("DM9000AEP interrupt----\r\n")));
return SYSINTR_ETHER;
}

if ( dwSubMask & (1 << 14))
{
s2440IOP->rEINTMASK |= 0x4000;
s2440IOP->rEINTPEND = 0x4000;
s2440INT->rSRCPND = BIT_EINT8_23;
if (s2440INT->rINTPND & BIT_EINT8_23) s2440INT->rINTPND = BIT_EINT8_23; RETAILMSG(1,(TEXT("DM9000EP interrupt----\r\n")));
return SYSINTR_DM9000 ;
}


这是关于这两个网卡中断部分的代码。如果只将其中一个网卡的驱动编译进内核,那么它们都可以进入各自的中断,从而能和PC机ping通。现在我将两个网卡都编译进内核以后,就只有一个网卡可以ping通。开机后的串口部分显示信息如下:

BWSCON=0x2211d120, BANKCON3=0x700, BANKCON4=0x700
BWSCON=0x22111120
[dm9: Chip signature is 90000A46
[dm9: Chip signature is 90000A46
::: SYSINTR_DM9000AEP OEMInterruptEnable
DM9000E:BWSCON=0x22111120, BANKCON3=0x700, BANKCON4=0x700
DM9000E:BWSCON=0x22151120
[dm9: Chip signature is 90000A46
[dm9: Chip signature is 90000A46
::: SYSINTR_DM9000EP OEMInterruptEnable
DeviceFolder::LoadDevice!Enumerate Found deprecated load instructions at (Drivers\BuiltIn\AFD). Driver cannot be unloaded.
DM9000EP interrupt----
::: SYSINTR_DM9000EP OEMInterruptDone
DM9000EP interrupt----
::: SYSINTR_DM9000EP OEMInterruptDone
.......
Explorer(V2.0) taskbar thread started.
NDISPWR:: Found adapter [DM9EPCE1]
NDISPWR:: Found adapter [DM9CE1]

从这些信息可以看出,两个网卡都执行了OEMInterruptEnable(),但是DM9000AEP没有进中断。我使用示波器辅助测试,发现当串口显示到第一个"DM9000EP interrupt----"的时候,DM9000AEP的中断引脚电平突然变成高电平,这是为什么它一直进入不了中断的原因。但是不知道问题出在了哪儿...
chalimenggan 2011-06-21
  • 打赏
  • 举报
回复
wolong98再帮忙看看吧~
wolong98 2011-06-21
  • 打赏
  • 举报
回复
参考自己的一个项目注册表的修改内容如下,只用一个DLL, 对你的注册表内容,主要少了下面几行

[HKEY_LOCAL_MACHINE\Comm\Tcpip\Linkage]
"Bind"="DM9CE1"

[HKEY_LOCAL_MACHINE\Comm\Tcpip1\Linkage]
"Bind"="DM9EPCE1"





IF BSP_DM9000
[HKEY_LOCAL_MACHINE\Comm\DM9CE]
"DisplayName"="DM9isa Fast Ethernet Adapter"
"Group"="NDIS"
"ImagePath"="dm9isa.dll"

[HKEY_LOCAL_MACHINE\Comm\DM9CE\Linkage]
"Route"=multi_sz:"DM9CE1","DM9CE2"

;第1块网卡配置信息
[HKEY_LOCAL_MACHINE\Comm\DM9CE1]
"DisplayName"="DM9isa Fast Ethernet Adapter"
"Group"="NDIS"
"ImagePath"="dm9isa.dll"

[HKEY_LOCAL_MACHINE\Comm\DM9CE1\Parms]
"BusNumber"=dword:0
"BusType"=dword:1
"XmitBuffer"=dword:20
"RecvBuffer"=dword:20
"SysIntr"=dword:1a
"IrqNumber"=dword:1a ;DM9000的硬件中断号
"IoAddress"=dword:18000300 ;LAN1:DM9000AEP的片选入口地址+偏移地址
"UseSoftwareMac"=dword:1
"SoftwareMacAddress0"=dword:20
"SoftwareMacAddress1"=dword:04
"SoftwareMacAddress2"=dword:09
"SoftwareMacAddress3"=dword:18
"SoftwareMacAddress4"=dword:00
"SoftwareMacAddress5"=dword:07

[HKEY_LOCAL_MACHINE\Comm\DM9CE1\Parms\TcpIp]
"EnableDHCP"=dword:0
"DefaultGateway"="192.168.1.1"
"LLInterface"=""
"UseZeroBroadcast"=dword:0
"IpAddress"="192.168.1.33"
"Subnetmask"="255.255.255.0"
"DNS"="192.168.1.1"
;"WINS"="192.168.1.1"
;
;

;第2块网卡配置信息
[HKEY_LOCAL_MACHINE\Comm\DM9CE2]
"DisplayName"="DM9isa Fast Ethernet Adapter"
"Group"="NDIS"
"ImagePath"="dm9isa.dll"

[HKEY_LOCAL_MACHINE\Comm\DM9CE2\Parms]
"BusNumber"=dword:0
"BusType"=dword:0
"XmitBuffer"=dword:20
"RecvBuffer"=dword:20
"IoAddress"=dword:20000300 ;LAN2:DM9000AE的片选入口地址+偏移地址
"IrqNumber"=dword:2a ;DM9000AE的硬件中断号 EINT14=42=0x2A
"SysIntr"=dword:27 ;SYSINTR_DM9000=16+23=39=0x27

"UseSoftwareMac"=dword:1
"SoftwareMacAddress0"=dword:20
"SoftwareMacAddress1"=dword:11
"SoftwareMacAddress2"=dword:06
"SoftwareMacAddress3"=dword:06
"SoftwareMacAddress4"=dword:13
"SoftwareMacAddress5"=dword:14

[HKEY_LOCAL_MACHINE\Comm\DM9CE2\Parms\TcpIp]
"EnableDHCP"=dword:0
"UseZeroBroadcast"=dword:0
"DefaultGateway"="192.168.0.1"
"IpAddress"="192.168.0.88"
"Subnetmask"="255.255.255.0"
"DNS"="192.168.0.1"
ENDIF BSP_DM9000


如果不行, 可以坚持下 OAL的中断处理函数, 确认处理中断无丢失问题?
wolong98 2011-06-20
  • 打赏
  • 举报
回复
看了你的注册表配置信息以及你的描述说明驱动无问题,

但是IP地址配置, 两个网卡都设置有网关地址, 一般情况不建议,会造成本地网络摇摆不稳定
你可以做下试验, 单独接一个网卡到PC机,PC机设置与对应的网卡同一个网段, 分别Ping他们的地址,都能Ping通吗?

chalimenggan 2011-06-20
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 wolong98 的回复:]
两个网卡的 总线地址肯定不一样对吧, 为了能同时使用同一个网卡驱动,你需要在注册表添加 与总线地址有关的信息。(原来的DM9000的网卡驱动的注册表是没有总线地址这个关键字, 需要你手工修改实现;

变通的方法有:
分别对一个网卡生成独立的网卡驱动,每个的网卡的总线地址直接修改为相应的地址。
生成的驱动名称修改为不一样即可。 注册表做相应修改。
[/Quote]

非常感谢wolong98的回答,我的做法应该就属于你说的第二种变通方法,也就是我在Drivers目录下放了两个dm9000驱动的文件夹,一个取名dm9000,编译完以后是dm9000.dll,另一个取名dm9isa,编译完以后是dm9isa.dll,下面我把注册表的完整信息贴出来,请您看看还有哪里有问题:

IF BSP_DM9000
[HKEY_LOCAL_MACHINE\Comm\DM9CE]
"DisplayName"="DM9000A ISA Fast Ethernet Adapter"
"Group"="NDIS"
"ImagePath"="dm9000.dll"

[HKEY_LOCAL_MACHINE\Comm\DM9CE\Linkage]
"Route"=multi_sz:"DM9CE1"

[HKEY_LOCAL_MACHINE\Comm\DM9CE1]
"DisplayName"="DM9000A ISA Fast Ethernet Adapter"
"Group"="NDIS"
"ImagePath"="dm9000.dll"

[HKEY_LOCAL_MACHINE\Comm\Tcpip\Linkage]
"Bind"="DM9CE1"

[HKEY_LOCAL_MACHINE\Comm\DM9CE1\Parms]
"BusNumber"=dword:0
"BusType"=dword:1
"XmitBuffer"=dword:20
"RecvBuffer"=dword:20
"SysIntr"=dword:1a
"IrqNumber"=dword:1a ;DM9000的硬件中断号
"IoAddress"=dword:18000300 ;LAN1:DM9000AEP的片选入口地址+偏移地址
"UseSoftwareMac"=dword:1
"SoftwareMacAddress0"=dword:20
"SoftwareMacAddress1"=dword:04
"SoftwareMacAddress2"=dword:09
"SoftwareMacAddress3"=dword:18
"SoftwareMacAddress4"=dword:00
"SoftwareMacAddress5"=dword:07

[HKEY_LOCAL_MACHINE\Comm\DM9CE1\Parms\TcpIp]
"EnableDHCP"=dword:0
"DefaultGateway"="192.168.1.1"
"LLInterface"=""
"UseZeroBroadcast"=dword:0
"IpAddress"="192.168.1.33"
"Subnetmask"="255.255.255.0"
"DNS"="192.168.1.1"
;"WINS"="192.168.1.1"
;
;
[HKEY_LOCAL_MACHINE\Comm\DM9EPCE]
"DisplayName"="DM9isa ISA Fast Ethernet Adapter"
"Group"="NDIS"
"ImagePath"="dm9isa.dll"

[HKEY_LOCAL_MACHINE\Comm\DM9EPCE\Linkage]
"Route"=multi_sz:"DM9EPCE1"

[HKEY_LOCAL_MACHINE\Comm\DM9EPCE1]
"DisplayName"="DM9isa Fast Ethernet Adapter"
"Group"="NDIS"
"ImagePath"="dm9isa.dll"

[HKEY_LOCAL_MACHINE\Comm\Tcpip1\Linkage]
"Bind"="DM9EPCE1"

[HKEY_LOCAL_MACHINE\Comm\DM9EPCE1\Parms]
"BusNumber"=dword:0
"BusType"=dword:0
"XmitBuffer"=dword:20
"RecvBuffer"=dword:20
"IoAddress"=dword:20000300 ;LAN2:DM9000AE的片选入口地址+偏移地址
"IrqNumber"=dword:2a ;DM9000AE的硬件中断号 EINT14=42=0x2A
"SysIntr"=dword:27 ;SYSINTR_DM9000=16+23=39=0x27

"UseSoftwareMac"=dword:1
"SoftwareMacAddress0"=dword:20
"SoftwareMacAddress1"=dword:11
"SoftwareMacAddress2"=dword:06
"SoftwareMacAddress3"=dword:06
"SoftwareMacAddress4"=dword:13
"SoftwareMacAddress5"=dword:14

[HKEY_LOCAL_MACHINE\Comm\DM9EPCE1\Parms\TcpIp]
"EnableDHCP"=dword:0
"UseZeroBroadcast"=dword:0
"DefaultGateway"="192.168.0.1"
"IpAddress"="192.168.0.88"
"Subnetmask"="255.255.255.0"
"DNS"="192.168.0.1"
ENDIF BSP_DM9000
wolong98 2011-06-20
  • 打赏
  • 举报
回复
上面错了
你确认注册表中的 IO地址信息是否正确? "IoAddress"=dword:0C000300

[HKEY_LOCAL_MACHINE\Comm\DM9CE1\Parms]
"BusNumber"=dword:0
"BusType"=dword:1
"XmitBuffer"=dword:20
"RecvBuffer"=dword:20
"IrqNumber"=dword:1e
"SysIntr"=dword:1e
"IoAddress"=dword:0C000300
"NetworkAddress"="022409011239"
[HKEY_LOCAL_MACHINE\Comm\DM9CE1\Parms\TcpIp]
"EnableDHCP"=dword:0 ;<== set to 1 if DHCP enabled.
"DefaultGateway"="0.0.0.0" ;(contd) If set to 0 then enter the values next entries
"UseZeroBroadcast"=dword:0
"IpAddress"="192.168.3.159"
"Subnetmask"="255.255.255.0"
"DNS"="202.103.224.68"
wolong98 2011-06-20
  • 打赏
  • 举报
回复
两个网卡的 总线地址肯定不一样对吧, 为了能同时使用同一个网卡驱动,你需要在注册表添加 与总线地址有关的信息。(原来的DM9000的网卡驱动的注册表是没有总线地址这个关键字, 需要你手工修改实现;

变通的方法有:
分别对一个网卡生成独立的网卡驱动,每个的网卡的总线地址直接修改为相应的地址。
生成的驱动名称修改为不一样即可。 注册表做相应修改。
chalimenggan 2011-06-20
  • 打赏
  • 举报
回复
还是没人能解决...
chalimenggan 2011-06-20
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 lbqhope 的回复:]
这个问题有意思,

可以看看中断会有么
[/Quote]

就是中断没有。能ping通的网卡有中断,不能ping通的就没有,因为驱动没有问题嘛,如果有中断的话系统就会去处理中断,从而做出正确的响应。现在一个有中断一个没有,怀疑是哪个地方冲突了...到底是哪个地方呢...
加载更多回复(10)

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧