|
Как поимать "баг" в STM32 на скорости 72 MHz?, методы поиска и устранения спонтанных и редких сбоев в работе МК |
|
|
|
Apr 24 2018, 12:09
|

Местный
  
Группа: Участник
Сообщений: 403
Регистрация: 14-05-07
Из: Россия, г.Пенза
Пользователь №: 27 719

|
Как поймать "Баг" на скорости 72 МГц ? (тема для обсуждения и поиска решения) Задача: Есть условное устройство на базе STM32F103C8 (Cortex-3M) которое работает на максимально разрешенной частоте в режиме максимальной нагрузки, то есть активно работает ядро АРМ, периферия, порты ввода-вывода, DMA, таймеры. В процессе длительной работы (неделя) систематически происходит сбой. Зацикливание, спонтанный неконтролируемый сброс МК и т.д. Всё это возможно по ряду причин: Сбой по питанию, переполнение стека или "кучи", кривой арбитраж шин или прерываний, неисправность МК. Причин масса. Вопрос: Как поймать сбой происходящий в периоде довольно длительного отрезка времени? У простого разработчика разумеется нет тех аппаратных возможностей которыми оперируют крупные лаборатории и производители серийных устройств, нет возможности обвешать "девайс" супервайзерами, логическими анализаторами и неделями круглосуточно гонять устройство, писать Log-и, а потом отрядом в 50 человек анализировать их. Стало быть нам придётся думать самим. Что у нас есть? Есть отладочная система CoreSight. Есть две "собаки" WatchDog таймера. Внутренний, зависимый от периферии и независимый автономный. Внутренний оконный WWDT, перед командой Сброса МК может сгенерировать прерывание. Данная опция специально разработана инженерами из STM для того, чтобы иметь возможность сделать дамп данных (память, состояние регистров, состояние периферии и т.д) перед сбросом системы МК. Что может быть проще? Написали в обработчике прерывания от "собаки" процедуру инициализации SPI,UART или I2C и выплюнули в внешнюю Флэш-память дамп всей оперативной памяти + состояние регистров. Далее считал с флэши и сиди анализируй - где споткнулся или завис МК. Бинго ! Это я описал самое очевидное и "тепличное" развитие событий. ТАК бывает... Но редко...  А если контроллер прерываний "упал" или зациклился в одной точке? Если вообще ядро АРМ "упало" или зациклилось? А может вообще - стек налетел на "кучу" и управляющая программа рандомно пошла вразнос и остановила генераторы шин или периферии? В данном случае "собака" WWDT бессильна. Она мертва. Есть конечно ещё независимый IWWDT - но он не генерит прерываний - тупо сбрасывает контроллер. Есть отладочное CoreSight - до которого тоже ещё надо уметь достучаться. Так что Давайте высказываться, Уважаемые участники сообщества. У кого какие есть на это мысли и решения?
--------------------
" Многие вещи нам непонятны не потому, что наши понятия слабы; но потому, что сии вещи не входят в круг наших понятий." (с) К.Прутков.
|
|
|
|
|
 |
Ответов
|
Apr 24 2018, 12:58
|

Местный
  
Группа: Участник
Сообщений: 403
Регистрация: 14-05-07
Из: Россия, г.Пенза
Пользователь №: 27 719

|
Цитата(HardEgor @ Apr 24 2018, 15:36)  Сделать 10 одинаковых устройств, функционал распределить между ними. Там где сломается - там проблема. Вообще тема тестирования бесконечна. Если время=деньги, тогда надо брать крутой отладчик типа ULINKpro и через него писать лог в компьютер. Я уже писал в начале. С крутым отладчиком, в тёплой лаборатории и при достаточном бюджете... Девайс работает на отшибе на территории завода. К нему лишний раз не набегаешься, и лабораторию измерительную не соорудить вокруг. Глюки спонтанны, но как заметили связаны с увеличением траффика передаваемых данных.
--------------------
" Многие вещи нам непонятны не потому, что наши понятия слабы; но потому, что сии вещи не входят в круг наших понятий." (с) К.Прутков.
|
|
|
|
|
Apr 24 2018, 13:19
|

Местный
  
Группа: Участник
Сообщений: 403
Регистрация: 14-05-07
Из: Россия, г.Пенза
Пользователь №: 27 719

|
Цитата(jcxz @ Apr 24 2018, 16:03)  Внимательное ревью кода и обработка исключений творят чудеса даже при самых спонтанных багах  Если честно - "Это не моя война..." (с) Софт писали какие-то студенты на Cube-HAL-е... Потом они уволились, допиливали другие... и т.д. Я привёл данный случай как пример. Но если софт писали дилетанты - это не значит, что не глючит софт написанный профессионалами, по всем канонам и со всеми ритуалами. Я запустил эту тему для себя, чтобы попробовать выжать экстракт из общего опыта поиска неисправностей. Универсального решения разумеется нет, но поределённые базовые шаги и грабли думаю будут интересны всем. Цитата(AlanDrakes @ Apr 24 2018, 16:03)  А вообще - хороший вариант - внутренняя же трассировка проблемного события. Это когда код вместо резкой перезагрузки сохраняет состояние системы и пишет в консоль (или файл, а лучше в два) сообщение о том что произошло, когда, почему и дампы, дампы, дампы... Построить "своречник" вокруг столба с "девайсом", поставить там ноутбук и жить там-же... круглосуточно...  Это устройство не в процессе разработки и не на стадии тестирования. Оно уже в сети, и на нем завязано производство. Я понимаю Вас. Меня интересуют "методы", пусть даже нестандартные. Возможно даже кто-то здесь имеет в своём распоряжении самопальные компактные супервазеры для STM32, я-же не прошу схему, код и готовые решения на халяву. Я ищу ВЕКТОР направления в котором двигаться.
--------------------
" Многие вещи нам непонятны не потому, что наши понятия слабы; но потому, что сии вещи не входят в круг наших понятий." (с) К.Прутков.
|
|
|
|
|
Apr 24 2018, 20:41
|

Местный
  
Группа: Участник
Сообщений: 403
Регистрация: 14-05-07
Из: Россия, г.Пенза
Пользователь №: 27 719

|
Цитата(jcxz @ Apr 24 2018, 18:40)  А какой смысл отлаживать чьё-то гумно, на которое даже смотреть противно? Пишите своё. Я уже отвечал выше. "Это не моя война..." (с) Меня интересуют методы. Данный девайс и его глюки приведены как пример. Моя цель собрать воедино все советы и написать для себя и других базовый алгоритм действий при поиске неисправностей в железе и софте, дабы не метаться из угла в угол тратя время на "авось заработает" а действовать в четком направлении. Цитата(twix @ Apr 24 2018, 18:46)  Поймать баг несложно на самом деле. Надо сделать всего три вещи. 1. Повесить на шину питания отдельный осциллограф и направить на экран обычную Web камеру с компа. И писать всю неделю видео. Как вариант взять четырехканальный и писать 4 канала. По видео точно найдете соответствие сбоя и питания. Стоит это копейки по любому.
2. Повесить отдельный канал логов на RS232 скажем и выдавать в него лог входа выхода во все подпрограммы, плюс тестовую информацию. Точно также писать неделю с временем входа, выхода в каждую подгрограмму. Сюда же загонять копию всех входных данных, которые поступают на модуль. Ну это и так будет видно если загонять в лог входные параметры подпрограмм.
3. Вместо реальных данных с датчиков, модулей протоколов, загнать шумовые цифровые данные по всем каналам с максимальной загрузкой.
Все. Если сбой по питанию, это будет видно. Если методы неверно обрабатывают данные, имя метода который сбоит вылезет. Если входные данные валят программу, это вылезет не через неделю, а через час. Извините, но очень смешно...  По питанию проблем нет и быть не может. Автомобильный аккумулятор и два линейных регулятора на 5 и 3.3 Вольта. Никаких импульсников и пр. Цитата(AlexandrY @ Apr 24 2018, 22:38)  Учащение сбоев при увеличении трафика почти однозначно говорит о ситуации называемой "race condition" Если нет RTOS, то надо досконально перетрясти все прерывания на предмет использования глобальных переменных. Проще всего автору взять и искусственно увеличить частоту прерываний относящихся к интерфейсам. Особенно хорошо бывает когда частоты прерываний очень близки. Либо близки частоты главного цикла и прерываний. Тогда точки прерываний плавно проходят абсолютно по всему рабочему коду не оставляя белых пятен с возможными гонками. Вот здесь уже теплее... Человек, который давно уже бьётся с данным устройством связывает сбои именно с этим. Дело в том, что пакеты отправляемые "мастеру" фиксированной величины. Этим спокойно занимается DMA. А вот пакеты поступающие от "мастера" разной величины, поэтому разработчик сделал прием на прерываниях. Так как "мастеров" несколько, я также думаю что проблема в одновременном получении пакетов от нескольких "мастеров" сразу. Арбитраж видимо был не предусмотрен... Немножко об отладочной системе CoreSight... Кто-то тут писал про Segger-овский ULINK 2, так вот, у STM32 урезаная версия CoreSight, которая не поддерживает ETM  Так что с трассировкой прерываний через крутой ULINK 2 пролёт...
Сообщение отредактировал manul78 - Apr 24 2018, 20:56
--------------------
" Многие вещи нам непонятны не потому, что наши понятия слабы; но потому, что сии вещи не входят в круг наших понятий." (с) К.Прутков.
|
|
|
|
|
Apr 25 2018, 05:47
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Цитата(HardEgor @ Apr 25 2018, 08:14)  Не всё так однозначно. Интерфейсы есть какие-нибудь, на них защитные диоды есть, высоковольтный импульс диоды замкнут на питание, стабилизатор не успел отработать - питание подпрыгнуло. А например RS485, на КЗ в линии, может отдавать ток до 250 мА - при кратковременном КЗ можно получить кратковременную просадку питания. Чтобы подпрыгнуло питание от высоковольтного импульса он должен по энергии превосходить все что упоминается в стандартах на ЭМИ. Обычных конденсаторов хватает чтобы сгладить все реальные импульсы. А от нереальных уже что-то должно было бы сгореть. Да и быстрая просадка питания вызовет всего лишь сброс. Если копать в питании, то надо искать медленную просадку, а потом ее причину. В криво сделанных проектах обычно сидит по нескольку ошибок. Исходить надо из этого. Автомобильный аккумулятор эт кстати отличная причина сбоев. Потому что это хорошая толстая антенна для FTB импульсов. Тут на форуме для некоторых разработчиков плат FTB настоящая мистика, которую они не могут постичь годами. Так что не удивлюсь если после замены аккумулятора на обычный изолированный DC/DC проблемы пропадут (вернее снизится их вероятность).
|
|
|
|
Сообщений в этой теме
manul78 Как поимать "баг" в STM32 на скорости 72 MHz? Apr 24 2018, 12:09 Kabdim Постараться делить неопределенность на малые куски... Apr 24 2018, 12:25 manul78 Цитата(Kabdim @ Apr 24 2018, 15:25) Поста... Apr 24 2018, 12:55  juvf Цитата(manul78 @ Apr 24 2018, 17:55) Суть... Apr 28 2018, 17:43   jcxz Цитата(juvf @ Apr 28 2018, 20:43) Прибор ... Apr 29 2018, 02:35   AlexandrY Цитата(juvf @ Apr 28 2018, 20:43) Прибор ... Apr 29 2018, 06:50    jcxz Цитата(AlexandrY @ Apr 29 2018, 09:50) Хо... Apr 29 2018, 08:51    novikovfb Цитата(AlexandrY @ Apr 29 2018, 10:50) На... Apr 29 2018, 09:54     jcxz Цитата(novikovfb @ Apr 29 2018, 12:54) Ди... Apr 29 2018, 10:04     AlexandrY Цитата(novikovfb @ Apr 29 2018, 12:54) Ди... Apr 29 2018, 17:20      jcxz Цитата(AlexandrY @ Apr 29 2018, 20:20) Оп... Apr 30 2018, 05:45       AlexandrY Цитата(jcxz @ Apr 30 2018, 08:45) наприме... Apr 30 2018, 08:14        jcxz Цитата(AlexandrY @ Apr 30 2018, 11:14) Ка... Apr 30 2018, 08:26         AlexandrY Цитата(jcxz @ Apr 30 2018, 11:26) Вы мой ... Apr 30 2018, 10:49       juvf Цитата(jcxz @ Apr 30 2018, 10:45) Это тол... Apr 30 2018, 17:59        AlexandrY Цитата(juvf @ Apr 30 2018, 20:59) в один ... Apr 30 2018, 19:56         juvf Цитата(AlexandrY @ May 1 2018, 00:56) Есл... May 1 2018, 04:27          haker_fox QUOTE (juvf @ May 1 2018, 12:27) готов по... May 1 2018, 05:23           AlexandrY Цитата(haker_fox @ May 1 2018, 08:23) Рас... May 1 2018, 19:05            mantech Цитата(AlexandrY @ May 1 2018, 22:05) В м... May 1 2018, 19:25             one_eight_seven Цитата(mantech @ May 1 2018, 22:25) Это д... May 1 2018, 20:54        haker_fox QUOTE (juvf @ May 1 2018, 01:59) Эта штук... May 1 2018, 03:51        mantech Цитата(juvf @ Apr 30 2018, 20:59) в один ... May 1 2018, 11:25         haker_fox QUOTE (mantech @ May 1 2018, 19:25) Ну во... May 1 2018, 14:37          mantech Цитата(haker_fox @ May 1 2018, 17:37) Инт... May 1 2018, 17:50         juvf Цитата(mantech @ May 1 2018, 16:25) ... д... May 2 2018, 17:50          mantech Цитата(juvf @ May 2 2018, 20:50) какой уж... May 2 2018, 17:59    juvf Цитата(AlexandrY @ Apr 29 2018, 11:50) На... Apr 29 2018, 14:28  KnightIgor Цитата(manul78 @ Apr 24 2018, 13:55) 50/5... Apr 30 2018, 15:17 Mareng Обычно помогало постепенное упрощения функционала ... Apr 24 2018, 12:25 AVI-crak Скорми проект бешеной лошади. Уверен что она найдё... Apr 24 2018, 12:29 iosifk Цитата(Mareng @ Apr 24 2018, 15:25) Обычн... Apr 24 2018, 12:33  manul78 Цитата(iosifk @ Apr 24 2018, 15:33) Есть ... Apr 24 2018, 19:46    iosifk Цитата(manul78 @ Apr 24 2018, 16:19) Это ... Apr 24 2018, 13:48      twix Цитата(manul78 @ Apr 24 2018, 20:41) Изви... Apr 25 2018, 03:31      AVI-crak Цитата(manul78 @ Apr 25 2018, 02:41) Так ... Apr 25 2018, 04:45 jcxz Цитата(manul78 @ Apr 24 2018, 15:09) Как ... Apr 24 2018, 12:43 Kabdim При такой постановке - устроить флуд по каналам. С... Apr 24 2018, 12:57 AlanDrakes После перезапуска проверять состояние регистров пр... Apr 24 2018, 13:03 AlexandrY Цитата(manul78 @ Apr 24 2018, 15:09) Что ... Apr 24 2018, 13:39 Obam ЦитатаА может вообще - стек налетел на "кучу... Apr 24 2018, 14:25 -= Александр =- Гораздо проще и эффективнее не "скворечники... Apr 24 2018, 14:49 k155la3 Еслиб Вы поподробнее расписали что-есть-девайс, в ... Apr 24 2018, 15:43 twix Цитата(manul78 @ Apr 24 2018, 13:09) Как ... Apr 24 2018, 15:46 jcxz Цитата(twix @ Apr 24 2018, 18:46) 1. Пове... Apr 24 2018, 16:26  twix Цитата(jcxz @ Apr 24 2018, 17:26) Я вижу ... Apr 24 2018, 16:40   jcxz Цитата(twix @ Apr 24 2018, 19:40) А уж ва... Apr 24 2018, 18:05    AlexandrY Цитата(jcxz @ Apr 24 2018, 21:05) Вероятн... Apr 24 2018, 19:38    twix Цитата(jcxz @ Apr 24 2018, 19:05) 1) С че... Apr 24 2018, 19:52 amiller Кстати а сама постановка вопроса в теме предполага... Apr 25 2018, 06:51 jcxz Цитата(amiller @ Apr 25 2018, 09:51) Кста... Apr 25 2018, 07:09 manul78 Добрый день !
Спасибо всем за ответы, шутки,... Apr 25 2018, 08:35 adnega Цитата(manul78 @ Apr 25 2018, 11:35) Дале... Apr 25 2018, 08:45 jcxz Цитата(manul78 @ Apr 25 2018, 11:35) 5. .... Apr 25 2018, 08:49 AlexandrY Цитата(manul78 @ Apr 25 2018, 11:35) 3. .... Apr 25 2018, 09:43 ViKo Цитата(manul78 @ Apr 25 2018, 11:35) Дале... Apr 25 2018, 10:25  -= Александр =- Цитата(ViKo @ Apr 25 2018, 13:25) Систему... Apr 25 2018, 10:46   AlexandrY Цитата(-= Александр =- @ Apr 25 201... Apr 25 2018, 10:48    AVI-crak Цитата(AlexandrY @ Apr 25 2018, 16:48) Та... Apr 25 2018, 16:55     AlexandrY Цитата(AVI-crak @ Apr 25 2018, 19:55... Apr 25 2018, 17:21      twix Цитата(AlexandrY @ Apr 25 2018, 17:21) RA... Apr 26 2018, 08:13       AlexandrY Цитата(twix @ Apr 26 2018, 11:13) Справед... Apr 26 2018, 08:35      k155la3 >> Назовите такой продвинутый редактор, в ко... Apr 26 2018, 13:54       AlexandrY Цитата(k155la3 @ Apr 26 2018, 16:54) ... Apr 26 2018, 14:07   HardEgor Через SWD можно читать регистры и память и писать ... Apr 25 2018, 10:48 k155la3 . . . . а-а-а-а. В ЭТОМ смысле.Цитата(manul78 ... Apr 26 2018, 14:13 Сергей Борщ Всегда делаю отладочный вывод через свободный УАПП... Apr 25 2018, 09:13 Kabdim Да, в андроид студии такое есть... Apr 26 2018, 07:39 x893 Это может означать, что плохо или спроектировано и... Apr 29 2018, 17:52 Rst7 QUOTE Если 5V по пину рубит регулярно через диоды ... May 1 2018, 09:34 haker_fox QUOTE (AlexandrY @ May 2 2018, 03:05) В м... May 2 2018, 02:18 AlexandrY Цитата(haker_fox @ May 2 2018, 05:18) Вы ... May 2 2018, 07:51  mantech Цитата(AlexandrY @ May 2 2018, 10:51) Вот... May 2 2018, 09:05   AlexandrY Цитата(mantech @ May 2 2018, 12:05) Это о... May 2 2018, 10:19    mantech Цитата(AlexandrY @ May 2 2018, 13:19) Во... May 2 2018, 10:45     AlexandrY Цитата(mantech @ May 2 2018, 13:45) Жаль,... May 2 2018, 10:55      mantech Цитата(AlexandrY @ May 2 2018, 13:55) Но ... May 2 2018, 11:02       AlexandrY Цитата(mantech @ May 2 2018, 14:02) Приче... May 2 2018, 12:17        mantech Цитата(AlexandrY @ May 2 2018, 15:17) Ну ... May 2 2018, 16:11         AlexandrY Цитата(mantech @ May 2 2018, 19:11) Это к... May 3 2018, 05:29          haker_fox QUOTE (AlexandrY @ May 3 2018, 13:29) А т... May 3 2018, 10:05           AlexandrY Цитата(haker_fox @ May 3 2018, 13:05) А з... May 3 2018, 10:21            mantech Цитата(AlexandrY @ May 3 2018, 13:21) Так... May 3 2018, 11:39            haker_fox QUOTE (AlexandrY @ May 3 2018, 18:21) Так... May 4 2018, 01:25          Kabdim Цитата(AlexandrY @ May 3 2018, 08:29) А т... May 3 2018, 12:19           mantech Цитата(Kabdim @ May 3 2018, 15:19) третий... May 3 2018, 15:02 Kabdim Судя по доке, беглым взглядом - ничего подобного, ... May 3 2018, 15:41 yuri_t Если говорить о fault tolerant системах (медицина,... May 6 2018, 17:55 AlexandrY Цитата(yuri_t @ May 6 2018, 20:55) Если г... May 7 2018, 06:54 haker_fox QUOTE (yuri_t @ May 7 2018, 01:55) Что ка... May 7 2018, 08:10 yuri_t По поводу WDT - чтобы нарушить работу CPU, достато... May 8 2018, 15:31 juvf Цитата(yuri_t @ May 8 2018, 20:31) в WDT ... May 8 2018, 15:36
2 страниц
1 2 >
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0
|
|
|