Перейти к содержанию
    

Общение по USB

Здравствуйте!

 

Не подскажете как должно происходить подтверждение данных отправленных device устройством на хост.

Т.е. хост прислал запрос на дескриптор устройства, далее необходимо послать этот дескриптор. Так вот вопрос: хост отвечает ACK на каждый байт принятый от устройства или только на весь дескриптор?

 

Т.е. получил я от хоста 00 00 80 06 00 01 00 00 40, что по байтам мне ему послать, т.е. сразу начать посылку элементов дескриптора?

Изменено пользователем Kruftin

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здравствуйте!

 

Не подскажете как должно происходить подтверждение данных отправленных device устройством на хост.

Т.е. хост прислал запрос на дескриптор устройства, далее необходимо послать этот дескриптор. Так вот вопрос: хост отвечает ACK на каждый байт принятый от устройства или только на весь дескриптор?

 

Т.е. получил я от хоста 00 00 80 06 00 01 00 00 40, что по байтам мне ему послать, т.е. сразу начать посылку элементов дескриптора?

Я думаю Вам более подробно следует изучить стандарт USB. Много книг на эту тему, если нет желания первоисточник читать. Хост отвечает ACK на правильно принятый пакет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я Агурова итак читаю. В процессоре имеется регистр передачи конечной точки, который вмещает один байт и глубиной 64 байта. Т.е. под пакетом как я понимаю и подразумевается посылка одного байта. Все данные передаются через нулевую конечную точку. И ещё вопрос должен ли USB сниффер ловить все передачи с устройства?

 

Распишу подробнее алгоритм:

 

1)включил usb контроллер

2)выставил в каждой конечной точке включение и готовность конечной точки к ответу на запрос

3)глобально разрешил работы конечных точек, задал скорость 1,5 Мбит/с

4)дождался выставления бита завершения транзакции, считал последовательно байты от хоста после каждого чтения дожидаясь выставления бита завершения транзакции.

5)после получения запроса - конфигурационного пакета начинаю посылать данные к хосту, пробовал послать и по 1 байту и несколько - безрезультатно.

 

Подскажите кто пользовался процессорами с USB какой там порядок посылки ответного дескриптора.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я Агурова итак читаю. В процессоре имеется регистр передачи конечной точки, который вмещает один байт и глубиной 64 байта. Т.е. под пакетом как я понимаю и подразумевается посылка одного байта. Все данные передаются через нулевую конечную точку. И ещё вопрос должен ли USB сниффер ловить все передачи с устройства?

 

Распишу подробнее алгоритм:

 

1)включил usb контроллер

2)выставил в каждой конечной точке включение и готовность конечной точки к ответу на запрос

3)глобально разрешил работы конечных точек, задал скорость 1,5 Мбит/с

4)дождался выставления бита завершения транзакции, считал последовательно байты от хоста после каждого чтения дожидаясь выставления бита завершения транзакции.

5)после получения запроса - конфигурационного пакета начинаю посылать данные к хосту, пробовал послать и по 1 байту и несколько - безрезультатно.

 

Подскажите кто пользовался процессорами с USB какой там порядок посылки ответного дескриптора.

Для начала в каком "процессоре" имеется регистр передачи конечной точки? Нулевой эндпойнт размером от 8/64 байта обычно. Загрузка данных в очередь может происходить последовательно, но вот выдаются они на шину USB все разом.

По снифферу - они разные есть. Обычно ловят далеко не всё. Если много возни с USB устройствами желательно иметь аппаратный анализатор - включается в разрыв шины и ловит всё.

 

По алгоритму - данные хосту передаются только с запроса самого хоста. Хост всегда мастер (on the go и прочие надстройки не рассматриваем). Сначала, в процеесе энумерации, нужно правильно передать хосту все дескрипторы, а потом уже хостом требовать или посылать данные устройству. Причем посылать устройством нужно определенный размер данных (всё прописывается на этапе энумерации), иначе хост их проигнорирует.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Т.е. получил я от хоста 00 00 80 06 00 01 00 00 40 этим хост запрашивает GET_DESCRIPTOR_DEVICE и указывает что хост хочет увидеть 0x40, т.е. 64 байта дескриптора. Дескриптор устройства + Дескриптор Конфигурации + Дескриптор строки не дадут 64 байта, хотя может это максимальный размер.

Ну т.е по логике после запроса хоста я просто сразу же кидаю ему все дескрипторы и после этого анализирую завершение транзакции и всё жду когда он определит моё устройство как флешку. Аппаратный анализатор наверно дорого стоит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Т.е. получил я от хоста 00 00 80 06 00 01 00 00 40 этим хост запрашивает GET_DESCRIPTOR_DEVICE и указывает что хост хочет увидеть 0x40, т.е. 64 байта дескриптора. Дескриптор устройства + Дескриптор Конфигурации + Дескриптор строки не дадут 64 байта, хотя может это максимальный размер.

Ну т.е по логике после запроса хоста я просто сразу же кидаю ему все дескрипторы и после этого анализирую завершение транзакции и всё жду когда он определит моё устройство как флешку. Аппаратный анализатор наверно дорого стоит.

Скорее хост передает 80 06 00 01 00 00 40 00. Он запрашивает только дескриптор устройства. Если control endpoint поддерживает 64-байтные пакеты, то устройство передает полностью пакет DESCRIPTOR_DEVICE (лишние байты в "0"). Если поддерживаются только 8-байтные пакеты, то после приема первых 8 байт хост знает размер дескриптора, рвет прием и заново запрашивает дескриптор уже нужного размера.

На каждый дескриптор хост будет посылать запрос.

 

Аппаратные анализаторы стоят от нескольких сотен до десятков тысяч $.

 

PS: Советую посмотреть примеры обмена по USB - многие вопросы отпадут. Либо поискать описание обмена так, либо скачать прогу для аппаратного анализатора и посмотреть примеры (для этого железка не нужна). Например тут.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

1. Хост подает команду сброса на порт, к которому подключено устройство.

 

2. Хост запрашивает дескриптор устройства, причем в запросе задает размер дескриптора 64 байта.

 

3. Хост принимает первые 8 байт дескриптора устройства, после чего подает команду сброса порта еще раз.

 

4. Хост присваивает устройству адрес с помощью запроса Set Address.

 

5. Хост снова считывает дескриптор устройства, причем в запросе указывается «правильный» размер дескриптора — 18 байт.

 

6. Хост запрашивает дескриптор конфигурации устройства, задавая в запросе размер дескриптора 9 байт, и извлекает из него значение полного размера списка дескрипторов.

 

7. Хост повторно запрашивает дескриптор конфигурации устройства и все сопутствующие ему дескрипторы, используя полученный размер списка.

 

8. Хост запрашивает дескрипторы строк, если они определены. Если какое-либо из устройств, подключенных к порту, является хабом, хост продолжает процесс настройки системы, поочередно опрашивая каждый порт хаба. Каждому найденному устройству хост присваивает адрес и задает конфигурацию по описанной выше схеме. Процесс конфигурирования продолжается, пока не будут настроены все хабы и подсоединенные к ним периферийные устройства с включенным питанием (выключенные устройства на запросы не отвечают, поэтому хост их «не видит»),

 

В процессе работы некоторые устройства могут быть отсоединены от шины или подсоединены к ней. Хост должен периодически контролировать состояние собственных портов и портов хабов (путем опроса по прерываниям), чтобы контролировать изменения на шине USB. Каждому вновь подключенному устройству должен быть присвоен номер и задана конфигурация.

Изменено пользователем gasga

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...