Перейти к содержанию
    

Ну если так оставлю USB в качестве дополнительного фичера. Мол если нет адаптера под RS232 можете подключить на USB. Только для настроек и слива логов.

Я много заказных гаджетов под usb делаю, так решил ( ну, почти решил...) проблему отваливания так - прямо в пк втыкаю usb/RS485 ( именно прямо в разъем, без единого миллиметра кабеля) , связь с гаджетом по RS485, а на гаджете RS485чип вроде sn75176. А напрямую замучался вревать с usb, причем заметил , что с usb кабелем по 50 руб отваливается в 10 раз чаще, чем с кабелем за 500 руб. Но все- таки отваливается, при сколь угодно качественном кабеле, а по приведенному мной алгоритму работает неделями.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для дома и офиса юсб - самое то, и без единого разрыва :D , вобщем везде где нет дополнительных наводок и драйвера нормальные. От MS драйвера давно вылизаны и у большинства производителей тоже. Ресетнуть шину со стороны устройства тоже элементарно. Либо на D+, либо на D- есть подтяжка 1.5К надо её отключить, а потом включить. Цена вопроса транзистор+резистор+нога контроллера. Некоторые называют эту штуку SoftConnect.

Однако проблема ТС либо в наводках, либо в кривых руках с какой-то из сторон кабеля. И на самом деле решать нужно эту проблему.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ресетнуть шину со стороны устройства тоже элементарно. Либо на D+, либо на D- есть подтяжка 1.5К надо её отключить, а потом включить..

Я видел в китайских платах подтяжку к питанию через транзистор на D+. То есть это для сброса? А как узнать когда делать сброс? По статусу в IRQ?

 

Вобще то непонятно. Как PC знает что это сигнал с подтяжки а не дата high/low. Хотя... D+/D- это ж разностный сигнал.

Изменено пользователем Jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Изначально эти подтяжки были определения скорости интерфейса.

Подтяжка на D- - low speed

-"- D+ - full speed

А потом, а потом отказаться от них уже не было возможности. Если порт завис и подтяжка пропала и появляется с точки зрения хоста устройство было подключено.

 

Всё же советую не искать момент для сборса, а разбираться почему ЮСБ виснет. Не идеализируя этот протокол, но все же он не виснет "без помощи". Устранить "помощь" это самый правильный способ. Но всем лениво и так плодятся байки про "зависающий" протокол.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всё же советую не искать момент для сборса, а разбираться почему ЮСБ виснет. Не идеализируя этот протокол, но все же он не виснет "без помощи". Устранить "помощь" это самый правильный способ. Но всем лениво и так плодятся байки про "зависающий" протокол.

спасибо. если не трогать грязными руками терминал работает весь день без проблем. но нужно быть готовым к крайним случаям. иначе все бы отказались от crc, асертов и проверок на ошибки, все это занимает весомый кусок кода, но все это необходимо - именно для крайнего случая. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я видел в китайских платах подтяжку к питанию через транзистор на D+. То есть это для сброса?

Это верно тлько для full speed. Для High speed при инициализации подтяжка включается, устройство начинает работать в full speed, а затем переходит в high speed и подтяжка отключается. Для того, чтобы сигнализировать хосту об отключении устройства нужно оторвать согласующий резистор от линии (как правило, он внутри PHY). Реализуется это обычно сбросом контроллера.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это верно тлько для full speed. Для High speed при инициализации подтяжка включается, устройство начинает работать в full speed, а затем переходит в high speed и подтяжка отключается. Для того, чтобы сигнализировать хосту об отключении устройства нужно оторвать согласующий резистор от линии (как правило, он внутри PHY). Реализуется это обычно сбросом контроллера.

Так я могу задать full speed.

/* at startup the core is in FS mode */
  pdev->cfg.speed   = USB_OTG_SPEED_FULL;

Или он потом все равно переключиться на high speed?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я много заказных гаджетов под usb делаю, так решил ( ну, почти решил...) проблему отваливания так - прямо в пк втыкаю usb/RS485 ( именно прямо в разъем, без единого миллиметра кабеля) , связь с гаджетом по RS485, а на гаджете RS485чип вроде sn75176...

Да, я тоже пришел примерно к такому же решению...

Если надежность важнее экономии, то драйвер RS485 в USB-разъеме лучше поставить с гальванической развязкой.

Его изолированную (от USB) часть запитать от "гаджета", по отдельным проводам. Кстати, можно для этого

те же USB-кабели использовать - витая пара для RS485 + питание от "гаджета" к разъему.

Пожалуй, это максимум, чего можно добиться от USB, в плане надежности.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Задачу комплексно надо решать.

 

Можно, конечно, встать в гордую позу "USB - дрянь, у меня будут только RS-485 (оптика, CAN, mil-1553, ...)". Только клиент мгновенно убежит к конкурентам - ему, клиенту, очень часто не лень раз в пол-года переткнуть шнурочек.

 

А вот обеспечить надёжность, чтобы этот пользователь не перетыкал шнурок после каждого чиха...

Ну так это и есть наша работа - подобрать компоненты, подумать над программными возможностями перезапуска...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Задачу комплексно надо решать...

Так, за чем же дело стало?

Предложите комплексное надежное решение.

А красивые правильные общие слова - здесь не аргумент. :laughing:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Надёжное решение - хост ловит dev_changed, закрывает-открывает устройство (у автора нашей софтины получилось плохо, пришлось требовать админские права и перезапускать usbserial.sys; c FTDI было как-то попроще), девайс ловит состояние suspend и делает реконнект.

И ESD защита по соотв. линиям, конечно же.

 

И всё работает. От разрядов в неск.киловольт рядом с кабелем связь теряется, конечно, но через пару секунд успешно восстанавливается.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

девайс ловит состояние suspend и делает реконнект.

А можно этот момент подробнее? suspend в каком ивенте ловиться? а реконект - подтягивающим сопротивлением?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

pdev->cfg.speed = USB_OTG_SPEED_FULL;

Скорее всего, этого достаточно, далее можно снять подтяжку. Я не проверял, что будет, если то же самое сказать про DEV_SPEED_FULL.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А вот обеспечить надёжность, чтобы этот пользователь не перетыкал шнурок после каждого чиха...

Ну так это и есть наша работа - подобрать компоненты, подумать над программными возможностями перезапуска...

Да если бы... Вот как Вы обеспечите надёжность, если USB крайне чувствительна к качеству контактов? Одна и та же флешка вдруг перестаёт работать на одном, втором, третьем порту... В другом компе работает нормально. И это при том, что длина кабеля - 0мм. Мой последний комп, купленный, кстати, за немалые деньги, весьма крут. Но на кейсе сэкономили, не придав значения мелочам. Так уже практически ни один разъём USB не работает. После десятка-другого пере-втыканий. И всё, с этим бороться бесполезно. Сколько не перезапускай. Да и флешка-то чем виновата? А всё дело в не очень хорошем соединении в первоначальный момент, в момент распознавания девайса. Любой незаметный чих - и или Ваш девайс вообще не виден, либо не распознаётся. А уж про отваливание по ходу - вообще молчу. Разве это не недостаток протокола - отсутствие попыток решить проблему? Если перевоткнуть - такой простой путь, то почему миллионы устройств не могут это делать программно-аппаратно? Без участия человека? Но нет, надо ехать на объект, чтобы вынуть и воткнуть заново кабель. Ибо даже дистанционный перезапуск компа не помогает.

В общем, - в топку! Жду, когда человечество одумается и создаст, наконец, нормальный интерфейс. :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

... Если перевоткнуть - такой простой путь, то почему миллионы устройств не могут это делать программно-аппаратно? Без участия человека? Но нет, надо ехать на объект, чтобы вынуть и воткнуть заново кабель. Ибо даже дистанционный перезапуск компа не помогает.

Дело в том, что проблема плохого (неполного, отсутствующего) контакта в разъеме ни какими "комплексными программно-аппаратными" методами принципиально не решается. Только механическое "перевтыкание" временно решает проблему, либо замена разъемов.

Так что не нужно строить "вредных иллюзий" на этот счет.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...