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

 
 
 
Reply to this topicStart new topic
> Нестабильное определение USB устройства
Angle
сообщение Sep 25 2007, 14:09
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 23
Регистрация: 8-08-07
Из: Екатеринбург
Пользователь №: 29 638



Реализую обмен данными между ПК и платой с AT91SAM7A3.
Обмен (HID устройство) работает, но определяется виндой нестабильно как на одном компьютере так и при подключении к другому копмьютеру.
Устройство FullSpeed, линия D+ подтянута постоянно через 1,5кОм к 3,3В, плата питается от собственного источника питания.
После подключения кабеля USB к устройству:
При правильном обнаружении все работает ОК.
При неправильном обнаружении винда выдает "Обнаружено неизвестное устройство",
Программа USB View пишет про это неизвестное устройство: все нули (VID,PID и т.д.) и Bus Speed - LOW!(?). Как такое может быть ?
В чем может быть проблема: в аппаратной части (подтяжка, сброс контроллера) или в программе контроллера?
Нужна ли задержка во включении подтяжки линии D+ после подключения USB разьема?
Очень нужно гарантированное определение этого устройства на любом компьютере.
На рисунке схема из datasheet к AT91SAM7A3. Единственное, что К-Э транзистора я замкнул (так как на нем падает около 0,6 В).
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Konst_777
сообщение Sep 25 2007, 14:57
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 549
Регистрация: 1-06-05
Пользователь №: 5 644



Цитата(Angle @ Sep 25 2007, 17:09) *
...Устройство FullSpeed, линия D+ подтянута постоянно через 1,5кОм к 3,3В, плата питается от собственного источника питания.
...Нужна ли задержка во включении подтяжки линии D+ после подключения USB разьема?

В присоединенном документе описывается почему линия D+ не должна быть постоянно подтянута к 3,3В. Даются ссылки на Спецификацию USB и Universal Serial Bus Implements Forum Full and Low Speed Electrical and Interoperability Compliance Test Procedure (http://www.usb.org/developers/docs/USB-IFTestProc1_3.pdf)
Прикрепленные файлы
Прикрепленный файл  monitoring_the_ez_usb_fx2lp_tm__vbus___an15813_12.pdf ( 75.34 килобайт ) Кол-во скачиваний: 615
 
Go to the top of the page
 
+Quote Post
Angle
сообщение Sep 27 2007, 06:57
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 23
Регистрация: 8-08-07
Из: Екатеринбург
Пользователь №: 29 638



Я немного изменил схему внешней обвязки. Подтяжка на D+ теперь подается только при наличии напряжения питания USB. Помогло, но не совсем - в большем количестве случаев устройство стало успешно определяться. В худшем случае - оно определяется при 2х-3x кратном соединении-разъединении с хостом.
У меня такой вопрос - как конкретно контроллер может понять, что хост его не определил (не произвел енумерацию), чтобы произвести программный сброс?
Go to the top of the page
 
+Quote Post
Konst_777
сообщение Sep 27 2007, 07:40
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 549
Регистрация: 1-06-05
Пользователь №: 5 644



Цитата(Angle @ Sep 27 2007, 09:57) *
...Подтяжка на D+ теперь подается только при наличии напряжения питания USB.

Так, а какая схема определения VBUS и задержка между подачей VBUS и подтяжкой D+?

Цитата(Angle @ Sep 27 2007, 09:57) *
...У меня такой вопрос - как конкретно контроллер может понять, что хост его не определил (не произвел енумерацию), чтобы произвести программный сброс?

Если хост не произвел енумерацию, то это как то должно отражаться регистрами UDP Global State Register и UDP Function Address Register. Посмотрите их состояние отладчиком.
Go to the top of the page
 
+Quote Post
jur
сообщение Sep 27 2007, 19:44
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 205
Регистрация: 16-10-05
Пользователь №: 9 704



Цитата(Angle @ Sep 27 2007, 09:57) *
У меня такой вопрос - как конкретно контроллер может понять, что хост его не определил (не произвел енумерацию), чтобы произвести программный сброс?
Если говорить о CY7C68013/CY7C68001, то я поступаю крайне просто: если не пришло прерывание ENUM_OK, то енумерация не произошла. Пока остановился на таком методе выпутывания из этой ситуации: даю ресет на микросхему и пытаюсь енумерироваться повторно. Срабатывает всегда. Правда, иногда требуется произвести несколько попыток енумерации.

Сегодня обнаружил другую проблему :-) Эта зараза (я про Винду с CY7C68001 в компании) иногда (очень редко, и только по утрам) енумерирует микросхему в режиме Full Speed. Вроде все корректно, но мое устройство не может работать на Full Speed - только на High Speed. Придется и это исправлять ресетом с повторной енумерацией.

Эта проклятая USB неисчерпаема как атом...


--------------------
MPEG-4 - в массы!
Go to the top of the page
 
+Quote Post
Angle
сообщение Oct 2 2007, 04:40
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 23
Регистрация: 8-08-07
Из: Екатеринбург
Пользователь №: 29 638



Цитата(Konst_777 @ Sep 27 2007, 13:40) *
Так, а какая схема определения VBUS и задержка между подачей VBUS и подтяжкой D+?
Если хост не произвел енумерацию, то это как то должно отражаться регистрами UDP Global State Register и UDP Function Address Register. Посмотрите их состояние отладчиком.

Схема определния VBUS изображена на рисунке: конденсатор и резистивный делитель. Насчет задержки.. а какая она должна быть? Я пробовал подавать без задержки и с ней - особой разницы нет. Регистры UDP Global State Register и UDP Function Address Register изменяются в программе в функции USB_Reset(), которая вызывается в обработчике прерываний Global USB Interrupt (проверятся бит ENDBUSRES в UDP Interrupt Status Register) - прерывание по ресету шины.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 26th June 2025 - 21:44
Рейтинг@Mail.ru


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