Миландр

Ключевым подразделением нашей компании
является Центр Проектирования интегральных микросхем
Текущее время: 2021-июл-24 05:03

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 10 сообщений ] 
Автор Сообщение
 Заголовок сообщения: Проблема с USB CDC
СообщениеДобавлено: 2021-май-28 11:49 
Не в сети

Зарегистрирован: 2015-июн-09 15:26
Сообщения: 4
Разработано измерительное устройство c микроконтроллером 1986ВЕ92 в котором обмен информацией с вычислителем верхнего уровня производится по USB. Поскольку до этого с USB дел не имел, то воспользовался готовым решением - USB CDC из SPL. Всё хорошо работало до тех пор, пока недалеко не стала включаться/отключаться сторонняя электроустановка. При этом в нашем измерителе "отваливалась" одна единственная функция - передача информации от МК в ноутбук, при этом передача информации от ноутбука в МК исправно работает.

Понятно, что коммутация нагрузки приводит к помехам, в том числе и на линиях USB. Вероятно неоторые транзакции происходят с ошибками. Грешу на то, к останову передачи информации наверх приводит некорректная обработка ошибок в МК при транзакции IN. Но исходники в SPL помечены 2015 годом, и за 6 лет никто не заметил ошибку? Или заметил? Сам я с USB пока что - "на Вы". Внимательное изучение спецификаций USB и 1986ВЕ92, сравнение информации из спецификаций с исходниками SPL результатов не дало. Возможно, в SPL действительно с обработкой ошибок всё "гладко". Тогда - в чём проблема?

Пробовал на ноутбуке запустить терминал - после зависания передачи информации достаточно закрыть-открыть соответствующий файл "COMx", и передача восстанавливается. Дело не в ноутбуке - проверено! В чём? В соответствующем драйвере Windows? Гложат сомнения.

В отладочных средствах несколько ограничен, да и с идеями - что смотреть? - как-то, мягко говоря, не густо... У кого какие идеи?


Вернуться к началу
 Заголовок сообщения: Re: Проблема с USB CDC
СообщениеДобавлено: 2021-май-31 10:14 
Не в сети
Support
Аватара пользователя

Зарегистрирован: 2018-авг-10 23:14
Сообщения: 306
Организация: АО «ПКК Миландр»
Откуда: Зеленоград
Палыч писал(а): *
Разработано измерительное устройство c микроконтроллером 1986ВЕ92 в котором обмен информацией с вычислителем верхнего уровня производится по USB. Поскольку до этого с USB дел не имел, то воспользовался готовым решением - USB CDC из SPL. Всё хорошо работало до тех пор, пока недалеко не стала включаться/отключаться сторонняя электроустановка. При этом в нашем измерителе "отваливалась" одна единственная функция - передача информации от МК в ноутбук, при этом передача информации от ноутбука в МК исправно работает.

Понятно, что коммутация нагрузки приводит к помехам, в том числе и на линиях USB. Вероятно неоторые транзакции происходят с ошибками. Грешу на то, к останову передачи информации наверх приводит некорректная обработка ошибок в МК при транзакции IN. Но исходники в SPL помечены 2015 годом, и за 6 лет никто не заметил ошибку? Или заметил? Сам я с USB пока что - "на Вы". Внимательное изучение спецификаций USB и 1986ВЕ92, сравнение информации из спецификаций с исходниками SPL результатов не дало. Возможно, в SPL действительно с обработкой ошибок всё "гладко". Тогда - в чём проблема?

Пробовал на ноутбуке запустить терминал - после зависания передачи информации достаточно закрыть-открыть соответствующий файл "COMx", и передача восстанавливается. Дело не в ноутбуке - проверено! В чём? В соответствующем драйвере Windows? Гложат сомнения.

В отладочных средствах несколько ограничен, да и с идеями - что смотреть? - как-то, мягко говоря, не густо... У кого какие идеи?
Здравствуйте!

Обратите, пожалуйста, внимание, что блок USB в микроконтроллерах семейства 1986ВЕ9х соответствует стандарту, объявленном спецификацией USB 1.0, ошибки, возникающие в ходе работы, должны быть регламентированы файлом errata: по части USB для семейства микроконтроллеров 1986ВЕ9х актуальна только ошибка формирования деления частоты CPU_C3, USB_C3, ADC_C3, RTCHSI и RTCHSE. Важно также понимать, что SPL производства компании Миландр позволяет упростить освоение микроконтроллеров, но за конечное качество ПО ответственность несет разработчик. Тем не менее, в рамках этого запроса мы должны говорить о дифференциальной паре и помехах на линии, поскольку без влияния сторонней электроустановки работа ведется правильно, в таком случае сообщите, в топологии Вашей печатной платы применены базовые правила трассировки дифференциальных сигналов? С общими правилами можно ознакомиться из документа компании TI, приложенном к письму. Спасибо.


Вложения:
Layout_Guidelines_H-S_int.pdf [814.81 КБ]
19 скачиваний

_________________
Отдел технической поддержки support@milandr.ru
Вернуться к началу
 Заголовок сообщения: Re: Проблема с USB CDC
СообщениеДобавлено: 2021-май-31 16:10 
Не в сети

Зарегистрирован: 2015-июн-09 15:26
Сообщения: 4
Lampadov писал(а): *
Обратите, пожалуйста, внимание, что блок USB в микроконтроллерах семейства 1986ВЕ9х соответствует стандарту, объявленном спецификацией USB 1.0, ошибки, возникающие в ходе работы, должны быть регламентированы файлом errata: по части USB для семейства микроконтроллеров 1986ВЕ9х актуальна только ошибка формирования деления частоты CPU_C3, USB_C3, ADC_C3, RTCHSI и RTCHSE.
При таких категоричных словах сразу вспоминается Д.Розенхан: "Нет здоровых людей, есть недообследованные!". Я вовсе не утверждаю, что блок USB в этом МК имеет какие-то изъяны! Хотя и уверенности в обратном - тоже нет. Разработчики изрядно накосячили в других местах МК. И не все "косяки" попали в еррату. Я сам находил "косяк" в блоке CAN Вашего МК. Но, ещё раз повторю - я не утверждал и не утверждаю сейчас, что блок USB какой-то "дефектный". В противном случае изрядная доля топиков на форуме была бы посвещена именно этому блоку МК. Ваш форум для вопроса я выбрал из соображения, что SPL для МК Вашей разработки используют люди Ваш же форум и посещающие.
Lampadov писал(а): *
SPL производства компании Миландр
Тут я не понял: я использовал Фитоновскую SPL. Есть ещё и SPL разработки Миландр? Где взять посмотреть?
Lampadov писал(а): *
Тем не менее, в рамках этого запроса мы должны говорить о дифференциальной паре и помехах на линии, поскольку без влияния сторонней электроустановки работа ведется правильно, в таком случае сообщите, в топологии Вашей печатной платы применены базовые правила трассировки дифференциальных сигналов?
Вот тут я с Вами не согласен. Абсолютно ясно, что в топологию печатной платы смотреть абсолютно бесполезно - если помеха проникает в изделие, то какие-то правила проектирования нарушены. Но сейчас речь я виду не об этом... Печатная плата безусловна должна быть переделана. Но, вот - как быть с ПО. Помеха кратковременна и, после окончания помехи ПО должно возобновить нормальную работу устройства. Однако это не происходит. Вывод: в ПО есть недоработка(ошибка), которая в случае транзакции с ошибкой не даёт восстановиться нормальной работе. Вопрос: на какой стороне канала обмена информацией эту недоработку искать? Неужели те, кто использовал SPL для USB CDC и Windows не сталкнулись с аналогичной проблемой? А, если сталкнулись - как решили?


Вернуться к началу
 Заголовок сообщения: Re: Проблема с USB CDC
СообщениеДобавлено: 2021-май-31 17:39 
Не в сети
Support
Аватара пользователя

Зарегистрирован: 2018-авг-10 23:14
Сообщения: 306
Организация: АО «ПКК Миландр»
Откуда: Зеленоград
Палыч писал(а): *
Lampadov писал(а): *
Обратите, пожалуйста, внимание, что блок USB в микроконтроллерах семейства 1986ВЕ9х соответствует стандарту, объявленном спецификацией USB 1.0, ошибки, возникающие в ходе работы, должны быть регламентированы файлом errata: по части USB для семейства микроконтроллеров 1986ВЕ9х актуальна только ошибка формирования деления частоты CPU_C3, USB_C3, ADC_C3, RTCHSI и RTCHSE.
При таких категоричных словах сразу вспоминается Д.Розенхан: "Нет здоровых людей, есть недообследованные!". Я вовсе не утверждаю, что блок USB в этом МК имеет какие-то изъяны! Хотя и уверенности в обратном - тоже нет. Разработчики изрядно накосячили в других местах МК. И не все "косяки" попали в еррату. Я сам находил "косяк" в блоке CAN Вашего МК. Но, ещё раз повторю - я не утверждал и не утверждаю сейчас, что блок USB какой-то "дефектный". В противном случае изрядная доля топиков на форуме была бы посвещена именно этому блоку МК. Ваш форум для вопроса я выбрал из соображения, что SPL для МК Вашей разработки используют люди Ваш же форум и посещающие.
Lampadov писал(а): *
SPL производства компании Миландр
Тут я не понял: я использовал Фитоновскую SPL. Есть ещё и SPL разработки Миландр? Где взять посмотреть?
Lampadov писал(а): *
Тем не менее, в рамках этого запроса мы должны говорить о дифференциальной паре и помехах на линии, поскольку без влияния сторонней электроустановки работа ведется правильно, в таком случае сообщите, в топологии Вашей печатной платы применены базовые правила трассировки дифференциальных сигналов?
Вот тут я с Вами не согласен. Абсолютно ясно, что в топологию печатной платы смотреть абсолютно бесполезно - если помеха проникает в изделие, то какие-то правила проектирования нарушены. Но сейчас речь я виду не об этом... Печатная плата безусловна должна быть переделана. Но, вот - как быть с ПО. Помеха кратковременна и, после окончания помехи ПО должно возобновить нормальную работу устройства. Однако это не происходит. Вывод: в ПО есть недоработка(ошибка), которая в случае транзакции с ошибкой не даёт восстановиться нормальной работе. Вопрос: на какой стороне канала обмена информацией эту недоработку искать? Неужели те, кто использовал SPL для USB CDC и Windows не сталкнулись с аналогичной проблемой? А, если сталкнулись - как решили?
>> При таких категоричных словах сразу вспоминается Д.Розенхан: "Нет здоровых людей, есть недообследованные!". Я вовсе не утверждаю, что блок USB в этом МК имеет какие-то изъяны! Хотя и уверенности в обратном - тоже нет. Разработчики изрядно накосячили в других местах МК. И не все "косяки" попали в еррату. Я сам находил "косяк" в блоке CAN Вашего МК. Но, ещё раз повторю - я не утверждал и не утверждаю сейчас, что блок USB какой-то "дефектный". В противном случае изрядная доля топиков на форуме была бы посвещена именно этому блоку МК. Ваш форум для вопроса я выбрал из соображения, что SPL для МК Вашей разработки используют люди Ваш же форум и посещающие.

Обратите, пожалуйста, внимание, что теоретически какие-либо проблемы в IP-блоках МК при особых краевых случаях могут быть обнаружены и через десятки лет активной эксплуатации потребителями (функциональная верификация не является панацеей), но за время жизненного цикла семейства 1986ВЕ9х была выявлена лишь одна ошибка из файла errata по блоку USB, упоминаемая в прошлом ответе. Мы всегда стараемся проводить моделирования, если потенциально речь может идти о критических уязвимостях в логике работы изделия, и если такие уязвимости находятся, то это выливается в выпуск новой ревизии микросхемы. Всё же если речь идёт о программном подходе в рамках работы, об уровне абстракции в виде SPL, то есть о том, как программа обращается к внутренней логике IP-блока - то это, в первую очередь, работа разработчика.

Сообщите также, пожалуйста, о какой найденной ошибке в блоке CAN идёт речь?

>> Тут я не понял: я использовал Фитоновскую SPL. Есть ещё и SPL разработки Миландр? Где взять посмотреть?

Все поставляемые официально библиотеки, а также другое программное обеспечение, доступны для загрузки на отдельной странице официального сайта компании Миландр - в данном случае необходимо обратиться к всплывающему меню "Standard Peripherals Library + software pack для Keil MDK 5".

>> Вот тут я с Вами не согласен. Абсолютно ясно, что в топологию печатной платы смотреть абсолютно бесполезно - если помеха проникает в изделие, то какие-то правила проектирования нарушены. Но сейчас речь я виду не об этом... Печатная плата безусловна должна быть переделана. Но, вот - как быть с ПО. Помеха кратковременна и, после окончания помехи ПО должно возобновить нормальную работу устройства. Однако это не происходит. Вывод: в ПО есть недоработка(ошибка), которая в случае транзакции с ошибкой не даёт восстановиться нормальной работе. Вопрос: на какой стороне канала обмена информацией эту недоработку искать? Неужели те, кто использовал SPL для USB CDC и Windows не сталкнулись с аналогичной проблемой? А, если сталкнулись - как решили?

Обратите, пожалуйста, внимание, что SPL лишь упрощает процесс освоения микроконтроллеров, предоставляя базовые структуры по работе с периферийными блоками изделия. Это однозначно указывает на тот факт, что полагаться только лишь на неё в боевом изделии нельзя, разработчик должен предметно подойти к вопросу написания ПО (при этом позаботиться о качестве печатной платы). Библиотеки могут улучшаться и исправляться на практике до бесконечности, и мы по сей день занимаемся этим, исправляя и внедряя новый функционал для удобства потребителей, кто работает с выпускаемыми микроконтроллерами компании Миландр. Это значит, что библиотеки при работе с блоками потенциально могут не учитывать множество факторов, в том числе внешних, как это происходит предварительно в Вашем случае, но могу сказать, что по опыту никто не сталкивался с подобного рода проблемой. С огромным желанием помочь, не уверен, что мы на столе в рамках отладочной платы производства компании Миландр сможем повторить данное поведение для выявления проблемы, но Вы можете попробовать отлаживать данную ситуацию самостоятельно и пытаться парировать ошибку в коде библиотеки: в первую очередь необходимо производить мониторинг сигналов на дифференциальной паре, а также то, как отрабатывает блок во время возникновения наводок (мониторинг всех регистров удобно производить при помощи поставляемых .svd файлов). Это верный подход к решению. Отходя от обсуждения SPL, посмотреть характер этой проникающей наводки от оборудования на дифференциальную пару всё-таки интересно, ведь нельзя исключать вариант, что в ходе неё микроконтроллер отрабатывает в предельных режимах эксплуатации, которые влекут за собой нештатную работу микросхемы целиком, поэтому вышлите, пожалуйста, осциллограммы, если Вас не затруднит. Спасибо.

_________________
Отдел технической поддержки support@milandr.ru


Вернуться к началу
 Заголовок сообщения: Re: Проблема с USB CDC
СообщениеДобавлено: 2021-май-31 17:54 
Не в сети

Зарегистрирован: 2020-дек-10 09:35
Сообщения: 26
Организация: Startex
Палыч писал(а): *
... после окончания помехи ПО должно возобновить нормальную работу устройства. ... Вывод: в ПО есть недоработка(ошибка), которая в случае транзакции с ошибкой не даёт восстановиться нормальной работе.
Всегда хотелось бы иметь готовое решение на все случаи жизни, скачал, залил и оно само работает. Но это утопия.
ПО делает только то, на что рассчитано. Библиотечные примеры от Миландра, это лишь демо версия чтобы показать, что в основных режимах их продукт (микросхема) работает.
Судя по всему, пример с USB это выдранный откуда-то стек (возможно от STM), реализующий кучу режимов через разные слои абстрации. Любой шаг в сторону от простейшего функционала и разобраться в этой громадине кода практически невозможно. Могу ошибаться, но чаще всего люди пишут себе свое решение. CDC - так CDC и ничего лишнего, HID так HID. Такие решения можно найти на форуме. Разобраться в них, имхо, легче.

К сути вопроса, от вас нет никакой конкретики. Угадать что у вас случилось наврят ли возможно, необходима отладка. Какой-то лог, того как машина состояний отрабатывала до и после сбоя. В каком статусе находится передающая часть, какие статусы в регистрах микросхемы. Возможно по логу будет понятно, что за сбой произошел и тогда можно будет задуматься над тем, как это пофиксить. Сейчас же нет абсолютно никакой информации для размышлений. Лишь надежда на то, что на форум зайдет кто-нибудь с подобной решенной проблемой.


Вернуться к началу
 Заголовок сообщения: Re: Проблема с USB CDC
СообщениеДобавлено: 2021-июн-01 17:11 
Не в сети

Зарегистрирован: 2015-июн-09 15:26
Сообщения: 4
AndOrFin писал(а): *
Библиотечные примеры от Миландра, это лишь демо версия чтобы показать, что в основных режимах их продукт (микросхема) работает.
Примеры - это понятно, а вот библиотека (SPL) другое дело. Та, что выложена на сайте Миландра - фитоновская библиотека, вполне себе годная для использования. И я склоняюсь к тому, что функции USB device и USB CDC в этой библиотеке вполне годные. Представитель Миландра Lampadov в этом топике упоминал о какой-то SPL разработки Миландр. Я так себе понимаю, что это он так обозвал фитоновскую библиотеку с примерами от Миландра под свой макет? И не стоит мне терять время на поиски мифической миландровской SPL?
AndOrFin писал(а): *
Могу ошибаться, но чаще всего люди пишут себе свое решение. CDC - так CDC и ничего лишнего, HID так HID. Такие решения можно найти на форуме. Разобраться в них, имхо, легче.
В SPL реализация CDC уже есть и, повторюсь, по-моему, вполне годная. Конечно, прийдётся написать ещё 3-4 функции до готовности к использованию, но зачем тратить своё время и силы на написание с нуля своего?
AndOrFin писал(а): *
К сути вопроса, от вас нет никакой конкретики. Угадать что у вас случилось наврят ли возможно, необходима отладка. Какой-то лог, того как машина состояний отрабатывала до и после сбоя. В каком статусе находится передающая часть, какие статусы в регистрах микросхемы.
Докладываю результаты своего "ковыряния" в проблеме.
Состояние МК до и после сбоя ничем не отличаются. Так и должно быть. Грубо говоря: приняло USB device из-за помехи чёрти-что - ничего не делай, молчи - host сам с проблемой разберётся...

Теперь, что творится на верхнем уровне под windows - укрупнённо, не размениваясь на мелочи:
1. после подключения устройства и чтения дескрипторов в обмене наступает тишина;
2. после открытия соответствующего файла СОМх "побежали" IN/SETUP/OUT транзакции. Транзакции SETUP/OUT - только при необходимости передать в устройство, а транзакциями IN забито всё остальное время. Оно и понятно - информация для передачи "наверх" может возникнуть в любой момент, а host об этом может узнать лишь по транзакциям IN;
3. тут наступает мощная помеха, и очередная транзакция IN заканчивается неудачей;
4. запрос IOCTL_INTERNAL_USB_GET_PORT_STATUS возвращает установленный флаг USBD_PORT_CONNECTED и сброшенный флаг USBD_PORT_ENABLED - видать помеха была такой сильной, что "снесло мозги" порту USB компьютера;
5. система выбрасывает вон "негодное" устройство (устройство на мгновение и в диспетчере устройств пропадает).
6. система видит подключение на своём USB порту устройства и выполняет п.1 (см. выше).

Самое интересное, что при удалении устройства (см. п.5) прикладной программе, открывшей ассоциированный с устройством файл СОМх, ничего не сообщается. И, если прикладная программа в течение выполнения системой пунктов 5 и 6 не произведёт запись в файл, то какая-либо ошибка доступа к файлу системой не генерится. Запись в ранее открытый файл СОМх после п.6 приведёт к транзакции OUT и доставки информации от компьютера на устройство. А, вот информация от устройства в компьютер не попадёт, поскольку host транзакции IN не производит до открытия соответствующего файла, а о том, что файл был открыт система "забыла" при выполнении п.5.

Как с этим бороться - ума не приложу...
Кстати: подключение USB кабеля, отвечающего стандартам, непосредственно к ногам МК минуя разводку - ситуацию не изменило.


Вернуться к началу
 Заголовок сообщения: Re: Проблема с USB CDC
СообщениеДобавлено: 2021-июн-01 18:15 
Не в сети

Зарегистрирован: 2020-дек-10 09:35
Сообщения: 26
Организация: Startex
Палыч писал(а): *
Я так себе понимаю, что это он так обозвал фитоновскую библиотеку с примерами от Миландра под свой макет? И не стоит мне терять время на поиски мифической миландровской SPL?
Я понимаю так-же. Программисты Фитона под заказ написали библиотеку SPL, которую Миландр потом доработал и дописал примеры. Ничего сверх того что есть на сайте искать не стоит. Там есть еще ссылка на библиотеку в GitHub под gcc, которая тоже выросла из начальной SPL. Может быть в ней в драйвере USB есть какие-то дополнительные фиксы.
Палыч писал(а): *
Конечно, прийдётся написать ещё 3-4 функции до готовности к использованию, но зачем тратить своё время и силы на написание с нуля своего?
А кто напишет эти 3-4 функции? Миландру для демонстрации примеров к микросхеме это не нужно. Продукта, в виде готового ПО для USB у них нет. Кто пишет боевое ПО, тот делает это сам. Чинил как-то этот SPL драйвер USB в библиотеке и решил что больше туда не полезу. В моем случае, автомат состояний зацикливался и не выходил из определенного состояния, соответственно транзакции он не обрабатывал. Нашел где циклится, поменял две операции местами, и все заработало. Кароче чистейшее везение, целиком этот драйвер я не постиг. Для себя решил, что если потребуется работа с USB, то перепишу ее сам. Свой код, он всегда под полным контролем.

По остальным пунктам, работа хоста не так интересна. Думаю со стороны РС все отрабатывает в соответствии со стандартом.
Меня интересовало состояние со стороны микроконтроллера, как он реагирует на помеху. Ведь именно там вы предлагаете править код, судя по всему.


Вернуться к началу
 Заголовок сообщения: Re: Проблема с USB CDC
СообщениеДобавлено: 2021-июн-02 21:26 
Не в сети

Зарегистрирован: 2018-дек-17 15:20
Сообщения: 157
Организация: частное лицо
взять любой линукс и проверить работу там


Вернуться к началу
 Заголовок сообщения: Re: Проблема с USB CDC
СообщениеДобавлено: 2021-июн-16 18:15 
Не в сети

Зарегистрирован: 2016-окт-14 19:39
Сообщения: 93
Организация: АО "РИРВ"
Откуда: СПБ
Палыч писал(а): *
воспользовался готовым решением - USB CDC из SPL
Ну так, вдруг поможет, попробуйте реализацию CDC из темы viewtopic.php?f=22&t=4082


Вернуться к началу
 Заголовок сообщения: Re: Проблема с USB CDC
СообщениеДобавлено: 2021-июн-17 10:20 
Не в сети

Зарегистрирован: 2010-авг-30 19:12
Сообщения: 532
Цитата:
Всё хорошо работало до тех пор, пока недалеко не стала включаться/отключаться сторонняя электроустановка. При этом в нашем измерителе "отваливалась" одна единственная функция - передача информации от МК в ноутбук, при этом передача информации от ноутбука в МК исправно работает.
Был такой случай. При включении не очень мощной нагрузки (пара магнитов в ШИМ с током порядка 1-2А каждый) USB отваливался. Как со стороны ПК (Win Xp, Win7), так и со стороны МК. Лечилось передергиванием кабеля и сбросом МК. В последствии ограничились переинициализацией устройства (МК имитировл отключение от линии и повторное подключение с переинициализацией USB устройства). В последствии перешли на другой канал связи.

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


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 10 сообщений ] 

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 8 гостей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти: 

cron
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB