今天调试了一款SDIO的无线网卡AR6102,由于该芯片是板载的,所以写了一个应用程序,模拟无线网卡的插入拔出,然后简单修改了SDHC驱动,检测应用程序发出的模拟卡插拔的动作,并控制芯片的PWR和RST引脚。幸运的很,改完之后,就可以用了。通过应用程序模拟无线网卡的插入动作后,在超级终端看到了加载无线网卡驱动的打印信息,在控制面板的网络连接里也看到了WIFI设备,AR6K_SD1。
用于测试的无线AP是Cisco的,加密方式是WPA-Personal,根据路由器的设置,选择加密方式并输入网络密钥,如下图所示。
点击确定后,正常连接至无线AP,但信号强度极低,可能跟天线有关系。
连接至AP后,AR6K_SD1的IP信息如下图所示。
下面简单介绍一下调试的思路。 我们知道,WinCE下SD卡驱动主要由三部分组成,Bus Driver、Host Controller Driver和Client Drivers。他们三者与应用程序和操作系统的关系如下图所示。
可以看到,Bus Driver是介于Client Driver和Host Controller Driver之间的一个抽象管理层。它为Client Driver提供了标准的API,使其能在不同的WinCE系统上运行。Bus Driver的真实存在为SDBUS.dll。这部分代码由微软提供,与平台和应用无关。所以,在移植驱动的过程中无需做任何修改。
Client Driver通过Bus Driver提供的抽象接口,控制并操作SD设备。WinCE下SDIO的Client Driver类型有Memory、BlueTooth、GPS和WIFI等几种。这部分的驱动根据设备类型不同而不同,当SD设备插入时,Bus Driver根据注册表的配置,加载相应的Client Driver。Client Driver一般由模块厂商提供,基本不用做修改即可使用。
Host Controller Driver是Bus Driver和Host Controller之间的一个硬件抽象层,这部分代码随着平台和芯片的不同而不同。在调试SD设备的过程中,需要做相应修改。
根据以上分析,调试AR6102的驱动时,仅仅修改了Host Controller Driver的代码,其他两个部分都没有动。实际上原厂也没有提供Client Driver的代码,只给了DLL文件而已。