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

LPC17xx, USB device отваливается

У нас в устройстве на LPC1768 реализован USB CDC интерфейс - для совместимости со старыми решениями, работающими через COM-порт.

Со стороны ПК ставим стандартный usbser.sys от майкрософта.

 

Столкнулись со следующей проблемой: периодически (из-за проблем со статикой) устройство решает, что ему надо уйти в Suspend.

 

Команда Get Device Status при этом возвращает 0x0C - suspend + suspend change, connect = 0. Устройство ПК видит, но на запросы оно отвечать перестаёт.

Пробовал "дёргать" подтяжкой D+ (висит на GPIO), результат отрицательный: ПК видит, что устройство пропало, а потом появляется новое устройство, но до запроса дескрипторов дело доходит с вероятностью около 50% - оно или остаётся в suspend, или всё-таки начинает работать.

Передёргивание шнурка руками также работает аналогично.

 

Собственно, вопрос: как бы из этой ситуации выбраться?

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


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

Собственно, вопрос: как бы из этой ситуации выбраться?

 

Сопротивления на нескольку десятков Ом последовательно в линиях D+ и D- имеются ?

Конденсаторы (по 47 пФ, кажется) от этих линий на землю подключены ?

 

P.S. Стоп. насчет конденсаторов точно не скажу, где они нужны - на хосте или на дивайсе. Не могу найти соотв. документ ...

А вообще - возьмите схему отладочной платы на этом МК и посмотрите ее схему и разводку (Gerber - файлы) ...

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


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

Сопротивления на нескольку десятков Ом последовательно в линиях D+ и D- имеются ?

Угу, по 33 Ома. Конденсаторы тоже есть - всего 22 пФ, но параллельно им стоит защитный диод, у него своей паразитной емкости много (до 150 пФ по даташиту).

К тому же конденсаторы по спецификации USB не нужны - оговорена максимальная емкость (150 пФ) на линиях D+/D-, а не минимальная. Подозреваю, что с учётом разъема, дорожек и проч. я её несколько превышаю :)

 

Собственно, вопрос больше софтовый: аппаратно мы проблему победили; после корректного заземления всего и вся вероятность сбоя снизилась на порядок. Интересно, как бороться с этим программно.

 

Совершенно случайно обнаружил свою ошибку: на входе VBus (используется именно как VBus) включен pull-down. На эту ногу заведено питание с USB через RC-цепочку 3.3 кОм - 0.1 мкФ.

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

 

Теперь вопросов два:

- почему подтяжка влияет на состояние connect и где об этом написано в документации?

- (исходный вопрос) как корректно выйти из suspend ?

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


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

Мда. Плохо победили...

Периодически оно таки отваливается...

 

"Дёргать" connect неинтересно - возникают проблемы у софта на ПК, хотелось бы не перезапускать тамошний драйвер.

 

Собственно, что я вижу:

по какой-то проблеме (разряд статики вблизи кабеля, или, например, просто кратковременное замыкание D+ и D-) в регистре Device Status появляется значение 0x0D - выставлены биты connect, suspend, suspend change.

Попытка сделать remote wakeup - сделать Set Device Status без бита suspend не работает - сначала из регистра статуса читается 0x09 - без бита suspend, а потом сразу же после - с этим битом.

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


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

Мда. Плохо победили...

Периодически оно таки отваливается...

 

Причин тысяча - от негодного кабеля до чисто программной ошибки. Примерный план действий:

 

- Смените машину. Например, что будет, если взять ноутбук ?

- Попробуйте взять качественный и заведомо рабочий кабель, или вообще обойдитесь без него, втыкая дивайс (как флэшку) в разъем на задней панели машины (не на передней - к ней часто идет никуда не годный кабельный "отросток").

- Запитайте дивайс от аккумулятора (или иным способом полностью отвяжите дивайс и(или) машину от силовой сети).

- Купите отладочную плату на этом МК и поэкспериментируйте с ней. Она тоже отваливается ?

- Попробуйте прошить в плату проекты, поставляемые с ИАРом и КЕЙЛом. Как они себя ведут ?

- Воспользуйтесь аппаратным USB - сниффером.

- ...

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


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

...

- Попробуйте прошить в плату проекты, поставляемые с ИАРом и КЕЙЛом. Как они себя ведут ?

....

USB проекты Кейла для NXP мягко говоря... любительские. Одна из грубых ошибок - отсутствие volatile для переменной, которая используется в ISR и в main loop.

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


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

USB проекты Кейла для NXP мягко говоря... любительские. Одна из грубых ошибок - отсутствие volatile для переменной, которая используется в ISR и в main loop.

 

Не знаю, лично я разбирал КЕЙЛовские примеры для LPC214x и делал на их основе свои проекты. Ничего там не отваливается. Единственный замеченный (тогда; сейчас, возможно, эта проблема решена) недостаток - абсолютно сырой механизм перехода в режим Suspend и выхода из него. Про пробуждение по инициативе устройства я вообще молчу. Не хотите Кейл - можно попробовать ИАР. Но примеры на то и примеры, чтобы что-то проиллюстрировать, и коммерчески корректными они быть не обязаны. У автора, похоже, какая-то совершенно банальная проблема вроде негодного кабеля или наводящейся на кабель (устройство) помехи ...

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


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

Да, это совершенно банальная проблема в виде наводящейся на кабель помехи.

 

Желающие могут попробовать поставить на металлический лист (у нас используется боковинка от ATX корпуса) своё устройство и "щелкнуть" туда разрядом 4-6 киловольт (наносекунды не помню, но их немного).

 

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

 

kovigor, расскажете, как выглядит несырой механизм входа-выхода из suspend ?

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


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

LPC17xx, USB device отваливается

Как корпус USB разъёма соединён с землёй и соединён ли вообще?

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


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

Разъём USB соединён с корпусом устройства (задняя планка, ещё пара внутренних металлических частей) напрямую, а он, в свою очередь, через резистор 1МОм и конденсатор (330пФ или 1мкФ, не помню, завтра уточню) - с землёй устройства.

Также корпус и земля соединены в одной точке - в блоке питания. БП не наш, дорабатывать его не получится. Хвост БП - метра полтора. Эта общая точка, в свою очередь, через БП подключается к зазмляющему контакту в розетке.

Собственно, это очень похоже на рекомендации FTDI и известной статьи о защите от помех (ссылочку могу завтра напомнить, но её тут часто рекомендуют :) ).

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


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

Разъём USB соединён с корпусом устройства (задняя планка, ещё пара внутренних металлических частей) напрямую, а он, в свою очередь, через резистор 1МОм и конденсатор (330пФ или 1мкФ, не помню, завтра уточню) - с землёй устройства.

Соедините корпус USB разъёма с землёй напрямую ну или через пару десятков ом и будет вам счастье.

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


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

kovigor, расскажете, как выглядит несырой механизм входа-выхода из suspend ?

 

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

 

P.S. В статье Кузнецова рассматривается решение вашей проблемы (если это не та статья, о которой вы говорите):

http://caxapa.ru/lib/emc_immunity.html

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


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

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

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

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

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

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

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

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

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

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