arm9 2440 wince5怎样编写通过UsbFn与PC机的通迅程序
这类驱动程序没有具体写过,但是见过很多相关的资料,我有一本书《Windows CE实用开发技术》,里面有讲到驱动加载和开发的示例,但是具体参考我就没有了。
网上资料转载:
在基于Berrydale的BSP包上,分别编译两个NK.bin,一个包含WINCE500\PLATFORM\BERRYDALE\SRC\DRIVERS\USBFN,而另一个则不包含。分别down到目标板上运行。检查usb host 以及slave口的功能。经试验发现:在两种NK下usb host均可以正常工作(usb storage);在有usbfn的NK下的usb slave口可以和pc的activesync正常通信并同步,而在没有usbfn的NK下的usb slave口不能和pc端的activesync通信,在pc端显示无法识别的usb设备。
通过以上试验可以证实usbfn下的程序其实就是usb slave的驱动程序。MS提供的usbfn的驱动程序在WINCE500\PUBLIC\COMMON\OAK\DRIVERS\USBFN目录下:Class;Controller;Ufnclientlib。其中Class Contains the RNDIS, serial, and storage USB function client drivers, each in a separate directory(这些就是所谓的上层驱动程序)。如果 OS 选择要使用那一个 Profile 是通过下面的 Registry 决定:
[HKEY_LOCAL_MACHINE\Drivers\USB\FunctionDrivers]
"DefaultClientDriver"="Serial_Class"
or
"DefaultClientDriver"="RNDIS"
or
"DefaultClientDriver"="Mass_Storage_Class"
or
"DefaultClientDriver"=- ; erase previous default
Controller 提供了usbfn的MDD和PDD的程序,而PDD目录下只提供了NET2280的。
Usbfn的驱动程序开发,只要根据实际的硬件来实现usbfn的pdd层即可。例如上述berrydale bsp包中实现的usbfn(WINCE500\PLATFORM\BERRYDALE\PUBLIC\CSP\ARM\INTEL\PXA27X\USBFN)就是一个pdd层的驱动程序。而最底层的对硬件的操作是在WINCE500\PLATFORM\BERRYDALE\SRC\DRIVERS\USBFN目录下的ms2_usbfn.cpp文件中实现的:Init、Start、Stop、IsCableAttached。