2013-08-05 68 views
2

使用Keil USB HID示例我终于能够让我的设备使用LPC2148在Windows中成功枚举; USB HID示例需要进行一些调整。我正在使用中断方式传输。我使用USBlyzer来嗅探我的USB数据传输。LPC2148 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.此代码无法从电脑接收数据。

回答

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 */ 
........... 
+0

我的印象是我需要的中断是最好的传输方法。我相信我已经找到了另外几个关于如何添加端点输出的链接。我现在最大的问题是我的USB只有有时连接,并没有表现正确的时候。 –