2013-08-05 2 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

Я был под впечатлением, для моих потребностей прерывания является наилучшим методом передачи. Я верю, что нашел еще пару ссылок о том, как добавить конечные точки из declerations. Моя самая большая проблема теперь в том, что мой USB только подключается иногда и не ведет себя правильно, когда это происходит. –