esaulenka 7 13 марта, 2012 Опубликовано 13 марта, 2012 · Жалоба У нас в устройстве на LPC1768 реализован USB CDC интерфейс - для совместимости со старыми решениями, работающими через COM-порт. Со стороны ПК ставим стандартный usbser.sys от майкрософта. Столкнулись со следующей проблемой: периодически (из-за проблем со статикой) устройство решает, что ему надо уйти в Suspend. Команда Get Device Status при этом возвращает 0x0C - suspend + suspend change, connect = 0. Устройство ПК видит, но на запросы оно отвечать перестаёт. Пробовал "дёргать" подтяжкой D+ (висит на GPIO), результат отрицательный: ПК видит, что устройство пропало, а потом появляется новое устройство, но до запроса дескрипторов дело доходит с вероятностью около 50% - оно или остаётся в suspend, или всё-таки начинает работать. Передёргивание шнурка руками также работает аналогично. Собственно, вопрос: как бы из этой ситуации выбраться? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kovigor 6 13 марта, 2012 Опубликовано 13 марта, 2012 · Жалоба Собственно, вопрос: как бы из этой ситуации выбраться? Сопротивления на нескольку десятков Ом последовательно в линиях D+ и D- имеются ? Конденсаторы (по 47 пФ, кажется) от этих линий на землю подключены ? P.S. Стоп. насчет конденсаторов точно не скажу, где они нужны - на хосте или на дивайсе. Не могу найти соотв. документ ... А вообще - возьмите схему отладочной платы на этом МК и посмотрите ее схему и разводку (Gerber - файлы) ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 7 14 марта, 2012 Опубликовано 14 марта, 2012 · Жалоба Сопротивления на нескольку десятков Ом последовательно в линиях D+ и D- имеются ? Угу, по 33 Ома. Конденсаторы тоже есть - всего 22 пФ, но параллельно им стоит защитный диод, у него своей паразитной емкости много (до 150 пФ по даташиту). К тому же конденсаторы по спецификации USB не нужны - оговорена максимальная емкость (150 пФ) на линиях D+/D-, а не минимальная. Подозреваю, что с учётом разъема, дорожек и проч. я её несколько превышаю :) Собственно, вопрос больше софтовый: аппаратно мы проблему победили; после корректного заземления всего и вся вероятность сбоя снизилась на порядок. Интересно, как бороться с этим программно. Совершенно случайно обнаружил свою ошибку: на входе VBus (используется именно как VBus) включен pull-down. На эту ногу заведено питание с USB через RC-цепочку 3.3 кОм - 0.1 мкФ. Если убрать подтяжку, жить становится заметно веселей - в суспенд мы уходим реже, и корректно оттуда восстанавливаемся (передёргивая Connect, ничего лучше не придумал). Теперь вопросов два: - почему подтяжка влияет на состояние connect и где об этом написано в документации? - (исходный вопрос) как корректно выйти из suspend ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 7 1 июня, 2012 Опубликовано 1 июня, 2012 · Жалоба Мда. Плохо победили... Периодически оно таки отваливается... "Дёргать" connect неинтересно - возникают проблемы у софта на ПК, хотелось бы не перезапускать тамошний драйвер. Собственно, что я вижу: по какой-то проблеме (разряд статики вблизи кабеля, или, например, просто кратковременное замыкание D+ и D-) в регистре Device Status появляется значение 0x0D - выставлены биты connect, suspend, suspend change. Попытка сделать remote wakeup - сделать Set Device Status без бита suspend не работает - сначала из регистра статуса читается 0x09 - без бита suspend, а потом сразу же после - с этим битом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kovigor 6 2 июня, 2012 Опубликовано 2 июня, 2012 · Жалоба Мда. Плохо победили... Периодически оно таки отваливается... Причин тысяча - от негодного кабеля до чисто программной ошибки. Примерный план действий: - Смените машину. Например, что будет, если взять ноутбук ? - Попробуйте взять качественный и заведомо рабочий кабель, или вообще обойдитесь без него, втыкая дивайс (как флэшку) в разъем на задней панели машины (не на передней - к ней часто идет никуда не годный кабельный "отросток"). - Запитайте дивайс от аккумулятора (или иным способом полностью отвяжите дивайс и(или) машину от силовой сети). - Купите отладочную плату на этом МК и поэкспериментируйте с ней. Она тоже отваливается ? - Попробуйте прошить в плату проекты, поставляемые с ИАРом и КЕЙЛом. Как они себя ведут ? - Воспользуйтесь аппаратным USB - сниффером. - ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Petka 0 2 июня, 2012 Опубликовано 2 июня, 2012 · Жалоба ... - Попробуйте прошить в плату проекты, поставляемые с ИАРом и КЕЙЛом. Как они себя ведут ? .... USB проекты Кейла для NXP мягко говоря... любительские. Одна из грубых ошибок - отсутствие volatile для переменной, которая используется в ISR и в main loop. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kovigor 6 2 июня, 2012 Опубликовано 2 июня, 2012 · Жалоба USB проекты Кейла для NXP мягко говоря... любительские. Одна из грубых ошибок - отсутствие volatile для переменной, которая используется в ISR и в main loop. Не знаю, лично я разбирал КЕЙЛовские примеры для LPC214x и делал на их основе свои проекты. Ничего там не отваливается. Единственный замеченный (тогда; сейчас, возможно, эта проблема решена) недостаток - абсолютно сырой механизм перехода в режим Suspend и выхода из него. Про пробуждение по инициативе устройства я вообще молчу. Не хотите Кейл - можно попробовать ИАР. Но примеры на то и примеры, чтобы что-то проиллюстрировать, и коммерчески корректными они быть не обязаны. У автора, похоже, какая-то совершенно банальная проблема вроде негодного кабеля или наводящейся на кабель (устройство) помехи ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 7 3 июня, 2012 Опубликовано 3 июня, 2012 · Жалоба Да, это совершенно банальная проблема в виде наводящейся на кабель помехи. Желающие могут попробовать поставить на металлический лист (у нас используется боковинка от ATX корпуса) своё устройство и "щелкнуть" туда разрядом 4-6 киловольт (наносекунды не помню, но их немного). Убрать совсем помеху, скорее всего, не получится. Мы можем рекомендовать клиентам какое-то размещение, можем им кабелей купить (несколько тысяч, на каждое проданное устройство), можем порекомендовать (и даже, возможно, выполнить) какие-то доработки, но шкафы, которые будут экранировать нашу железку от всего остального никто никогда ставить не будет... kovigor, расскажете, как выглядит несырой механизм входа-выхода из suspend ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
skripach 6 3 июня, 2012 Опубликовано 3 июня, 2012 · Жалоба LPC17xx, USB device отваливается Как корпус USB разъёма соединён с землёй и соединён ли вообще? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 7 3 июня, 2012 Опубликовано 3 июня, 2012 · Жалоба Разъём USB соединён с корпусом устройства (задняя планка, ещё пара внутренних металлических частей) напрямую, а он, в свою очередь, через резистор 1МОм и конденсатор (330пФ или 1мкФ, не помню, завтра уточню) - с землёй устройства. Также корпус и земля соединены в одной точке - в блоке питания. БП не наш, дорабатывать его не получится. Хвост БП - метра полтора. Эта общая точка, в свою очередь, через БП подключается к зазмляющему контакту в розетке. Собственно, это очень похоже на рекомендации FTDI и известной статьи о защите от помех (ссылочку могу завтра напомнить, но её тут часто рекомендуют :) ). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
skripach 6 3 июня, 2012 Опубликовано 3 июня, 2012 · Жалоба Разъём USB соединён с корпусом устройства (задняя планка, ещё пара внутренних металлических частей) напрямую, а он, в свою очередь, через резистор 1МОм и конденсатор (330пФ или 1мкФ, не помню, завтра уточню) - с землёй устройства. Соедините корпус USB разъёма с землёй напрямую ну или через пару десятков ом и будет вам счастье. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kovigor 6 4 июня, 2012 Опубликовано 4 июня, 2012 · Жалоба kovigor, расскажете, как выглядит несырой механизм входа-выхода из suspend ? Не расскажу сейчас, прошло несколько лет, и я подзабыл детали. Но могу дать готовый отлаженный проект. P.S. В статье Кузнецова рассматривается решение вашей проблемы (если это не та статья, о которой вы говорите): http://caxapa.ru/lib/emc_immunity.html Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться