|
|
  |
LPC17xx, USB device отваливается |
|
|
|
Mar 13 2012, 13:39
|

Профессионал
    
Группа: Свой
Сообщений: 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, или всё-таки начинает работать. Передёргивание шнурка руками также работает аналогично.
Собственно, вопрос: как бы из этой ситуации выбраться?
--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
|
|
|
|
|
Mar 13 2012, 16:28
|
Гуру
     
Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295

|
Цитата(esaulenka @ Mar 13 2012, 16:39)  Собственно, вопрос: как бы из этой ситуации выбраться? Сопротивления на нескольку десятков Ом последовательно в линиях D+ и D- имеются ? Конденсаторы (по 47 пФ, кажется) от этих линий на землю подключены ? P.S. Стоп. насчет конденсаторов точно не скажу, где они нужны - на хосте или на дивайсе. Не могу найти соотв. документ ... А вообще - возьмите схему отладочной платы на этом МК и посмотрите ее схему и разводку (Gerber - файлы) ...
|
|
|
|
|
Mar 14 2012, 17:52
|

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

|
Цитата Сопротивления на нескольку десятков Ом последовательно в линиях D+ и D- имеются ? Угу, по 33 Ома. Конденсаторы тоже есть - всего 22 пФ, но параллельно им стоит защитный диод, у него своей паразитной емкости много (до 150 пФ по даташиту). К тому же конденсаторы по спецификации USB не нужны - оговорена максимальная емкость (150 пФ) на линиях D+/D-, а не минимальная. Подозреваю, что с учётом разъема, дорожек и проч. я её несколько превышаю  Собственно, вопрос больше софтовый: аппаратно мы проблему победили; после корректного заземления всего и вся вероятность сбоя снизилась на порядок. Интересно, как бороться с этим программно. Совершенно случайно обнаружил свою ошибку: на входе VBus (используется именно как VBus) включен pull-down. На эту ногу заведено питание с USB через RC-цепочку 3.3 кОм - 0.1 мкФ. Если убрать подтяжку, жить становится заметно веселей - в суспенд мы уходим реже, и корректно оттуда восстанавливаемся (передёргивая Connect, ничего лучше не придумал). Теперь вопросов два: - почему подтяжка влияет на состояние connect и где об этом написано в документации? - (исходный вопрос) как корректно выйти из suspend ?
--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
|
|
|
|
|
Jun 1 2012, 13:30
|

Профессионал
    
Группа: Свой
Сообщений: 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, а потом сразу же после - с этим битом.
--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
|
|
|
|
|
Jun 2 2012, 18:28
|
Гуру
     
Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295

|
Цитата(esaulenka @ Jun 1 2012, 16:30)  Мда. Плохо победили... Периодически оно таки отваливается... Причин тысяча - от негодного кабеля до чисто программной ошибки. Примерный план действий: - Смените машину. Например, что будет, если взять ноутбук ? - Попробуйте взять качественный и заведомо рабочий кабель, или вообще обойдитесь без него, втыкая дивайс (как флэшку) в разъем на задней панели машины (не на передней - к ней часто идет никуда не годный кабельный "отросток"). - Запитайте дивайс от аккумулятора (или иным способом полностью отвяжите дивайс и(или) машину от силовой сети). - Купите отладочную плату на этом МК и поэкспериментируйте с ней. Она тоже отваливается ? - Попробуйте прошить в плату проекты, поставляемые с ИАРом и КЕЙЛом. Как они себя ведут ? - Воспользуйтесь аппаратным USB - сниффером. - ...
|
|
|
|
|
Jun 2 2012, 19:45
|
Гуру
     
Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295

|
Цитата(Petka @ Jun 2 2012, 22:23)  USB проекты Кейла для NXP мягко говоря... любительские. Одна из грубых ошибок - отсутствие volatile для переменной, которая используется в ISR и в main loop. Не знаю, лично я разбирал КЕЙЛовские примеры для LPC214x и делал на их основе свои проекты. Ничего там не отваливается. Единственный замеченный (тогда; сейчас, возможно, эта проблема решена) недостаток - абсолютно сырой механизм перехода в режим Suspend и выхода из него. Про пробуждение по инициативе устройства я вообще молчу. Не хотите Кейл - можно попробовать ИАР. Но примеры на то и примеры, чтобы что-то проиллюстрировать, и коммерчески корректными они быть не обязаны. У автора, похоже, какая-то совершенно банальная проблема вроде негодного кабеля или наводящейся на кабель (устройство) помехи ...
|
|
|
|
|
Jun 3 2012, 20:48
|

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

|
Да, это совершенно банальная проблема в виде наводящейся на кабель помехи.
Желающие могут попробовать поставить на металлический лист (у нас используется боковинка от ATX корпуса) своё устройство и "щелкнуть" туда разрядом 4-6 киловольт (наносекунды не помню, но их немного).
Убрать совсем помеху, скорее всего, не получится. Мы можем рекомендовать клиентам какое-то размещение, можем им кабелей купить (несколько тысяч, на каждое проданное устройство), можем порекомендовать (и даже, возможно, выполнить) какие-то доработки, но шкафы, которые будут экранировать нашу железку от всего остального никто никогда ставить не будет...
kovigor, расскажете, как выглядит несырой механизм входа-выхода из suspend ?
--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
|
|
|
|
|
Jun 3 2012, 21:12
|
■ ■ ■ ■
    
Группа: Свой
Сообщений: 1 100
Регистрация: 9-08-06
Пользователь №: 19 443

|
Цитата LPC17xx, USB device отваливается Как корпус USB разъёма соединён с землёй и соединён ли вообще?
--------------------
Делай что должен и будь что будет.
|
|
|
|
|
Jun 3 2012, 21:28
|

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

|
Разъём USB соединён с корпусом устройства (задняя планка, ещё пара внутренних металлических частей) напрямую, а он, в свою очередь, через резистор 1МОм и конденсатор (330пФ или 1мкФ, не помню, завтра уточню) - с землёй устройства. Также корпус и земля соединены в одной точке - в блоке питания. БП не наш, дорабатывать его не получится. Хвост БП - метра полтора. Эта общая точка, в свою очередь, через БП подключается к зазмляющему контакту в розетке. Собственно, это очень похоже на рекомендации FTDI и известной статьи о защите от помех (ссылочку могу завтра напомнить, но её тут часто рекомендуют  ).
--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
|
|
|
|
|
Jun 3 2012, 21:57
|
■ ■ ■ ■
    
Группа: Свой
Сообщений: 1 100
Регистрация: 9-08-06
Пользователь №: 19 443

|
Цитата Разъём USB соединён с корпусом устройства (задняя планка, ещё пара внутренних металлических частей) напрямую, а он, в свою очередь, через резистор 1МОм и конденсатор (330пФ или 1мкФ, не помню, завтра уточню) - с землёй устройства. Соедините корпус USB разъёма с землёй напрямую ну или через пару десятков ом и будет вам счастье.
--------------------
Делай что должен и будь что будет.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|