一:WIN USB 的基本概念
WinUSB 是 Windows 附带的通用驱动程序。 它允许你与 USB 设备通信,而无需编写自定义驱动程序。 使用此驱动程序可以节省时间、降低复杂性并确保不同 Windows 版本的兼容性。
易于使用:WinUSB 抽象化了 USB 通信中涉及的大部分复杂性,这使你能够更轻松地与 USB 设备交互。 无需自定义驱动程序:对于许多 USB 设备,可以直接使用 WinUSB,无需编写和维护自定义驱动程序。
二:使用WIN USB的用途
设备通信
数据传输:使用批量、控制、中断或异时序传输向/从 USB 设备发送和接收数据。
控制请求:发送控制请求以配置设备或检索信息。
设备配置
设置配置:选择配置、接口和备用设置以配置 USB 设备。
终结点管理:管理数据传输的终结点。
设备枚举
设备标识:枚举和识别连接到系统的 USB 设备。
描述符检索:检索设备描述符、配置描述符、接口描述符和终结点描述符。
自定义应用程序
用户模式应用程序:开发使用 WinUSB API 与 USB 设备通信的用户模式应用程序。
固件更新:为 USB 设备实现固件更新机制。
测试和调试
原型制作:快速制作 USB 设备通信的原型,以测试硬件功能。
调试:使用 WinUSB 调试主机和 USB 设备之间的通信问题。
三:代码如下所示:
3.1 usb 初始化 代码如下:
void usb_init()
{
P3M0 &= ~0x03;
P3M1 |= 0x03;
IRC48MCR = 0x80;
while (!(IRC48MCR & 0x01));
USBCLK = 0x00;
USBCON = 0x90;
usb_write_reg(FADDR, 0x00);
usb_write_reg(POWER, 0x81);
usb_write_reg(INTRIN1E, 0x3f);
usb_write_reg(INTROUT1E, 0x3f);
usb_write_reg(INTRUSBE, 0x07);
usb_write_reg(POWER, 0x01);
DeviceState = DEVSTATE_DEFAULT;
Ep0State.bState = EPSTATE_IDLE;
InEpState = 0x00;
OutEpState = 0x00;
UsbInBusy = 0;
UsbOutBusy = 0;
Rptr = 0;
Wptr = 0;
EUSB = 1;
}3.2 USB的数据交互处理代码
void usb_vendor_polling()
{
BYTE cnt;
if (DeviceState != DEVSTATE_CONFIGURED)
return;
if (!UsbInBusy && (Rptr != Wptr))
{
EUSB = 0;
UsbInBusy = 1;
usb_write_reg(INDEX, 1);
cnt = 0;
while (Rptr != Wptr)
{
usb_write_reg(FIFO1, UsbBuffer[Rptr++]);
cnt++;
if (cnt == EP1IN_SIZE) break;
}
usb_write_reg(INCSR1, INIPRDY);
EUSB = 1;
}
if (UsbOutBusy)
{
EUSB = 0;
if (Wptr - Rptr < 256 - EP1OUT_SIZE)
{
UsbOutBusy = 0;
usb_write_reg(INDEX, 1);
usb_write_reg(OUTCSR1, 0);
}
EUSB = 1;
}
}四:实测代码如下所示:


我要赚赏金
