happy_life
驱动牛犊
驱动牛犊
  • 注册日期2004-12-22
  • 最后登录2005-05-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1168回复:0

wince CF无线网卡驱动求助(想多给些分数,系统不让,ft!)

楼主#
更多 发布于:2004-12-22 15:53
我在搞一个wince下CF无线网卡驱动,平台是xsclae pxa250 sitsang 板+wince4.1,无线网卡是eagletec的CWB1000,根据厂商提供的驱动,似乎用的是prism的芯片,或者是orinoco的,当然这个驱动在板子上跑步起来,否则我就不必这么命苦了。。。。。)

因为目前一块兼容NE2000的CF有线网卡可以用wince自带的ne2000驱动跑起来,于是我利用Kernal deug工具单步执行,从而分析对照两块网卡的执行情况(无线网卡的驱动先参照ne2000和linux下的prism驱动源代码粗略的做了detect和initialize的部分)

没想到在CF口读写的时候就除了问题了
网上读了一些CF+和pcmcia的规范,知道CF卡的地址空间分为:attribute memory space,common memory space和IO space,其中cf卡的配置信息(就是那些所谓的tuple code)和一些
configuraiton register是在attribute memory里,而网卡控制器的register则是在IO space,CF卡初始化的时候pcmcia驱动从attribute memory space读入配置信息及解码(即parse the tuple)
然后根据这些信息映射cf卡的IO space 到wince的一块virtual memory 里(即调用virtualalloc和virtualcopy)
再根据这些信息向configuraiton register写入配置信息,将网卡置于io mode,然后就可以读写
io space里的register来控制网卡的动作了(用ndisrawwriteUshort之类的IO操作)。
没有经验,不知道上面说得有什么错漏,请大家指正。

以上的步骤在ne2000的网卡下单步分析了,看来没有什么问题。(cf卡的IO space 映射到wince的一块virtual memory后,这块地址空间里的数据是00 00 00 00 ......,暂时还不能读写,将卡置于IO mode后,寄存器的数据信息就出现在这块虚拟内存空间里了,可以进行读写操作控制网卡的行为)
然而我在插入无线网卡并同样做io space映射后,相应的虚拟内存空间里却是一片00 40 00 40 00 40......,将卡置于IO mode后,显示的数据基本上还是00 40 00 40.....,而且只能读,不能写,少数几处原来是00的地方出现一些混乱无意义的数据
从这块卡的attribute memory 里读取tuple code倒是正常的,读出来的CFTABLE_ENTRY 是1B 0F C1 01 19 76 C5 4B D5 19 36 36 5 46  7F FF FF,解析出来关于IO部分的是IOBASE=0,IOLENGTh=0x40,16 bit I/O
然到这个卡没有IO space?它的那些控制register到底在什么地方啊。

同样的硬件,在linux下倒是跑起来的。

太迷惘了。。。。。。。。
各位高人指点一下吧,不胜感激!


PS:感觉wince这方面的资料太少了,而且一些行业标准的资料都要收钱的(比如一套pc card standard的就要几百$,cft!!!)
希望以后能有什么进展,把这方面的经验和资料贡献给大家,

[编辑 -  12/22/04 by  happy_life]
游客

返回顶部