使用Keil USB HID示例我终于能够使用LPC2148在Windows中成功枚举我的设备; USB HID示例需要一些调整。我正在使用中断传输方法。我正在使用USBlyzer来嗅探我的USB数据传输。
在Windows方面,我目前正在使用C#USB库(http://www.codeproject.com/Articles/18099/A-USB-HID-Component-for-C)连接到我的设备。
我测试数据传输的目的是向设备发送一个字节,让它执行一些简单的数学运算(例如加2)并发回新值,这样我就可以验证数学运算是否正确,数据是发送和接收正确。
现在它已被枚举,但我很难让LPC2148发送/接收数据。我发现这篇文章(http://www.keil.com/forum/19713/)解释了如何向主机发送数据。
它有以下代码:
usbuser.c
#if USB_CONFIGURE_EVENT
void USB_Configure_Event (void) {
if (USB_Configuration) { /* Check if USB is configured */
GetInReport();
USB_WriteEP(0x81, &InReport, sizeof(InReport));
}
}
#endif
void USB_EndPoint1 (DWORD event) {
switch (event) {
case USB_EVT_IN:
GetInReport();
USB_WriteEP(0x81, &InReport, sizeof(InReport));
break;
}
}
我使用了这种技术,但发现了几个问题: 1.它连续且非常快地发送,而我只希望它在收到一个数据字节后发送数据,我只希望它发送一次。 2.看起来好像GetInReport什么也没做,因为在我的方法中我使用这个名称我用一个变量更新InReport,该变量一直在增加1.但在我收到的数据中,它始终保持默认值并且永远不会改变。 3.此代码无法从计算机接收数据。
答案 0 :(得分:1)
尝试在“usbdesc.c”中将接收端点从中断更改为批量模式,如下所示:
/* Endpoint, HID Interrupt In */
USB_ENDPOINT_DESC_SIZE, /* bLength */
USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType */
USB_ENDPOINT_IN(1), /* bEndpointAddress */
//USB_ENDPOINT_TYPE_INTERRUPT, /* bmAttributes */
USB_ENDPOINT_TYPE_BULK, //--Here
WBVAL(0x0004), /* wMaxPacketSize */
...........