Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Нестабильное определение USB устройства
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > RS232/LPT/USB/PCMCIA/FireWire
Angle
Реализую обмен данными между ПК и платой с AT91SAM7A3.
Обмен (HID устройство) работает, но определяется виндой нестабильно как на одном компьютере так и при подключении к другому копмьютеру.
Устройство FullSpeed, линия D+ подтянута постоянно через 1,5кОм к 3,3В, плата питается от собственного источника питания.
После подключения кабеля USB к устройству:
При правильном обнаружении все работает ОК.
При неправильном обнаружении винда выдает "Обнаружено неизвестное устройство",
Программа USB View пишет про это неизвестное устройство: все нули (VID,PID и т.д.) и Bus Speed - LOW!(?). Как такое может быть ?
В чем может быть проблема: в аппаратной части (подтяжка, сброс контроллера) или в программе контроллера?
Нужна ли задержка во включении подтяжки линии D+ после подключения USB разьема?
Очень нужно гарантированное определение этого устройства на любом компьютере.
На рисунке схема из datasheet к AT91SAM7A3. Единственное, что К-Э транзистора я замкнул (так как на нем падает около 0,6 В).
Konst_777
Цитата(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)
Angle
Я немного изменил схему внешней обвязки. Подтяжка на D+ теперь подается только при наличии напряжения питания USB. Помогло, но не совсем - в большем количестве случаев устройство стало успешно определяться. В худшем случае - оно определяется при 2х-3x кратном соединении-разъединении с хостом.
У меня такой вопрос - как конкретно контроллер может понять, что хост его не определил (не произвел енумерацию), чтобы произвести программный сброс?
Konst_777
Цитата(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. Посмотрите их состояние отладчиком.
jur
Цитата(Angle @ Sep 27 2007, 09:57) *
У меня такой вопрос - как конкретно контроллер может понять, что хост его не определил (не произвел енумерацию), чтобы произвести программный сброс?
Если говорить о CY7C68013/CY7C68001, то я поступаю крайне просто: если не пришло прерывание ENUM_OK, то енумерация не произошла. Пока остановился на таком методе выпутывания из этой ситуации: даю ресет на микросхему и пытаюсь енумерироваться повторно. Срабатывает всегда. Правда, иногда требуется произвести несколько попыток енумерации.

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

Эта проклятая USB неисчерпаема как атом...
Angle
Цитата(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) - прерывание по ресету шины.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.