6410 Wince6.0 DM9000AEP 能读取ID,ping不通
我在三星6410的BSP包里添加DM9000A的驱动,目前能读取到Chipid,但不知道为什么ping不通,网络说什么就是不好用,以下是我在eboot下添加的内容
1. 我采用的是CSn4,bsp_base_reg_cfg.h
#define BSP_BASE_REG_PA_CS8900A_IOBASE (0x30000000)
#define BSP_BASE_REG_PA_CS8900A_MEMBASE (0x30000000)
2.eboot/ether.c
#define DM9000A_Tacs (0x0) // 0clk
#define DM9000A_Tcos (0x0) // 4clk
#define DM9000A_Tacc (0x7) // 14clk
#define DM9000A_Tcoh (0x0) // 1clk
#define DM9000A_Tah (0x0) // 4clk
#define DM9000A_Tacp (0x0) // 6clk
#define DM9000A_PMC (0x0) // normal(1data)
InitSROMC_CS8900()中修改如下:
s6410SROM->SROM_BW = (s6410SROM->SROM_BW & ~(0xF<<16)) |
(1<<16); // Data bus width control for Memory Bank4 (0=8-bit, 1=16-bit)
s6410SROM->SROM_BC4 = ((DM9000A_Tacs<<28)+(DM9000A_Tcos<<24)+(DM9000A_Tacc<<16)+(DM9000A_Tcoh<<12)\
+(DM9000A_Tah<<8)+(DM9000A_Tacp<<4)+(DM9000A_PMC));
InitEthDevice()中修改如下L:
pfnEDbgInit = DM9000DBG_Init;
pfnEDbgGetFrame = DM9000DBG_GetFrame;
pfnEDbgSendFrame = DM9000DBG_SendFrame;
DNW中打印如下:
Enter your selection: d
0xBA000000 0xBA000000
DM9000 ID is 0x90000a46
INFO: Probe: DM9000 is detected.
DM9000: MAC Address: 11:22:33:44:55:66
System ready!
Preparing for download...
INFO: *** Device Name 'SMDK641021862' ***
INFO: Using static IP address 1218728.
INFO: Using subnet mask 2525250.
+EbootSendBootmeAndWaitForTftp
Sent BOOTME to 255.255.255.255
Sent BOOTME to 255.255.255.255
BSP中添加驱动后,作了一些修改后效果同样,只能读取到ID,请各位大侠指点一下,到底是哪方面的问题
BOOT中好像不支持PING吧。
另外,需要考虑一下中断。
以前在调试DM9000驱动时,也是能读到ID,但不能通讯,后来发现是中断的问题。
另外硬件连通了吗?
连上网线,对应的绿色指示灯 都亮了吗?
板子和PC/交换机连接,PC上显示已连接,交换机对应端口的灯也亮,唯一不同的就是我这面板子有的灯亮有的不亮,亮的效果也是如此。
在我印象中Boot好像不用中断吧,因为CE里面我也添加驱动效果同样,而涉及到的东西太多,我才想用Boot作测试,用示波器看cs# IOW# IOR#都有波形。
不知道是什么原因,好像是网络变压器挑网线和交换机,直连现在能看到网络的连接状态是通的,现在有以下情况发生;
1.PC ping丢包严重,WINCE下板子ping出错,错误信息“ping : transmit failed, error code 11010”
2.Boot下用vs2005中的target能看到板子,但Attach时看不到连接下载信息
引用: 引用 7 楼 jyoshou 的回复:
不知道是什么原因,好像是网络变压器挑网线和交换机,直连现在能看到网络的连接状态是通的,现在有以下情况发生;
1.PC ping丢包严重,WINCE下板子ping出错,错误信息“ping : transmit failed, error code 11010”
2.Boot下用vs2005中的target能看到板子,但Attach时看不到连接下载信息
这个以前也碰到过,估计是硬件的问题,软件大概无能为力了。
如果有多台设备,注意他们的网卡地址是否重复了。我以前也是2快开发板练到一个网就不行,后来发现网卡驱动取的是固定的物理地址。后面改了之后就正常了
我想请问一下DM9000AEP应该采用动态申请中断还是静态的,由于在intr.c中看到6410默认用的EINT10动态申请,所以仅添加了对EINT10的控制,如下:
// EINT10(GPN10)->IRQ_LAN
pGPIOReg->GPNCON = ( pGPIOReg->GPNCON & ~(0x3<<20) ) | (0x2<<20); // IRQ_LAN by EINT10 (GPN10)
pGPIOReg->GPNPUD = ( pGPIOReg->GPNPUD & ~(0x3<<20) ) | (0x0<<20); // pull-up/down disabled
pGPIOReg->EINT0CON0 = ( pGPIOReg->EINT0CON0 & ~(0x7<<20)) | (0x1<<20); // High level triggered
注册表中把sysintr字段屏蔽了,DNW打印如下内容:
[dm9: Tries to map io space with 30000000]
[dm9: The mapped address is D2B10000]
[dm9: Chip signature is 0A469000]
-OALIntrRequestSysIntr(irq = 10, sysIntr = 27)
再就是不断触发的中端 C_DM9000::DeviceEnableInterrupt,不知道动态申请对ping返回的error 11010有没有影响
我将PC机网卡的网速降到10M,PC Ping板子一点丢包都没有,但板子仍然是“ping : transmit failed, error code 11010”这个错误,有知道这个错误是什么原因导致的么,请各位帮帮忙
引用: 引用 10 楼 jyoshou 的回复:
我想请问一下DM9000AEP应该采用动态申请中断还是静态的,由于在intr.c中看到6410默认用的EINT10动态申请,所以仅添加了对EINT10的控制,如下:
// EINT10(GPN10)->IRQ_LAN
pGPIOReg->GPNCON = ( pGPIOReg->GPNCON & ~(0x3<<20) ) | (0x2<<20); // IRQ_LAN by EINT1……
动态申请中断,如果正确了,应该也是没有问题的。
我想这个地方不是问题的关键。
DM9000AEP移植帖子应该比较多了,搜索一下就有了。改的地方相当少。很久没来wince区了。
linux整的一头雾水!神那~~~~~~~
我也是碰到的这个问题啊,串口信息:
INFO: Using device name: 'MBA24407'
+EbootSendBootmeAndWaitForTftp
Sent BOOTME to 255.255.255.255
Sent BOOTME to 255.255.255.255
Sent BOOTME to 255.255.255.255
Sent BOOTME to 255.255.255.255
PB中一直显示不出设备名称
本人的是PB可以显示设备名称,但是总是丢包again,看来不光我一个有问题
引用: 引用 15 楼 seu_dust 的回复:
本人的是PB可以显示设备名称,但是总是丢包again,看来不光我一个有问题
可以把PC上和板子上的网络设置贴上来么
我在北京盟石的开发板上的调试经验,供大家参考:
1.串口能出现Sent BOOTME to 255.255.255.255的信息,但PB中一直显示不出设备名称:第一可能DM9000芯片坏了(市场上的二手旧芯片有可能出这问题),换个芯片就解决。第二种可能,CPU和DM9000的16条数据线有短路的情况,用示波器挨个检查16条数据线的波形,如果发现波形异常,则可能是这个原因。波形异常的表现有幅度不够3V,波形畸变等。
2.能显示设备名称,能连接,总是丢包:如果PCB Layout本身没问题,则十有八九是DM9000芯片坏了,中发市场上99.2%的DM9000是二手的。
之前遇到这的这问题已经解决了,是DM9000的驱动问题,你仔细的研究下,接收的函数~~