3593|5

60

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

eboot要等待很久才能发送bootme,网卡是DEC21140,请高手帮帮我。 [复制链接]

我用的是VPC虚拟机,并为VPC定制了BSP,加入DEC21140网卡驱动后能通过eboot成功加载nk,但是eboot要等待很久才能发送bootme,所以整个加载过程很慢,以下是串口信息:
Microsoft Windows CE Bootloader Common Library Version 1.4 Built Dec 30 2009 17:
11:28
Microsoft Windows CE Ethernet Bootloader 3.7 for CE/PC (Dec 31 2009)
Boot Args @ 0x1E276 and  ucLoaderFlags is 1
FlashInit
-FlashInit:Fails!!!!
PCI Device Configurations (1 PCI bus(es) present)...
========================================================
Bus, Device, Function = 0, 8, 0
Vendor ID, Device ID  = 0x5333, 0x8811
Base Class, Subclass  = 3, 0 => DISPLAY_CTLR
Interrupt             = 0
BaseAddress[0]        = 0xF8000000 (Memory)
========================================================
Bus, Device, Function = 0, 10, 0
Vendor ID, Device ID  = 0x1011, 0x0009
Base Class, Subclass  = 2, 0 => NETWORK_CTLR
Interrupt             = 11
BaseAddress[0]        = 0xEC00 (I/O)
BaseAddress[1]        = 0xFEBFF000 (Memory)
========================================================
InitKitlNIC: Searching for PCI Ethernet NIC (dwIrq = 0, dwIoBase = 0, dwDfltType
= 1) ...
InitKitlNIC: Found PCI Ethernet NIC (type = 10, IRQ=11, IOBase=0xEC00).
InitTxDescriptor::: dwTRANSMIT_DESCRIPTORS_HEAD = 0x200000...
InitTxDescriptor::: dwTRANSMIT_BUFFER_START     = 0x2002A0...
InitTxDescriptor::: dwTRANSMIT_RING_SIZE        = 0x2A...
InitRxDescriptor::: dwRECEIVE_DESCRIPTORS_HEAD   = 0x210000...
InitRxDescriptor::: dwRECEIVE_BUFFER_START       = 0x2102A0...
InitRxDescriptor::: dwRECEIVE_RING_SIZE          = 0x2A...
DEC21140::: Init using i/o address : 0xEC00 - mem offset = 0x1
EEPROMReadWord: Address=0xA  Data=0x5440
EEPROMReadWord: Address=0xB  Data=0x8AA8
EEPROMReadWord: Address=0xC  Data=0x0
MAC = 40-54-A8-8A-0-0

1.这里将会等待大约4分钟左右,不知道为什么?
2.这个MAC地址是什么每次都不一样啊,网卡的MAC不是唯一的吗?

数分钟之后:
Waiting for Zero Length Descriptor...
Waiting for DEC21140 to perform perfect filtering...
DEC21140Init()::: Done.
Returned MAC Address:40:54:A8:8A:00:00
System ready!
Preparing for download...
OEMPreDownload  ucLoaderFlags is 0
x86KitlCreateName: Using Device Name 'CEPC'
Using device name: CEPC
Using static IP address: AA2AA8C0 //我用的是静态IP
+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
Sent BOOTME to 255.255.255.255
Sent BOOTME to 255.255.255.255
。。。

我才入门不久,望高手赐教!

最新回复

程序不会出现死循环的! 经过n次测试 WaitCount=100000时,循环结束WaitCount=-1; 所以我才改小WaitCount的值,   详情 回复 发表于 2010-1-8 11:32
点赞 关注

回复
举报

77

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
友情帮顶下!
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
终于找到问题所在了
仔细看了下21140网卡驱动部分,问题出现在DEC21140ModeSetByAutoNegotiation函数中

void DEC21140ModeSetByAutoNegotiation()
{
...

WaitCount=100000; //十万次,我的天啊,不慢才怪了
while ((!(MIIRead(0x01) & 0x20)) && ( 0 != WaitCount-- ))
{
    //  Wait till Autonegotiation completed...
    //  printf ("Autonegotiation not completed...\r\n");                    
}

...
}

再看看MIIRead函数,虽然看不懂它到底在做什么,但不断的WRITE_PORT_ULONG(),不费时才怪了!!将WaitCount改成1000,ok啦!!
但这会不会是一颗定时炸弹呢?不晓得,请高手赐教。
现在eboot快多了,值得庆幸,呵呵~~~
 
 
 

回复

87

帖子

0

TA的资源

一粒金砂(初级)

4
 
引用 2 楼 yaoyaofull 的回复:
终于找到问题所在了
仔细看了下21140网卡驱动部分,问题出现在DEC21140ModeSetByAutoNegotiation函数中

void DEC21140ModeSetByAutoNegotiation()
{
...

WaitCount=100000; //十万次,我的天啊,不慢才怪了
while ((!(MIIRead(0x01) & 0x20)) && ( 0 != WaitCount-- ))
{
? ? //? Wait till Autonegotiation completed...
? ? //? printf ("Autonegotiation not completed...\r\n");? ? ? ? ? ? ? ? ? ?
}

...
}

再看看MIIRead函数,虽然看不懂它到底在做什么,但不断的WRITE_PORT_ULONG(),不费时才怪了!!将WaitCount改成1000,ok啦!!
但这会不会是一颗定时炸弹呢?不晓得,请高手赐教。
现在eboot快多了,值得庆幸,呵呵~~~


 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

5
 
它有两个条件判断的((!(MIIRead(0x01) & 0x20)) && ( 0 != WaitCount-- ))
后面那个猜应该是出错后才跳 出死循环吧,前面那个才是想要的目的
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

6
 
引用 4 楼 lzj84 的回复:
它有两个条件判断的((!(MIIRead(0x01) & 0x20)) && ( 0 != WaitCount-- ))
后面那个猜应该是出错后才跳 出死循环吧,前面那个才是想要的目的

程序不会出现死循环的!
经过n次测试 WaitCount=100000时,循环结束WaitCount=-1;
所以我才改小WaitCount的值,
 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表