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

 
 
> USB. Советы от galjoen., 1. Как развесить USB со стороны девайса.
galjoen
сообщение Mar 8 2009, 12:36
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Предисловие:
Я давно пользуюсь данным приёмом, но не хотел предавать его огласке. Считал, что это моё конкурентное преимущество. И действительно. В частности за счёт этого мой USB девайс выиграл тендер. Т.к. во время испытаний у конкурентов девайс вешался, а у меня нет. Т.е. у меня тоже вешался, но потом сам развешивался. Но теперь я как-то осознал себя в одной лодке с другими разработчиками. Да ещё меня в другой ветке похвалили за то, что я выложил то, что по моему мнению было всем известно. Я предполагаю, что такой приём некоторые знают, но молчат, как молчал я. Пишу это в надежде, что и другие, кому есть что сказать, последуют моему примеру.

Проблемма:
USB девайсы бывает вешаются. Обсуждалось это и здесь. Пришли к выводу, что это хаб блокирует порт к которому подключен девайс. Разблокировать программно его можно (см. параллельные ветки). Но что делать в тех случаях, когда нельзя ставить/запускать никаких программ. Например ваш девайс это MassStorage с записанным в нем логом. Или HID, к которому обращаются стандартной программой. Или CDC с чужой программой?

Решение - теория:
Когда хаб блокирует порт, то со стороны девайса это воспринимается как переход в Suspend. Т.е. нужно засыпать, потребляя не более 500 микроампер. А различить со стороны девайса реальный Suspend и блокировку порта хабом невозможно. Невозможно без некоторых действий. Если девайс отключит свой подтягивающий резистор к D+, то хаб воспримет это как отключение девайса. Со стороны хаба это неотличимо. А раз девайс вытащили, то хаб переводит порт из заблокированного состояния в отключенное. При последующем подключении, хаб решит, что в этот порт воткнут новый/другой девайс и все начнет работать. Причём это никак не противоречит спецификации USB.
Решение - практика:
Когда мой девайс видит на шине USB состояние Suspend, он действительно засыпает и потребляет при этом не более 500 микроампер. Т.е. удовлетворяет всем спецификациям USB. НО. Периодически обычно раз в 2 секунды он отключает свой подтягивающий резистор на время более 2,5 микросекунд. Реально я делаю около 20 милисекуд и процессор у меня в это время спит. Проснувшись он подключает подтягивающий резистор и смотрит на реакцию шины. По описанию вроде д.б. в течении 15 милисекунд, но реально надо делать побольше. Если ничего не произошло - спит дальше. Появилась активность, пошла энумерация - девайс различает такой вариан от первого втыкания в USB.
Данный способ можно реализовать даже и на FTDI и подобных микросхемах. У них обычно есть выход Suspend. Хотя лично мне эти переходники крайне не нравятся. ИМХО они допустимы ТОЛЬКО как временная мера.

Заключение:
Описанный способ это крайняя мера. Он не предназначен для исправления программных ляпов. Мне он видится чем-то подобным сторожевому таймеру. Надеюсь, что вы не будете уповать только на этот способ, но и будете отлаживать свой девайсы. Хотя в случае FTDI других способов и нет...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
sergeeff
сообщение Mar 11 2009, 17:37
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Я как-то работал с платой, где в цепи D+/D- стоял подобный трансформатор. Так вот никакими способами (программными) мне не удалось добиться устойчивой enumeration с usb device, пока этот самый трансформатор не был закорочен. После этого в серийных устройствах мы такое решение не применяем и проблема не проявлялась.
Go to the top of the page
 
+Quote Post
Седой
сообщение Mar 23 2009, 09:13
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 244
Регистрация: 21-02-05
Из: Урал
Пользователь №: 2 806



Цитата(sergeeff @ Mar 11 2009, 22:37) *
Я как-то работал с платой, где в цепи D+/D- стоял подобный трансформатор. Так вот никакими способами (программными) мне не удалось добиться устойчивой enumeration с usb device, пока этот самый трансформатор не был закорочен. После этого в серийных устройствах мы такое решение не применяем и проблема не проявлялась.


Странно, а мы ставим (DLW21Hxxx) проблем нет. Может все-таки правильно подбирать номинал нужно.
Go to the top of the page
 
+Quote Post



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

 


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


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