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

Проблема с USB на плате с PIC18F4550

Здравствуйте. Собрал на базе примера CDC- basic USB девайс Full-Speed USB 2.0 на PIC18F4550 с эмуляцией COM-порта. Железка тупо либо по команде включает одно из реле либо в ответ на команду получает текущее время от RTCC по I2C и отдает инфу в USB. Все работает и посылается проблем нет. НО! спонтанно возникает проблема того что девайс по непонятной причине отключается при очередном нажатии на любую клавишу терминала на компе предположительно под Win7/Server 2008R2.
Драйвера все родные. Пакет MLA самый последний. Поставил сниффер USB и обнаружил что мой девайс по какой-то причине посылает сам без инициации от терминальной программки (Putty) BULK трансфер с 0-ым количеством байт со статусом 0xc00000004, после чего нажав на любую клавишу в терминалке - она отваливается, но само устройство остается в Диспетчере оборудования, однако, уже заново к нему нельзя подключиться.


Вот пакет:
000592: Bulk or Interrupt Transfer (UP), 2016-12-06 15:40:24,5811831 +1741,2981226. (1. Device: USB Serial Port (COM9)) Status: 0xc0000004
Pipe Handle: 0x9bb02f8 (Endpoint Address: 0x82)
Get 0x0 bytes from the device

Попытка заново подключится - Unable to configure device. что то такое...
Причем в Диспетчере - работает нормально. И сам ПИК не висит - поставил прерывания на светодиодик и реакцию на кнопочку.

За более 3х недель поисков не нашел никакой зависимости от каких-либо моих действий или бездействий
вот что делал:
1. Отключал и app_device_cdc_demo - чтобы девайс вообще ничего не остылал и никак не реагировал на посылаемые данные от хоста.
2. Увеличил клокинг core с 20 МГц напрямую кварца до 48МГц через PLL (думал не хватает производительности)
3. До минимума убрал все переменные дабы исключить случайное перекрывание памяти банков RAM 0x400-0x500 которые юзаются USB-стеком
4. Удалил код до минимума. Короче оставил фактически собственно сам оригинал только убрав кнопки и леды которые мне не нужны.
5. Пробовал разные компы с Win7/Server2008R2 и т.п.
6. Проверил Питание 5.0В на всех компах. Помехи осциллом однако не проверял

Один фиг всё что выше никак не повлияло на устранение или изменение характера появления ошибки.

Дома на компе с WinXP и роутере TPLink 3020 c OpenWRT(самой последней на вчера прошивкой) попробовал тоже подключать девайс - и вот почему то там ни на XP ни на Linux проблемы я ни разу не обнаружил. Поставил тот же сниффер на XP и этого "пустого" финального пакета от устройства тоже ни разу за каждодневные поиски и работы не нашел. Устройство работает стабильно в течение как минимум 8-12 часов что на XP что на OpenWRT через /dev/ttyACM0.

Сегодня обнаружил вот такое интересное дело. У меня 4 разных кабеля usb-миниusb. На работе подключаюсь либо через кабель от кард-ридера. И случайно решил подключить устройство через оригинальный красный кабель от PICKIT3. Мое удивление: - мой девайс что с моей программой что с оригом CDC-Basic Example пишет в Диспетчере - Unknown Device. Тут же в том же порте USB сервака 2008 или Win7 втыкаю кабель usb-miniusb от кард-ридера - все окей. Причем сам PICKIT3 работает от своего красного кабеля великолепно в течение уже нескольких лет пользования. Равно кстати как и от кардридеровского кабеля.
Вот теперь задумался - может я что-то нарушил с разводкой на плате с пинами USB? Было ли у кого что подобное и кто как экранирует USB разъем на плате своих устройств. Экранируете ли вы дорожки от MCU до разъема и вообще интересно было бы мне знать кто с чем сталкивался.
Дома пробовал только через кабель от ридера. Сегодня решил попробовать на XP все кабели. Может я тупо ищу ошибку в воздухе.

Ради справедливости замечу что с CDC Basic Example я и ни разу тоже ошибки подобной не получил, но и не тестил долго. что собственно вот в данный момент и делаю

PS. Замечу что дома другие кабели, причем один из них длиной 50 см и сегодня и завтра попробую с разными кабелями.

Всё равно, может кто сталкивался с подобным - намекните хотя бы куда рыть. В инете на тему аналогичной моей проблемы вообще ничего нет

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


Ссылка на сообщение
Поделиться на другие сайты
Если кому поможет - предварительные опыты показали что проблема в 2-х из 4-х кабелей USB-miniUSB. Вчера целый день без проблем отработал нонейм кабель шедший с неким кард-ридером, но длинною около 50 см.
Грешу также на то что мои дорожки от чипа до miniUSB длиною около по 7 см каждая - это тоже может играть. Думаю на следующем образце сделаю экран между ними в виде земли - прочитал вчера что так надо делать

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


Ссылка на сообщение
Поделиться на другие сайты
Цитата(Ildar Belkin @ Dec 8 2016, 08:36) <{POST_SNAPBACK}>
Грешу также на то что мои дорожки от чипа до miniUSB длиною около по 7 см каждая - это тоже может играть. Думаю на следующем образце сделаю экран между ними в виде земли - прочитал вчера что так надо делать


Интересно, кто это советует "типа дифференциальную" пару сигналов отделять друг от друга землёй?

По факту, т.к. скорость у вас FullSpeed - то частота сигналов всего 12МГц - что там экранировать?
Скорее всего надо поставить бусину в 5В и защитные диоды на D+ D-.
Вероятно резисторы последовательно в D+ D- по 33 Ома.
Можно бусину в приходящую по кабелю землю, но с малым сопротивлением на 12МГц - обратка от D+ D- по земле идёт.

Ток у вас какой пиковый по 5В? А конденсатор входной?
Если кабель с большим сопротивлением (>0.1 Ома ) то 5.12В из компа может просесть на вашей плате ниже 4.5...
На кабеле накладки ферритовые есть?

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


Ссылка на сообщение
Поделиться на другие сайты
А ещё лучше - конденсаторы 22-27 пФ с каждой линии D+, D- на "землю".

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


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация