Onkel 1 14 июля, 2016 Опубликовано 14 июля, 2016 · Жалоба Ну если так оставлю USB в качестве дополнительного фичера. Мол если нет адаптера под RS232 можете подключить на USB. Только для настроек и слива логов. Я много заказных гаджетов под usb делаю, так решил ( ну, почти решил...) проблему отваливания так - прямо в пк втыкаю usb/RS485 ( именно прямо в разъем, без единого миллиметра кабеля) , связь с гаджетом по RS485, а на гаджете RS485чип вроде sn75176. А напрямую замучался вревать с usb, причем заметил , что с usb кабелем по 50 руб отваливается в 10 раз чаще, чем с кабелем за 500 руб. Но все- таки отваливается, при сколь угодно качественном кабеле, а по приведенному мной алгоритму работает неделями. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kabdim 0 14 июля, 2016 Опубликовано 14 июля, 2016 · Жалоба Для дома и офиса юсб - самое то, и без единого разрыва :D , вобщем везде где нет дополнительных наводок и драйвера нормальные. От MS драйвера давно вылизаны и у большинства производителей тоже. Ресетнуть шину со стороны устройства тоже элементарно. Либо на D+, либо на D- есть подтяжка 1.5К надо её отключить, а потом включить. Цена вопроса транзистор+резистор+нога контроллера. Некоторые называют эту штуку SoftConnect. Однако проблема ТС либо в наводках, либо в кривых руках с какой-то из сторон кабеля. И на самом деле решать нужно эту проблему. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 14 июля, 2016 Опубликовано 14 июля, 2016 (изменено) · Жалоба Ресетнуть шину со стороны устройства тоже элементарно. Либо на D+, либо на D- есть подтяжка 1.5К надо её отключить, а потом включить.. Я видел в китайских платах подтяжку к питанию через транзистор на D+. То есть это для сброса? А как узнать когда делать сброс? По статусу в IRQ? Вобще то непонятно. Как PC знает что это сигнал с подтяжки а не дата high/low. Хотя... D+/D- это ж разностный сигнал. Изменено 14 июля, 2016 пользователем Jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kabdim 0 14 июля, 2016 Опубликовано 14 июля, 2016 · Жалоба Изначально эти подтяжки были определения скорости интерфейса. Подтяжка на D- - low speed -"- D+ - full speed А потом, а потом отказаться от них уже не было возможности. Если порт завис и подтяжка пропала и появляется с точки зрения хоста устройство было подключено. Всё же советую не искать момент для сборса, а разбираться почему ЮСБ виснет. Не идеализируя этот протокол, но все же он не виснет "без помощи". Устранить "помощь" это самый правильный способ. Но всем лениво и так плодятся байки про "зависающий" протокол. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 14 июля, 2016 Опубликовано 14 июля, 2016 · Жалоба Всё же советую не искать момент для сборса, а разбираться почему ЮСБ виснет. Не идеализируя этот протокол, но все же он не виснет "без помощи". Устранить "помощь" это самый правильный способ. Но всем лениво и так плодятся байки про "зависающий" протокол. спасибо. если не трогать грязными руками терминал работает весь день без проблем. но нужно быть готовым к крайним случаям. иначе все бы отказались от crc, асертов и проверок на ошибки, все это занимает весомый кусок кода, но все это необходимо - именно для крайнего случая. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex11 5 14 июля, 2016 Опубликовано 14 июля, 2016 · Жалоба Я видел в китайских платах подтяжку к питанию через транзистор на D+. То есть это для сброса? Это верно тлько для full speed. Для High speed при инициализации подтяжка включается, устройство начинает работать в full speed, а затем переходит в high speed и подтяжка отключается. Для того, чтобы сигнализировать хосту об отключении устройства нужно оторвать согласующий резистор от линии (как правило, он внутри PHY). Реализуется это обычно сбросом контроллера. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 14 июля, 2016 Опубликовано 14 июля, 2016 · Жалоба Это верно тлько для 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? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
@Ark 3 14 июля, 2016 Опубликовано 14 июля, 2016 · Жалоба Я много заказных гаджетов под usb делаю, так решил ( ну, почти решил...) проблему отваливания так - прямо в пк втыкаю usb/RS485 ( именно прямо в разъем, без единого миллиметра кабеля) , связь с гаджетом по RS485, а на гаджете RS485чип вроде sn75176... Да, я тоже пришел примерно к такому же решению... Если надежность важнее экономии, то драйвер RS485 в USB-разъеме лучше поставить с гальванической развязкой. Его изолированную (от USB) часть запитать от "гаджета", по отдельным проводам. Кстати, можно для этого те же USB-кабели использовать - витая пара для RS485 + питание от "гаджета" к разъему. Пожалуй, это максимум, чего можно добиться от USB, в плане надежности. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 7 14 июля, 2016 Опубликовано 14 июля, 2016 · Жалоба Задачу комплексно надо решать. Можно, конечно, встать в гордую позу "USB - дрянь, у меня будут только RS-485 (оптика, CAN, mil-1553, ...)". Только клиент мгновенно убежит к конкурентам - ему, клиенту, очень часто не лень раз в пол-года переткнуть шнурочек. А вот обеспечить надёжность, чтобы этот пользователь не перетыкал шнурок после каждого чиха... Ну так это и есть наша работа - подобрать компоненты, подумать над программными возможностями перезапуска... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
@Ark 3 14 июля, 2016 Опубликовано 14 июля, 2016 · Жалоба Задачу комплексно надо решать... Так, за чем же дело стало? Предложите комплексное надежное решение. А красивые правильные общие слова - здесь не аргумент. :laughing: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 7 14 июля, 2016 Опубликовано 14 июля, 2016 · Жалоба Надёжное решение - хост ловит dev_changed, закрывает-открывает устройство (у автора нашей софтины получилось плохо, пришлось требовать админские права и перезапускать usbserial.sys; c FTDI было как-то попроще), девайс ловит состояние suspend и делает реконнект. И ESD защита по соотв. линиям, конечно же. И всё работает. От разрядов в неск.киловольт рядом с кабелем связь теряется, конечно, но через пару секунд успешно восстанавливается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 14 июля, 2016 Опубликовано 14 июля, 2016 · Жалоба девайс ловит состояние suspend и делает реконнект. А можно этот момент подробнее? suspend в каком ивенте ловиться? а реконект - подтягивающим сопротивлением? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex11 5 14 июля, 2016 Опубликовано 14 июля, 2016 · Жалоба pdev->cfg.speed = USB_OTG_SPEED_FULL; Скорее всего, этого достаточно, далее можно снять подтяжку. Я не проверял, что будет, если то же самое сказать про DEV_SPEED_FULL. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Herz 6 14 июля, 2016 Опубликовано 14 июля, 2016 · Жалоба А вот обеспечить надёжность, чтобы этот пользователь не перетыкал шнурок после каждого чиха... Ну так это и есть наша работа - подобрать компоненты, подумать над программными возможностями перезапуска... Да если бы... Вот как Вы обеспечите надёжность, если USB крайне чувствительна к качеству контактов? Одна и та же флешка вдруг перестаёт работать на одном, втором, третьем порту... В другом компе работает нормально. И это при том, что длина кабеля - 0мм. Мой последний комп, купленный, кстати, за немалые деньги, весьма крут. Но на кейсе сэкономили, не придав значения мелочам. Так уже практически ни один разъём USB не работает. После десятка-другого пере-втыканий. И всё, с этим бороться бесполезно. Сколько не перезапускай. Да и флешка-то чем виновата? А всё дело в не очень хорошем соединении в первоначальный момент, в момент распознавания девайса. Любой незаметный чих - и или Ваш девайс вообще не виден, либо не распознаётся. А уж про отваливание по ходу - вообще молчу. Разве это не недостаток протокола - отсутствие попыток решить проблему? Если перевоткнуть - такой простой путь, то почему миллионы устройств не могут это делать программно-аппаратно? Без участия человека? Но нет, надо ехать на объект, чтобы вынуть и воткнуть заново кабель. Ибо даже дистанционный перезапуск компа не помогает. В общем, - в топку! Жду, когда человечество одумается и создаст, наконец, нормальный интерфейс. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
@Ark 3 14 июля, 2016 Опубликовано 14 июля, 2016 · Жалоба ... Если перевоткнуть - такой простой путь, то почему миллионы устройств не могут это делать программно-аппаратно? Без участия человека? Но нет, надо ехать на объект, чтобы вынуть и воткнуть заново кабель. Ибо даже дистанционный перезапуск компа не помогает. Дело в том, что проблема плохого (неполного, отсутствующего) контакта в разъеме ни какими "комплексными программно-аппаратными" методами принципиально не решается. Только механическое "перевтыкание" временно решает проблему, либо замена разъемов. Так что не нужно строить "вредных иллюзий" на этот счет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться