_3m 4 20 января, 2009 Опубликовано 20 января, 2009 · Жалоба Изучаю USB HID класс. Обмен информацией работает - посылаю и принимаю репорты через Interrupt transfer, работают SET_FEATURE и GET_FEATURE, научился писишным софтом перезапускать зависший usb порт и определять факт зависания. Однако в литературе я нигде не нашел рекомендаций по организации взаимодействия между прикладным софтом PC и девайсом. В литературе и демо-проектах рассматривается джойстики мышки и светодиоды (зажечь/погасить по команда PC). Нигде не рассматривается как строить взаимодействие со сложными устройствами генерирующие двунаправленные потоки данных близкие к предельным для HID устройств (например PC<->PIC18F2550_HID_class<->СС1100). Мои эксперименты показывают что использование простейшего взаимодействия типа "запрос PC - ответ HID девайса" получится неэффективным. Несинхронизированный поточный обмен работает минимум в 2 раза быстрее, но требуется буферизация а в пике с рамой напряженка. Также есть и более конкретные вопросы: * имеет ли смысл использовать feature репорты * нужно ли поддерживать запись репортов через control transfer, ведь это нужно только win98 не-SE. которая не поддерживает out interrupt transfer. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tAmega 0 20 января, 2009 Опубликовано 20 января, 2009 · Жалоба Для двунаправленных потоков, о которых Вы говорите существует CDC класс, никто не мешает взять рабочий пример CDC RS232, и на стороне процессора вместо того, чтобы пробрасывать данные от хоста на UART, замкнуть обмен на себе. Тогда Вы получите двунапрвленный bulk обмен и никакого перерасхода RAM со стороны микропроцессора. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_3m 4 20 января, 2009 Опубликовано 20 января, 2009 · Жалоба Для двунаправленных потоков, о которых Вы говорите существует CDC класс, никто не мешает взять рабочий пример CDC RS232, и на стороне процессора вместо того, чтобы пробрасывать данные от хоста на UART, замкнуть обмен на себе. Тогда Вы получите двунапрвленный bulk обмен и никакого перерасхода RAM со стороны микропроцессора. Я знаю о существовании CDC класса. Нужно чтобы устройство работало без установки драйверов или inf файла: воткнул шнурок, запустил exe-шник без инсталяции и все заработало! По этой причине остается два варианта: HID и Mass storage. Сейчас ковыряю HID, если выявятся непреодолимые трудности - буду думать дальше. Ограничение в 64000 байт в секунду устраивает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
galjoen 0 18 февраля, 2009 Опубликовано 18 февраля, 2009 · Жалоба * имеет ли смысл использовать feature репорты Имеет. Особенно GET_FEATURE. Их ведь 255 штук м.б. Вот N этого репорта и будет запросом. Если вам этого хватит - ваш вопрос об эффективном взаимодействии решён. У меня у некоторых HID-ов только FEATURE и есть. Ни InterruptIn ни, тем более, InterruptOut нет вообще. * нужно ли поддерживать запись репортов через control transfer, ведь это нужно только win98 не-SE. которая не поддерживает out interrupt transfer. Вы имеете ввиду InterruptOut? А они разве у вас есть? Зачем? Имхо у них нет никаких преимуществ перед SET_FEATURE. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
galjoen 0 20 февраля, 2009 Опубликовано 20 февраля, 2009 · Жалоба Забыл сказать, что всё мною сказанное в предыдущем посте, справедливо только в том случае, если буфер у EP0 размером 64 байта. Я привык к таким девайсам и уже забыл, что бывают более другие... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_3m 4 24 февраля, 2009 Опубликовано 24 февраля, 2009 (изменено) · Жалоба Имеет. Особенно GET_FEATURE. Их ведь 255 штук м.б. Вот N этого репорта и будет запросом. Если вам этого хватит - ваш вопрос об эффективном взаимодействии решён. Чтобы сделать 255 репортов нужно создать 255 дескрипторов репоров, это совершенно нереально. Если в дескрипторе 1 репорт то винда не дает работать с report id отличным от нуля, во всяком случае мне это не удалось. У меня у некоторых HID-ов только FEATURE и есть. Ни InterruptIn ни, тем более, InterruptOut нет вообще. Так ведь interrupt in по спецификации обязателен для hid класса. Как же оно у вас работает то? Вы имеете ввиду InterruptOut? А они разве у вас есть? Зачем? Имхо у них нет никаких преимуществ перед SET_FEATURE. C interrupt out передачей несколько проще работать в микроконтроллере. Впрочем после прочтения информации о баге в драйверее hid win xp sp2-3 вопрос о работе через interrupt out отпал сам собой. В xp sp2-3 там баг, починен только в висте. Изменено 24 февраля, 2009 пользователем _3m Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
galjoen 0 24 февраля, 2009 Опубликовано 24 февраля, 2009 · Жалоба Чтобы сделать 255 репортов нужно создать 255 дескрипторов репоров, это совершенно нереально. Почему нереально? Дескрипторы не хранятся, а формируются в цикле. Если в дескрипторе 1 репорт то винда не дает работать с report id отличным от нуля, во всяком случае мне это не удалось. Верно. В этом случае даже можно использовать нулевой байт. Так ведь interrupt in по спецификации обязателен для hid класса. Как же оно у вас работает то? Нигде не читал об ОБЯЗАТЕЛЬНОСТИ InterruptIn и связанной с ним EP. У меня все работает как с, так и без, InterruptIn EP. C interrupt out передачей несколько проще работать в микроконтроллере. Простота эта связана с ограничением длины в 64 байта. Как, впрочем, и у InterruptIn. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Epikur 0 16 апреля, 2009 Опубликовано 16 апреля, 2009 · Жалоба Впрочем после прочтения информации о баге в драйверее hid win xp sp2-3 вопрос о работе через interrupt out отпал сам собой. В xp sp2-3 там баг, починен только в висте. А можно ли подробнее про баг хрюшки? У меня тоже PC <---> PIC18F2550, работает в режиме HID. И никак не удаётся достичь предельной скорости 64000 байт/с. Максимум получается только 42 кб/с. Ладно было бы 32 кб/с - хоть какая-то логика. а 42... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться