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

 
 
 
Reply to this topicStart new topic
> Проблема с определением USB устройства в Host режиме на at90usb1287
tesk_terrus
сообщение Jan 23 2009, 20:57
Сообщение #1





Группа: Новичок
Сообщений: 7
Регистрация: 27-11-08
Пользователь №: 42 010



Есть обозначеный девайс, к которому нужно подключить мобильник через USB. Для этого используется атмеловский пример USBKEY_STK525-series7-host_cdc. Собственно проблема - при определении устройства

Host_clear_device_supported();
Host_clear_configured();
Host_clear_device_ready();
Host_enable_sof(); // Start Start Of Frame generation
Host_enable_sof_interrupt(); // SOF will be detected under interrupt

после этой строчки поднимается флаг прерывания дисконекта устройства и процесс определения устройства срывается. Поднимается флаг только для мобильника, другие устройства(флешки, переходник USB->UART) работают нормально. Пробовал использовать либу MyUSB 1.5.3 - там тоже не определяется только мобильник. При подключении к ПК мобильник определяется без проблем.
Go to the top of the page
 
+Quote Post
tAmega
сообщение Jan 23 2009, 23:03
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 474
Регистрация: 20-01-09
Из: НН
Пользователь №: 43 639



Хосты во всех этих примерах используют упрощенную процедуру ренумерации устройства. Поэтому вполне возможно, он не задает мобильнику правильный запрос или задает но неверно. Вот мобильник и не срабатывает. Наверное нужно взять протокол хоста с PC и проверить по исходникам, что он делает на PC, и что делает Атмеловский хост, и найти разницу.


--------------------
пользователь отключен
Go to the top of the page
 
+Quote Post
tesk_terrus
сообщение Jan 23 2009, 23:15
Сообщение #3





Группа: Новичок
Сообщений: 7
Регистрация: 27-11-08
Пользователь №: 42 010



Проблема возникает до чтения дескрипторов, протокол общения с хостом получаю в виде осциллограмы линии D+, а по ней понятно только что ПК начинает генерировать Start Start Of Frame импульсы, а контроллер - нет.
Go to the top of the page
 
+Quote Post
tAmega
сообщение Jan 24 2009, 07:10
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 474
Регистрация: 20-01-09
Из: НН
Пользователь №: 43 639



Ну все верно, функция Host_sof_action() в примере вообще не задана, и константа HOST_CONTINUOUS_SOF_INTERRUPT стоит в DISABLE, поэтому и не генерятся импульсы start_of_frame. Могу предположить, сам не пробовал, что для генерации sof импульсов, нужно организовать прерывание
от таймера в 1ms и напрямую управлять линиями DP,DM из этого прерывания для генерации sof импульсов.


--------------------
пользователь отключен
Go to the top of the page
 
+Quote Post
tesk_terrus
сообщение Jan 24 2009, 10:26
Сообщение #5





Группа: Новичок
Сообщений: 7
Регистрация: 27-11-08
Пользователь №: 42 010



Проблема возникает в состоянии DEVICE_ATTACHED, так что константа HOST_CONTINUOUS_SOF_INTERRUPT не имеет влияния(устанавливал её в ENABLE, результат не изменился). Импульсы start_of_frame генерируются самим USB-модулем микроконтроллера, у него есть для этого свой набор внутренних таймеров.
Go to the top of the page
 
+Quote Post
tAmega
сообщение Jan 24 2009, 10:59
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 474
Регистрация: 20-01-09
Из: НН
Пользователь №: 43 639



Цитата(tesk_terrus @ Jan 24 2009, 02:15) *
Проблема возникает до чтения дескрипторов, протокол общения с хостом получаю в виде осциллограмы линии D+, а по ней понятно только что ПК начинает генерировать Start Start Of Frame импульсы, а контроллер - нет.


Цитата(tesk_terrus @ Jan 24 2009, 13:26) *
Проблема возникает в состоянии DEVICE_ATTACHED, так что константа HOST_CONTINUOUS_SOF_INTERRUPT не имеет влияния(устанавливал её в ENABLE, результат не изменился). Импульсы start_of_frame генерируются самим USB-модулем микроконтроллера, у него есть для этого свой набор внутренних таймеров.


Вы пишете взаимоисключающие вещи, сначала, что AT90USB1287 не генерирует импульсы SOF, затем, что у микроконтроллера есть свои внутренние таймеры, и он генерирует эти импульсы? Можно поподробнее, что же все таки у Вас происходит.
У него есть SOFEN бит в регистре UHCON, который отвечает за генерацию SOF импульсов. Если его установить в 1, host генерирует эти импульсы в автомате. Возможно у Вас этот бит во время подключения мобильника сбрасывается и хост уходит в SUSPEND MODE.

Сообщение отредактировал tAmega - Jan 24 2009, 11:00


--------------------
пользователь отключен
Go to the top of the page
 
+Quote Post
tesk_terrus
сообщение Jan 24 2009, 13:00
Сообщение #7





Группа: Новичок
Сообщений: 7
Регистрация: 27-11-08
Пользователь №: 42 010



Бит SOFEN бит в регистре UHCON не сбрасывается. Думаю что импульсы SOF не генерируются из-за того, что поднимается флаг прерывания дисконекта устройства. Собственно проблему с подъёмом флага дисконекта устройства я и хочу решить.
Go to the top of the page
 
+Quote Post
tesk_terrus
сообщение Feb 12 2009, 13:10
Сообщение #8





Группа: Новичок
Сообщений: 7
Регистрация: 27-11-08
Пользователь №: 42 010



Ситуация изменилась, теперь 1 SOF генерируется и флаг дисконекта устройства, поднимается после него. Линия Д+ после этого опускается в 0. Т.е. устройство уходит с шины, как только получает первый SOF. Поскажите из-за чего может возникать подобная ситуация, вдумчивое курение USB-спецификации и даташита по контроллеру пока не приносят результата.
Go to the top of the page
 
+Quote Post
tesk_terrus
сообщение Feb 13 2009, 13:12
Сообщение #9





Группа: Новичок
Сообщений: 7
Регистрация: 27-11-08
Пользователь №: 42 010



Проблему решил дополнительным USB-reset'ом на пол секунды, перед разрешением генерации SOF-ов. Может кому-то пригодится подобная информация. wink.gif
Go to the top of the page
 
+Quote Post

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

 


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


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