|
。。。我也知道慢阿,可是没办法啊,之前我用的8139D的网卡,用CE5.0的自带的驱动,去掉enable KITL,ping都ping不通;
选上enable KITL,去掉8139d的NDIS驱动,loadcepc 完成后jumping to...,停1分半钟,出来界面。
后来查看了KITL的代码,才知道停1分半钟是在DHCP请求分配IP地址,因为每次请求IP要等待30s,共重试了3次。而这时抓抱器并没有抓到他发出来的DHCP数据包(根本就没有任何数据包发出来,网卡的active灯都不闪)
后来又往下看,走到
c:\WINCE500\PUBLIC\COMMON\OAK\DRIVERS\ETHDBG\RTL8139\rtl8139.c中的
RTL8139SendFrame(BYTE *pbData, DWORD dwLength),就是这个函数发送数据包,最后一句话
////////////////////////////////////////////////////////////////////////////
// Send it out now..
// 8 bytes threshold.
//
WRITE_PORT_ULONG(
RTL_TSD_X(i),
(DWORD)(dwLength) | (0x00 << 16));
设置8139d的TSD寄存器,把发送帧长度放到底13位,这时发送门限(TSD寄存器的16~21位)是0,根据PDF,意思是发送门限为8Byte,只要TSD的0~12位中的帧长度〉8就启动8139D的DMA,从相应描述表的TSAD中的地址开始copy帧数据到内部发送FIFO,发送出去。
但问题是根本就没有发送出来,TSD的TOK,TUN都为0,根本就启动发送,郁闷致死,
当然前提是我的硬件是好使的,之前用VXworks启动,网络是可用的。
下面是我启用了DumpAll8139Regs()函数打印出来的所有寄存器值,大虾邦看一下阿,555
+------------------------------------------------------------+
IDR[0..5] = 0x[00 - E0 - C7 - 07 - F6 - F3]
MAR[0..7] = 0x[00 - 00 - 00 - 00 - 00 - 00 - 00 - 00]
TSD[0..3] = 0x[00000127 - 00002000 - 00002000 - 00002000]
TSAD[0..3] = 0x[00EB6120 - 00EB6720 - 00EB6D20 - 00EB7320]
RBSTART [0x00EB7920] ERBCR [0x0000] ERSR [0x00] CR [0x0D]
CAPR [0xFFF0] CBR [0x0000] IMR [0x0000] ISR [0x0000]
TCR [0x77400700] RCR [0x0000101A] TCTR [0x3638B14A] MPC [0x00000000]
9346CR [0x00] CONFIG0 [0x10] CONFIG1 [0x8D] TimerInt [0x00000000]
MSR [0x18] CONFIG3 [0xE1] MULINT [0x00C0] RERID [0x0010]
TSAD [0x000E] BMCR [0x3000] BMSR [0x782D] ANAR [0x0021]
ANLPAR [0x0000] ANER [0x0000] DIS [0x0000] FCSC [0x0000]
NWAYTR [0x0705] REC [0x0000] CSCR [0x07C0] PHY1_PARM[0x60F60C59]
TW_PARM [0x7B732660] PHY2PARM[0x1A]
这个问题都困扰了我2周了,没办法才想用串口KITL的,大虾要是能解决8139D的KITL问题,那就太感谢了,还有我听说MS的KITL没有实现对8139D网卡支持,是这样的么? |
|