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

 
 
> Нестабильное определение 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
 
Start new topic
Ответов
Angle
сообщение Sep 27 2007, 06:57
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 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
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 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
Angle
сообщение Oct 2 2007, 04:40
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 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 Текстовая версия Сейчас: 25th June 2025 - 21:44
Рейтинг@Mail.ru


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