阅读:1179回复:0
wince CF无线网卡驱动求助(想多给些分数,系统不让,ft!)
我在搞一个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] |
|