реклама на сайте
подробности

 
 
> USB HID LPC1768, Как поднять скорость опроса и размер буфера?
Vitaliy_ARM
сообщение Jul 28 2011, 12:57
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246



В одно время сделал устройство в виде небольшой клавиатуры с кнопками и светодиодами на микропроцессоре LPC1343.
За основу было взято описание использования встроенного аппаратного стека HID устройства в этот микропроцессор: http://www.nxp.com/documents/application_note/AN10904.pdf
и презентация http://ics.nxp.com/literature/presentation...lpc13xx.usb.pdf

Структура с настройками этого устройства приведена ниже:
Код
    HidDevInfo.idVendor = USB_VENDOR_ID;
    HidDevInfo.idProduct = USB_PROD_ID;
    HidDevInfo.bcdDevice = USB_DEVICE;
    HidDevInfo.StrDescPtr = (uint32_t)&USB_StringDescriptor[0];
    HidDevInfo.InReportCount = 17;
    HidDevInfo.OutReportCount = 1;
    HidDevInfo.SampleInterval = 0x02;
    HidDevInfo.InReport = GetInReport;
    HidDevInfo.OutReport = SetOutReport;


Для LPC1768 существует аналогичный пример от Keil, который лежит в папке с установленной программой по адресу: "C:\Keil\ARM\Boards\Keil\MCB1700\USBHID\"

Вопрос к тем, кто разбирался с этим HID.

В этом примере функции SetOutReport и GetInReport могут передавать и принимать только один байт. Каким образом размер буфера можно увеличить до 64 (в описанном мной примере это делается путем установки переменных InReportCount и OutReportCount )?

Второй вопрос: как поднять скорость вызова функции GetInReport() до 2 мс?


--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
shista
сообщение Jul 28 2011, 17:58
Сообщение #2





Группа: Участник
Сообщений: 12
Регистрация: 15-07-09
Пользователь №: 51 296



Недавно "допиливал" данный код. У меня это выглядит так:

hiduser.c
CODE
#define HID_INPUT_REPORT_BYTES 33 /* size of report in Bytes */
#define HID_OUTPUT_REPORT_BYTES 33 /* size of report in Bytes */
#define HID_FEATURE_REPORT_BYTES 2 /* size of report in Bytes */

/* HID Demo Variables */
extern U8 InReport[HID_INPUT_REPORT_BYTES];
extern U8 OutReport[HID_OUTPUT_REPORT_BYTES];
extern U8 SetupReport[HID_FEATURE_REPORT_BYTES];

/* HID Demo Functions */
extern void GetInReport (void);
extern void SetOutReport (void);
extern void SetupFuture (void);

BOOL HID_GetReport (void) {

/* ReportID = SetupPacket.wValue.WB.L; */
switch (SetupPacket.wValue.WB.H) {
case HID_REPORT_INPUT:
GetInReport();
memcpy(EP0Buf, InReport, HID_INPUT_REPORT_BYTES);
//m_DEBUG("Packet(Get)= 0x%02x bytes\n", InReport[0]);
memset(InReport, 0, HID_INPUT_REPORT_BYTES);
break;
case HID_REPORT_OUTPUT:
return (__FALSE); /* Not Supported */
case HID_REPORT_FEATURE:
/* EP0Buf[] = ...; */
/* break; */
return (__FALSE); /* Not Supported */
}
return (__TRUE);
}

BOOL HID_SetReport (void) {

/* ReportID = SetupPacket.wValue.WB.L; */
m_DEBUG("Packet= 0x%02x\n", SetupPacket.wValue.WB.H);
switch (SetupPacket.wValue.WB.H) {
case HID_REPORT_INPUT:
return (__FALSE); /* Not Supported */
case HID_REPORT_OUTPUT:
memcpy(OutReport, EP0Buf, HID_OUTPUT_REPORT_BYTES);
SetOutReport();
break;
case HID_REPORT_FEATURE:
memcpy(SetupReport, EP0Buf, HID_FEATURE_REPORT_BYTES);
SetupFuture();
break;
}
return (__TRUE);
}

usbdesc.c
CODE
const U8 HID_ReportDescriptor[] = {
HID_UsagePageVendor( 0x00 ),
HID_Usage ( 0x01 ),
HID_Collection ( HID_Application ),
HID_LogicalMin ( 0 ),
HID_LogicalMaxS ( 0xFF ),
HID_ReportSize ( 8 ),
HID_ReportCount ( HID_INPUT_REPORT_BYTES ),
HID_Usage ( 0x01 ),
HID_Input ( HID_Data | HID_Variable | HID_Absolute ),
HID_ReportCount ( HID_OUTPUT_REPORT_BYTES ),
HID_Usage ( 0x01 ),
HID_Output ( HID_Data | HID_Variable | HID_Absolute ),
HID_ReportCount ( HID_FEATURE_REPORT_BYTES ),
HID_Usage ( 0x01 ),
HID_Feature ( HID_Data | HID_Variable | HID_Absolute ),
HID_EndCollection,
};


Для понимания того, как заполняется дескриптор, рекомендую почитать документ "HID Usage Tables".

Сообщение отредактировал IgorKossak - Jul 28 2011, 19:46
Причина редактирования: [codebox]
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 18:35
Рейтинг@Mail.ru


Страница сгенерированна за 0.0138 секунд с 7
ELECTRONIX ©2004-2016