2013-08-05 100 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只有有時連接,並沒有表現正確的時候。 –