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

адресация USB контроллера AT90USB162

добрый вечер уважаемые коллеги по паяльнику. помогите разобратса с AT90USB162 если можете. после того как сделал atach и получил usb reset пришел SETUP с требованием device descriptor-а. послал это, опять получл usb reset а после новый SETUP SET_ADDRESS. прочитал адрес и как в описании указано, ответил посылкой ZLP. это, как я понял, делается обнулением TXINI. после этого опять получл usb reset и обмен быстро прервался. подскажите что делая не так.

___________________________________________.doc

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


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

Что сделал не так - послал неправильный с точки зрения PC дескриптор или не послал вообще. Дальше все по прописи - три попытки и устройство отключается.

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


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

помогите разобратса с AT90USB162 если можете

 

Установите BusHound и посмотрите, что вы реально отсылаете в машину ...

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


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

Установите BusHound и посмотрите, что вы реально отсылаете в машину ...

спосибо, буду работать

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


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

скачал демо версию bus hound, загрузил в МК бутлоадер, запустил и посмотрел на захваченные данные. там четко видны пакеты GET_DESCRIPTOR. потом загрузил и запустил свою программу. GET_DESCRIPTOR-ов не видно, но я их получаю и расшифровываю. почему bus hound не показывает?

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


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

Установите BusHound и посмотрите, что вы реально отсылаете в машину ...

скачал демо версию bus hound, загрузил в МК бутлоадер, запустил и посмотрел на захваченные данные. там четко видны пакеты GET_DESCRIPTOR. потом загрузил и запустил свою программу. GET_DESCRIPTOR-ов не видно, но я их получаю и расшифровываю. почему bus hound не показывает?

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


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

Что сделал не так - послал неправильный с точки зрения PC дескриптор или не послал вообще. Дальше все по прописи - три попытки и устройство отключается.

А разве PC пошлет устроойству SET_ADDRESS если не получил device descriptor? Я полученные SETUP пакеты вывожу на LCD и вроде все начинается правильно:

1 подключаюсь (atach)

2 получаю USB reset

3 получаю setup GET_DESCRIPTOR( 80 06 00 01 00 00 40 00 )

4 посылаю descriptor стиранием TXINI( 18 байт, из которых насколько я знаю, на этот раз PC интересуют первые 8)

5 получаю USB reset

6 получаю setup SET_ADDRESS ( 00 05 01 00 00 00 00 00 или 00 05 02 00 00 00 00 00 если до подключения моего устройства что-то уже было подключено)

7 отвечаю ZLP (стираю TXINI)

Отсюда все происходит не так как я ожидаю, вернее ничего не происходит, должен опять приходить setup GET_DESCRIPTOR, а его нет, получаю reset и все остонавливается. Пробовал послать несколько ZLP, не помогло.

Где искать ошибку? Кстати device descriptor я скопировал из какого-то ATMEL-овского устройства.

 

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


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

Где искать ошибку?

 

Насколько я помню, есть какая-то тонкость в обработке Set_Address. Кажется, следует установить адрес не сразу же после получения запроса Set_Address, а после того, как завершится статусная фаза этого запроса ...

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


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

Насколько я помню, есть какая-то тонкость в обработке Set_Address. Кажется, следует установить адрес не сразу же после получения запроса Set_Address, а после того, как завершится статусная фаза этого запроса ...

Вам бы золотой паяльник подарить, но не имею. Так что просто огромное спосибо, моя программа пошла дальше. Вы совершенно правы, адрес надо активировать после статусной фазы, но я не знал когда эта фаза кончается и активировал сразу после отправки ZLP. Сейчас дожидаю когда TXINI снова станет единицей, после активирую. Уже идут новые setup-ы с требованием device descriptor, interface descriptor… Надеюсь несколько дней никого не побеспокою, пока новые вопросы не накопятся.

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


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

Вам бы золотой паяльник подарить, но не имею. Так что просто огромное спосибо, моя программа пошла дальше. Вы совершенно правы, адрес надо активировать после статусной фазы, но я не знал когда эта фаза кончается и активировал сразу после отправки ZLP. Сейчас дожидаю когда TXINI снова станет единицей, после активирую. Уже идут новые setup-ы с требованием device descriptor, interface descriptor… Надеюсь несколько дней никого не побеспокою, пока новые вопросы не накопятся.

Рад был помочь. Успехов :)

Кстати, в даташитах на те МК, что мне попадались, указанная мной особенность всегда особо оговаривалась. Видимо, на всякий случай ...

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


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

Люди добрые - Помогите!!!! Ужо с месяц мозг выношу с аналогичной проблемой, только шагом дальше.

Ситуация следующая:

1 подключаюсь (atach)

2 получаю USB reset

3 получаю setup GET_DESCRIPTOR( 80 06 00 01 00 00 40 00 )

4 посылаю descriptor стиранием TXINI( 18 байт, из которых насколько я знаю, на этот раз PC интересуют первые 8)

5 получаю USB reset

6 получаю setup SET_ADDRESS ( 00 05 01 00 00 00 00 00 или 00 05 02 00 00 00 00 00 если до подключения моего устройства что-то уже было подключено)

7 получаю setup GET_DESCRIPTOR( 80 06 00 01 00 00 12 00 )

8 посылаю descriptor стиранием TXINI

 

и вот после этого все ничинается заного со 2го пункта.

 

вот сам дескриптор

0x12,0x01,0x00,0x02,0x03,0x00,0x01,0x40,0xEB,0x03,0xF9,0x2F,0x01,0x00,0x01,0x02,

0x03,0x01

 

пробовал проанализировать получаемые хостом данные через BusHound. Но он не показывает запросы на этом этапе.

Ужо незнаю куда копать :crying:

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


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

В дескрипторе задан размер нулевой точки 64 байта.Поэтому на запрос setup GET_DESCRIPTOR( 80 06 00 01 00 00 12 00 )data0 отправляй сразу 18 байт дескриптора data1 и жди следующий запрос.

 

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


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

В дескрипторе задан размер нулевой точки 64 байта.Поэтому на запрос setup GET_DESCRIPTOR( 80 06 00 01 00 00 12 00 )data0 отправляй сразу 18 байт дескриптора data1 и жди следующий запрос.

 

Так и делаю. Но только вместо следующего запроса приходит сборс и далее все по кругу. Проясните пожалуйста ситуацию на счет data0/data1. Есдинственное где я их нашел, это регистр UESTA0X. Но я так понял, там он устанавливается/сбрасывается аппаратно.

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

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


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

В общем разобралсо.

 

Суть проблемы была в том, что контроллер после получения, от хоста, командв "USB Reset" сбрасывал EP0 по дефолту, но при этом оставлял ее активной. А по дефолту - это все тож самое, только размер FIFO = 8 байт. После этого, хост, просил дескриптор устройства (18 байт), которые есессно не влазили в буфер и хосту отправлялся какой-то бред. После того как прицепил к "USB Reset" заного инициализацию ЕР0 - все заработало.

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

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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