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

 
 
 
Reply to this topicStart new topic
> LPC17xx, USB device отваливается
esaulenka
сообщение Mar 13 2012, 13:39
Сообщение #1


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

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



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

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

Команда Get Device Status при этом возвращает 0x0C - suspend + suspend change, connect = 0. Устройство ПК видит, но на запросы оно отвечать перестаёт.
Пробовал "дёргать" подтяжкой D+ (висит на GPIO), результат отрицательный: ПК видит, что устройство пропало, а потом появляется новое устройство, но до запроса дескрипторов дело доходит с вероятностью около 50% - оно или остаётся в suspend, или всё-таки начинает работать.
Передёргивание шнурка руками также работает аналогично.

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


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
kovigor
сообщение Mar 13 2012, 16:28
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(esaulenka @ Mar 13 2012, 16:39) *
Собственно, вопрос: как бы из этой ситуации выбраться?


Сопротивления на нескольку десятков Ом последовательно в линиях D+ и D- имеются ?
Конденсаторы (по 47 пФ, кажется) от этих линий на землю подключены ?

P.S. Стоп. насчет конденсаторов точно не скажу, где они нужны - на хосте или на дивайсе. Не могу найти соотв. документ ...
А вообще - возьмите схему отладочной платы на этом МК и посмотрите ее схему и разводку (Gerber - файлы) ...
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Mar 14 2012, 17:52
Сообщение #3


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

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



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

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

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

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

Теперь вопросов два:
- почему подтяжка влияет на состояние connect и где об этом написано в документации?
- (исходный вопрос) как корректно выйти из suspend ?


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Jun 1 2012, 13:30
Сообщение #4


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

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



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

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

Собственно, что я вижу:
по какой-то проблеме (разряд статики вблизи кабеля, или, например, просто кратковременное замыкание D+ и D-) в регистре Device Status появляется значение 0x0D - выставлены биты connect, suspend, suspend change.
Попытка сделать remote wakeup - сделать Set Device Status без бита suspend не работает - сначала из регистра статуса читается 0x09 - без бита suspend, а потом сразу же после - с этим битом.


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
kovigor
сообщение Jun 2 2012, 18:28
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(esaulenka @ Jun 1 2012, 16:30) *
Мда. Плохо победили...
Периодически оно таки отваливается...


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

- Смените машину. Например, что будет, если взять ноутбук ?
- Попробуйте взять качественный и заведомо рабочий кабель, или вообще обойдитесь без него, втыкая дивайс (как флэшку) в разъем на задней панели машины (не на передней - к ней часто идет никуда не годный кабельный "отросток").
- Запитайте дивайс от аккумулятора (или иным способом полностью отвяжите дивайс и(или) машину от силовой сети).
- Купите отладочную плату на этом МК и поэкспериментируйте с ней. Она тоже отваливается ?
- Попробуйте прошить в плату проекты, поставляемые с ИАРом и КЕЙЛом. Как они себя ведут ?
- Воспользуйтесь аппаратным USB - сниффером.
- ...
Go to the top of the page
 
+Quote Post
Petka
сообщение Jun 2 2012, 19:23
Сообщение #6


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

Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886



Цитата(kovigor @ Jun 2 2012, 22:28) *
...
- Попробуйте прошить в плату проекты, поставляемые с ИАРом и КЕЙЛом. Как они себя ведут ?
....

USB проекты Кейла для NXP мягко говоря... любительские. Одна из грубых ошибок - отсутствие volatile для переменной, которая используется в ISR и в main loop.
Go to the top of the page
 
+Quote Post
kovigor
сообщение Jun 2 2012, 19:45
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(Petka @ Jun 2 2012, 22:23) *
USB проекты Кейла для NXP мягко говоря... любительские. Одна из грубых ошибок - отсутствие volatile для переменной, которая используется в ISR и в main loop.


Не знаю, лично я разбирал КЕЙЛовские примеры для LPC214x и делал на их основе свои проекты. Ничего там не отваливается. Единственный замеченный (тогда; сейчас, возможно, эта проблема решена) недостаток - абсолютно сырой механизм перехода в режим Suspend и выхода из него. Про пробуждение по инициативе устройства я вообще молчу. Не хотите Кейл - можно попробовать ИАР. Но примеры на то и примеры, чтобы что-то проиллюстрировать, и коммерчески корректными они быть не обязаны. У автора, похоже, какая-то совершенно банальная проблема вроде негодного кабеля или наводящейся на кабель (устройство) помехи ...
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Jun 3 2012, 20:48
Сообщение #8


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

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



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

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

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

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


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
skripach
сообщение Jun 3 2012, 21:12
Сообщение #9


■ ■ ■ ■
*****

Группа: Свой
Сообщений: 1 100
Регистрация: 9-08-06
Пользователь №: 19 443



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

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


--------------------
Делай что должен и будь что будет.
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Jun 3 2012, 21:28
Сообщение #10


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

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Разъём USB соединён с корпусом устройства (задняя планка, ещё пара внутренних металлических частей) напрямую, а он, в свою очередь, через резистор 1МОм и конденсатор (330пФ или 1мкФ, не помню, завтра уточню) - с землёй устройства.
Также корпус и земля соединены в одной точке - в блоке питания. БП не наш, дорабатывать его не получится. Хвост БП - метра полтора. Эта общая точка, в свою очередь, через БП подключается к зазмляющему контакту в розетке.
Собственно, это очень похоже на рекомендации FTDI и известной статьи о защите от помех (ссылочку могу завтра напомнить, но её тут часто рекомендуют sm.gif ).


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
skripach
сообщение Jun 3 2012, 21:57
Сообщение #11


■ ■ ■ ■
*****

Группа: Свой
Сообщений: 1 100
Регистрация: 9-08-06
Пользователь №: 19 443



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

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


--------------------
Делай что должен и будь что будет.
Go to the top of the page
 
+Quote Post
kovigor
сообщение Jun 4 2012, 03:46
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(esaulenka @ Jun 3 2012, 23:48) *
kovigor, расскажете, как выглядит несырой механизм входа-выхода из suspend ?


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

P.S. В статье Кузнецова рассматривается решение вашей проблемы (если это не та статья, о которой вы говорите):
http://caxapa.ru/lib/emc_immunity.html
Go to the top of the page
 
+Quote Post

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

 


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


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