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

 
 
> Запуск USB
grau
сообщение May 22 2007, 12:16
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 49
Регистрация: 3-02-05
Пользователь №: 2 390



Salute!

Для освоения USB решил воспользоваться примером HID от Keil. Чип - LPC2148.

Запустил железку, на ПК сделал файл - данные гоняются туда и обратно.

Теперь хочу увеличить скорость. Правильно ли понимаю, что для увеличения скорости достаточно объявить еще одну конечную точку, добавить к репорту идентефикатор и как раньше читать данные из файла?

И еще вопросик. Изменил дескриптор из примера, чтоб переназначить поток с первой EP на четвертую.
USB_ENDPOINT_IN(4), /* bEndpointAddress */
после чего связь с устройством установить не удается. Может еще чего подправить надо было?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Слава_2
сообщение May 23 2007, 09:18
Сообщение #2





Группа: Новичок
Сообщений: 8
Регистрация: 21-05-07
Пользователь №: 27 850



Цитата(grau @ May 22 2007, 15:16) *
Salute!

Для освоения USB решил воспользоваться примером HID от Keil. Чип - LPC2148.

Запустил железку, на ПК сделал файл - данные гоняются туда и обратно.

Теперь хочу увеличить скорость. Правильно ли понимаю, что для увеличения скорости достаточно объявить еще одну конечную точку, добавить к репорту идентефикатор и как раньше читать данные из файла?

И еще вопросик. Изменил дескриптор из примера, чтоб переназначить поток с первой EP на четвертую.
USB_ENDPOINT_IN(4), /* bEndpointAddress */
после чего связь с устройством установить не удается. Может еще чего подправить надо было?

>Теперь хочу увеличить скорость. Правильно ли понимаю, что для увеличения скорости достаточно объявить еще одну конечную точку, добавить к репорту идентефикатор и как раньше читать данные из файла?
Если так, то надо еще один интерфейс HID-устройства добавить.
Можно по другому:
1) Файл usbdesc.c - дескриптор HID-устройства HID_ReportDescriptor - здесь все надо менять. Например так попробовать.
const BYTE HID_ReportDescriptor[30] = {
6, 0, 0xFF, //Usage_Page (Vendor Defined)
9, 1, //Usage (I/O Device)
0xA1, 0x80,//1, // Collection (Application)
0x85, ReportID, // REPORT_ID (>30 - репорт, какой надо)
0x19, 1, // Usage_Minimum
0x29, 1, // Usage_Maximum
0x15, 0, // Logical_Minimum (0)
0x25, 0xff, // Logical_Maximum (255)
0x75, 8, // Report_Size (8 bit)
0x95, ReportCount, // Report_Count (8, 16, 64 bytes - по вашему желанию)
0x81, 2, // Input (Data,Var,Abs)
0x19, 1, // Usage_Minimum
0x29, 1, // Usage_Maximum
0x91, 2, // Output (Data,Var,Abs)
0xC0 // End_Collection
};

2) Файл usbdesc.c - дескриптор USB-устройства USB_ConfigDescriptor - элемент bInterval поставить 1 вместо 20.
3) Неплохо бы познакомится с документами со странички http://www.usb.org/developers/hidpage/. Или c книгой "Практика программирования USB" Агурова.
4) Переписать пример в Windows, чтобы репорт нужного размера забирал. Причем наверх из устройства нужно всегда отправлять пакет, начинающийся с байта REPORT_ID. Иначе hid.dll отбросит ваш ответ.

>И еще вопросик. Изменил дескриптор из примера, чтоб переназначить поток с первой EP на четвертую.

Возможно просто забыли EP4 включить в устройстве.
Go to the top of the page
 
+Quote Post
grau
сообщение May 23 2007, 10:56
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 49
Регистрация: 3-02-05
Пользователь №: 2 390



Цитата(Слава_2 @ May 23 2007, 13:18) *
>Теперь хочу увеличить скорость. Правильно ли понимаю, что для увеличения скорости достаточно объявить еще одну конечную точку, добавить к репорту идентефикатор и как раньше читать данные из файла?
Если так, то надо еще один интерфейс HID-устройства добавить.


Вот этого момента как раз и не могу понять.
Во-первых, добавил еще одну точку (к Ep1 добавил Ep4), так она просто игнорируется, т.е. не опрашивается и все in-репорты теряются (Device monitor их не видит).
Вопрос: может ли виндовый HID-драйвер работать с несколькими конечными точками?

Во-вторых, пока не разобрался с добавлением еще одного интерфейса. Делаю так: в ConfigDescriptor перед терминатором копирую Interface, HID и Ep дескрипторы. Правлю номера нужные цифры. Енумерация не проходит. Сижу сейчас разбираюсь.


Цитата
Можно по другому:
1) Файл usbdesc.c - дескриптор HID-устройства HID_ReportDescriptor - здесь все надо менять. Например так
2) Файл usbdesc.c - дескриптор USB-устройства USB_ConfigDescriptor - элемент bInterval поставить 1


Это уже сделал, 64000Б/с достигнуто. Хочу еще пару таких же каналов организовать

Цитата
4) Переписать пример в Windows, чтобы репорт нужного размера забирал. Причем наверх из устройства нужно всегда отправлять пакет, начинающийся с байта REPORT_ID. Иначе hid.dll отбросит ваш ответ.


Если правильно понимаю, то при чтении файла надо подсовывать буфер для данных, а функция сама уже разберется, чем и как его заполнять. Подсовываю памяти заведомо больше данных, а потом сам уже разгребаю по Id и длине пакетов.

Цитата
>И еще вопросик. Изменил дескриптор из примера, чтоб переназначить поток с первой EP на четвертую.
Возможно просто забыли EP4 включить в устройстве.


Разобрался. Оказывается, чтоб точка заработала, в нее надо было хоть раз что-то записать. Что-то в доках об этом не видел..
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 01:02
Рейтинг@Mail.ru


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