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