【问题标题】:LPC2148 USB Send/Receive DataLPC2148 USB 发送/接收数据
【发布时间】:2013-08-06 12:40:53
【问题描述】:

使用 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 似乎什么也没做,因为在我使用这个名称的方法中,我让它使用一个不断递增 1 的变量更新 InReport。但在我收到的数据中,它始终保持默认值并且从未改变。 3.这段代码没有地方让我从电脑接收数据。

【问题讨论】:

    标签: c usb data-transfer lpc


    【解决方案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 */
     ...........
    

    【讨论】:

    • 我的印象是我的需要中断是最好的传输方法。我相信我已经找到了另外几个关于如何添加端点输出声明的链接。我现在最大的问题是我的 USB 有时只能连接,并且在连接时不能正常工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-09
    • 1970-01-01
    • 2020-03-22
    相关资源
    最近更新 更多