Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: msp430f2254. Зависание и выполнение произвольного куска кода в условиях помех
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
emark
Доброго времени суток!

Столкнулся со следующей проблемой. Есть автономное устройство, собранное на msp430f2254. Внешний WatchDog на устройстве отсутствует (сэкономили sm.gif). Питание аккумуляторное. От заказчика стали приходить претензии: зависает (лечится только переключением питания). Экспериментально было определено, что проблема в кварце (12 МГц). Но вопрос не в этом. Во время экспериментов я определил, что тыкая какой-нибудь железкой в ножки кварца на раз получаем такое зависание, а иногда (довольно часто) пыполнения кода программы, отвественного за стирания внутреннего программного Flash с понятным результатом. MCLK от кварца. Если MCLK сделать от DCO проблема исчезает.

Кто-нибудь сталкивался таким? Как решили?
mcheb
Цитата(emark @ Jun 24 2016, 15:03) *
Как решили?

Установкой драйвера руки.сис
Obam
Цитата(emark @ Jun 24 2016, 16:03) *
Доброго времени суток!

Столкнулся со следующей проблемой. Есть автономное устройство, собранное на msp430f2254. Внешний WatchDog на устройстве отсутствует (сэкономили sm.gif). Питание аккумуляторное. От заказчика стали приходить претензии: зависает (лечится только переключением питания). Экспериментально было определено, что проблема в кварце (12 МГц). Но вопрос не в этом. Во время экспериментов я определил, что тыкая какой-нибудь железкой в ножки кварца на раз получаем такое зависание, а иногда (довольно часто) пыполнения кода программы, отвественного за стирания внутреннего программного Flash с понятным результатом. MCLK от кварца. Если MCLK сделать от DCO проблема исчезает.

Кто-нибудь сталкивался таким? Как решили?


Тыкать "…какой-нибудь железкой в ножки кварца…" не надо, он не для этого. Теоретически, если касанием XOUT колебания может и не будут сорваны, то касанием XIN - наверняка.
Рекомендации самые простые: дорожки до кварца как можно кроче, нагрузочные ёмкости должны соответствовать параметрам кварца, под кварцем только малосигнальная земля (ни какой сильноточной).
Аппаратный контроль за тактированием в MSP430 весьма развитый, отладчиком можно получить всё что нужно.
emark
Цитата(mcheb @ Jun 24 2016, 17:49) *
Установкой драйвера руки.сис


Конкретней... a то у меня libastral не установлена тоже...
iosifk
Цитата(Obam @ Jun 24 2016, 16:35) *
Тыкать "…какой-нибудь железкой в ножки кварца…" не надо, он не для этого. Теоретически, если касанием XOUT колебания может и не будут сорваны, то касанием XIN - наверняка.
Рекомендации самые простые: дорожки до кварца как можно кроче, нагрузочные ёмкости должны соответствовать параметрам кварца, под кварцем только малосигнальная земля (ни какой сильноточной).

И уж если переразвести не удается, то можно сделать экраны из фольги и прикрыть ими от помех...
emark
Цитата(Obam @ Jun 24 2016, 18:35) *
Тыкать "…какой-нибудь железкой в ножки кварца…" не надо, он не для этого. Теоретически, если касанием XOUT колебания может и не будут сорваны, то касанием XIN - наверняка.
Рекомендации самые простые: дорожки до кварца как можно кроче, нагрузочные ёмкости должны соответствовать параметрам кварца, под кварцем только малосигнальная земля (ни какой сильноточной).
Аппаратный контроль за тактированием в MSP430 весьма развитый, отладчиком можно получить всё что нужно.


Тыча, я имитировал помеху. Результат был очень похожий.

Меня смущает другое, возможность (и даже легкость), с которой можно MSP заставить выполнять произвольный кусок кода в прошивке. Обработка прерывания от сбоев генератора мне не помогла.

Цитата(Obam @ Jun 24 2016, 18:35) *
Аппаратный контроль за тактированием в MSP430 весьма развитый, отладчиком можно получить всё что нужно.

ммм... про отладчик поподробнее. У меня JTAG отладчик сразу виснет, если я подобными издевательствами занимаюсь.

Цитата(iosifk @ Jun 24 2016, 18:57) *
И уж если переразвести не удается, то можно сделать экраны из фольги и прикрыть ими от помех...


Мы этим и занимаемся (поскольку полностью от кварца отказаться не можем) + перевод MCLK на DCO
k155la3
Проверьте, не открыт ли какойнить флаг прерывания, не обеспеченный вектором.
Рекомендую на все вектора поставить обработчики-"пустышки". NMI - если есть.
Для отлова демона можете в каждую пустышку поставить
контрольную точку и помучить девайс.
---
Смена режима тактирования. Вы устраните последствия а причина останется неизвестной.
Проверьте также осцилографом цепь питания на предмет выбросов и провалов.


ps
- постарайтесь найти режим когда сбой-глюк устойчив. Другим методом, а не "кварцевым"
- сделайте "тест-проект", который будет отличаться от основного только тем, что на свободный
пин будет P1OUT ^= 0x01. Его мониторить осцилографом.

Нахрена все это ?
Возможно, в девайсе зависает LCD например (что ажбегом возможно если I2C и топорный софт-драйвер).


emark
Цитата(k155la3 @ Jun 26 2016, 19:10) *
Проверьте, не открыт ли какойнить флаг прерывания, не обеспеченный вектором.
Рекомендую на все вектора поставить обработчики-"пустышки". NMI - если есть.
Для отлова демона можете в каждую пустышку поставить
контрольную точку и помучить девайс.
---
Смена режима тактирования. Вы устраните последствия а причина останется неизвестной.
Проверьте также осцилографом цепь питания на предмет выбросов и провалов.


ps
- постарайтесь найти режим когда сбой-глюк устойчив. Другим методом, а не "кварцевым"
- сделайте "тест-проект", который будет отличаться от основного только тем, что на свободный
пин будет P1OUT ^= 0x01. Его мониторить осцилографом.

Нахрена все это ?
Возможно, в девайсе зависает LCD например (что ажбегом возможно если I2C и топорный софт-драйвер).


Эти все этапы я уже проделал.

Собрали установку генерации ЭМИ (из латора и прерывателя), с помощью которого и нашли слабое место нашего изделия (кварц), путем последовательного экранирования частей платы. Просто потом я нашел более простой путь - непосредственного воздействия металическим предметом на ножки кварца.

Еще раз повторю, меня сильно смущает что сбивая тактовый генератор (пусть варварскими методами), можно запустить произвольный кусок кода прошивки. Раньше на MSP я с таким не сталкивался. С зависанием худо-бедно справится внешний watchdog, а вот с исполнением произвольного куска кода...
jcxz
Цитата(emark @ Jun 24 2016, 20:09) *
Тыча, я имитировал помеху. Результат был очень похожий.
Меня смущает другое, возможность (и даже легкость), с которой можно MSP заставить выполнять произвольный кусок кода в прошивке. Обработка прерывания от сбоев генератора мне не помогла.

Этим Вы не помеху симитировали. В нормально разведённом устройстве помеха не должна туда попадать.
Имхо - таким образом можно почти любой МК "заставить выполнять произвольный кусок кода в прошивке". Так как сбиваете тактирование, следовательно портится например выбираемый в данный момент код на произвольный.
С таким-же успехом можете замкнуть любые произвольные ноги МК и удивиться: "что-ж это он неправильно стал работать-то?"
_3m
Цитата(emark @ Jun 24 2016, 15:03) *
... тыкая какой-нибудь железкой в ножки кварца на раз получаем такое зависание, а иногда (довольно часто) пыполнения кода программы, отвественного за стирания внутреннего программного Flash с понятным результатом. MCLK от кварца. Если MCLK сделать от DCO проблема исчезает.
Кто-нибудь сталкивался таким? Как решили?

Было 1-в-1 как у вас, включая самопроизвольное стирание флэш.
Перешел на тактирование от dco с периодической подстройкой по кварцу. По другому не лечится: в msp кварцевый генератор малопотребляющий, амплитуда на кварце мизерная он сбивается от малейшего чиха. Сам процессор однотактный а они капризны в отношении тактирования. Так что на экранирование и переразводку можете даже не тратить время - не поможет.
При работе от dco msp очень устойчив.

Цитата(jcxz)
Этим Вы не помеху симитировали. В нормально разведённом устройстве помеха не должна туда попадать.
Имхо - таким образом можно почти любой МК "заставить выполнять произвольный кусок кода в прошивке". Так как сбиваете тактирование, следовательно портится например выбираемый в данный момент код на произвольный.

Помеха всегда попадает потому что идеальной защиты от помех не бывает. Вопрос в степени ослаблении помехи и чувствительности входов МК.
Попробуйте сбить старый 4-х тактовый pic16 или классический 12-тактовый mcs-51 (cmos версию). Они "тыкание" в кварц вообще не замечают. Если кварц закоротить останавливаются, раскоротишь продолжают работать с того же места.
Obam
Цитата(emark @ Jun 24 2016, 18:09) *
ммм... про отладчик поподробнее. У меня JTAG отладчик сразу виснет, если я подобными издевательствами занимаюсь.


Подробнее чем в SLAU144J гл.5 не будет, а я так понимаю с нею вы знакомы. Странно, почему вам не удаётся обслужить OFIFG.
Опять же п. 5.2.7: "If a fault is detected for the crystal oscillator sourcing the MCLK, the MCLK is automatically switched to
the DCO for its clock source. This does not change the SELMx bit settings. This condition must be handled by user software." - на этот пункт эрраты часом нет?

Если вы действительно имитируете тяжёлую помеховую обстановку, то JTAG законно отваливается.

Кстати выдежка из DS ни чем не поможет?
Нажмите для просмотра прикрепленного файла

k155la3
Цитата(emark @ Jun 26 2016, 19:13) *
Эти все этапы я уже проделал.
. . . .
Еще раз повторю, меня сильно смущает что сбивая тактовый генератор (пусть варварскими методами), можно запустить произвольный кусок кода прошивки. Раньше на MSP я с таким не сталкивался. С зависанием худо-бедно справится внешний watchdog, а вот с исполнением произвольного куска кода...


Чтобы я делал, IMHO
- если есть возможность - задать внешнее "неубиваемо-гарантированое" тактирование и проверить гипотенузу что вылет из-за слета тактирования
(или помехи на тактовый вход)
- для ВЧ тактирования должен отрабатывать флаг неисправности генератора.
и даже если тактирование вообще нет - процессор должен переключаться на VLO (по F22XX семейству точно не знаю)
- проверить тип кварца, его "глючность" (контафакт), обвеску-емкости / настройку генератора.
Рекомендации по типовой схеме включения из даташита на кварц.
Мне попадались глючные 32768.
- проверить как девайс реагирует на ВЧ импульсную помеху
(смс на рядом лежащий мобильник). Эсли слетатет - экранировать - фильтровать.
итд в томже стиле sm.gif



Цитата(Obam @ Jun 27 2016, 10:19) *
... Странно, почему вам не удаётся обслужить OFIFG. ...

Демонов изгонять выкуривая
slaz167j.pdf, искать литерал "OFIFG"
sm.gif
AlexandrY
Цитата(emark @ Jun 24 2016, 15:03) *
Кто-нибудь сталкивался таким? Как решили?


Да, бывают такие случаи.

Тогда надо сделать так чтобы микроконтроллер не становился антенным противовесом.
Т.е. надо создать искусственный противовес рядом с кварцем, это может быть USB кабель, оплетка какого-нибудь экранированного интерфейсного кабеля, например CAN или плейн большой площади.

Тогда можете тыкать отверткой прямо в ноги кварца и ничего не произойдёт.
iosifk
Цитата(_3m @ Jun 27 2016, 09:30) *
Помеха всегда попадает потому что идеальной защиты от помех не бывает. Вопрос в степени ослаблении помехи и чувствительности входов МК.
Попробуйте сбить старый 4-х тактовый pic16 или классический 12-тактовый mcs-51 (cmos версию). Они "тыкание" в кварц вообще не замечают. Если кварц закоротить останавливаются, раскоротишь продолжают работать с того же места.

Когда-то давно нам в Элтех клиент прислал результаты опытов. Он пьезо-поджигалкой для газа тестировал разные стартовые наборы микроконтроллеров.
так вот, меги сбивались, а НЕКовские - нет. Поищите статью, автор Горюнов...
А вывод такой. Все микроконтроллеры сделаны для разного применения. Если Вы хотите применить в "промышленности" микроконтроллер, сделанный для "бытовухи", то имеете то, что имеете. Выбирайте микроконтроллер сделанный для "автопрома". Там уровень помех значительно выше и МК сразу делали менее к ним чувствительными...

А "сегодня" - экраны, развязки земель по входу и по выходу, фильтрация питания...
Obam
Цитата(k155la3 @ Jun 27 2016, 12:01) *
Цитата
(Obam @ Jun 27 2016, 10:19) *
Демонов изгонять выкуривая
slaz167j.pdf, искать литерал "OFIFG"
sm.gif



Эт когда это я такое писал?
k155la3
Цитата(Obam @ Jun 27 2016, 11:28) *
Эт когда это я такое писал?

Виноват, ошибочка.
MrYuran
Цитата(emark @ Jun 24 2016, 15:03) *
Кто-нибудь сталкивался таким? Как решили?


Цитата
Если MCLK сделать от DCO проблема исчезает.


^)

Ещё, чисто программно, аккуратнее с указателями на функции.
MISRA, например, явно запрещает неконстантные указатели не код - видимо, не зря
emark
Цитата(Obam @ Jun 27 2016, 12:19) *
Подробнее чем в SLAU144J гл.5 не будет, а я так понимаю с нею вы знакомы. Странно, почему вам не удаётся обслужить OFIFG.
Опять же п. 5.2.7: "If a fault is detected for the crystal oscillator sourcing the MCLK, the MCLK is automatically switched to
the DCO for its clock source. This does not change the SELMx bit settings. This condition must be handled by user software." - на этот пункт эрраты часом нет?

Если вы действительно имитируете тяжёлую помеховую обстановку, то JTAG законно отваливается.

Кстати выдежка из DS ни чем не поможет?
Нажмите для просмотра прикрепленного файла


Ну да, поэтому у нас и 12MГц, а не 16
Obam
Табличка как бы намекала на зависимость от напряжения питания и правильность установки LFXT1Sx.
emark
Цитата(AlexandrY @ Jun 27 2016, 13:23) *
Да, бывают такие случаи.

Тогда надо сделать так чтобы микроконтроллер не становился антенным противовесом.
Т.е. надо создать искусственный противовес рядом с кварцем, это может быть USB кабель, оплетка какого-нибудь экранированного интерфейсного кабеля, например CAN или плейн большой площади.

Тогда можете тыкать отверткой прямо в ноги кварца и ничего не произойдёт.


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

противовес подсоединен к земле рядом с кварцем?

а как это сделать в автономном аккумуляторном устройстве?

Цитата(k155la3 @ Jun 27 2016, 13:01) *
Чтобы я делал, IMHO
- если есть возможность - задать внешнее "неубиваемо-гарантированое" тактирование и проверить гипотенузу что вылет из-за слета тактирования
(или помехи на тактовый вход)
- для ВЧ тактирования должен отрабатывать флаг неисправности генератора.
и даже если тактирование вообще нет - процессор должен переключаться на VLO (по F22XX семейству точно не знаю)
- проверить тип кварца, его "глючность" (контафакт), обвеску-емкости / настройку генератора.
Рекомендации по типовой схеме включения из даташита на кварц.
Мне попадались глючные 32768.
- проверить как девайс реагирует на ВЧ импульсную помеху
(смс на рядом лежащий мобильник). Эсли слетатет - экранировать - фильтровать.
итд в томже стиле sm.gif


это все уже проделано...

Цитата(Obam @ Jun 27 2016, 17:38) *
Табличка как бы намекала на зависимость от напряжения питания и правильность установки LFXT1Sx.

Специально еще раз проверил. Все правильно.

Цитата(_3m @ Jun 27 2016, 11:30) *
Было 1-в-1 как у вас, включая самопроизвольное стирание флэш.
Перешел на тактирование от dco с периодической подстройкой по кварцу. По другому не лечится: в msp кварцевый генератор малопотребляющий, амплитуда на кварце мизерная он сбивается от малейшего чиха. Сам процессор однотактный а они капризны в отношении тактирования. Так что на экранирование и переразводку можете даже не тратить время - не поможет.
При работе от dco msp очень устойчив.


Помеха всегда попадает потому что идеальной защиты от помех не бывает. Вопрос в степени ослаблении помехи и чувствительности входов МК.
Попробуйте сбить старый 4-х тактовый pic16 или классический 12-тактовый mcs-51 (cmos версию). Они "тыкание" в кварц вообще не замечают. Если кварц закоротить останавливаются, раскоротишь продолжают работать с того же места.


да... Собрали такое же устройсто на STM-е, показал себя в этом отношении покрепче.
emark
Цитата(Obam @ Jun 27 2016, 12:19) *
Опять же п. 5.2.7: "If a fault is detected for the crystal oscillator sourcing the MCLK, the MCLK is automatically switched to
the DCO for its clock source. This does not change the SELMx bit settings. This condition must be handled by user software." - на этот пункт эрраты часом нет?


А это из какой errat-ы? В SLAZ167 такого нет, да и организация пунктов там другая.

По смыслу тоже не понятно. Если биты не меняются, как тогда цпу тактируется? Какими-то окольными путями что ли?
k155la3
будет ли вылет или завес, если
---
источник для MCLK <-- DCO
а кварц будет востребован например для таймера или чего другого
TIMER <-- ACLK <-- XT
---
тыкаем по Вашей методк кварц, и ... ?

Цитата
... как тогда цпу тактируется? Какими-то окольными путями что ли?

Мониторили ли через контрольные выходы потров SELS(MCLK) что происходит на линии MCLK при "вылете" ?
Будет видно, на какую частоту-источник уходит тактирование


Obam
Цитата(emark @ Jun 28 2016, 12:49) *
А это из какой errat-ы? В SLAZ167 такого нет, да и организация пунктов там другая.

По смыслу тоже не понятно. Если биты не меняются, как тогда цпу тактируется? Какими-то окольными путями что ли?


Это из User's Guide SLAU144J гл.5 п. 5.2.7, про этот пункт интересовался эрратой.
emark
Цитата(k155la3 @ Jun 28 2016, 15:55) *
будет ли вылет или завес, если
---
источник для MCLK <-- DCO
а кварц будет востребован например для таймера или чего другого
TIMER <-- ACLK <-- XT
---
тыкаем по Вашей методк кварц, и ... ?


Так завесить практически не удается (если отрабатывать прерывание по сбою генератора)

у меня сейчас сделанотак:
  • MCLK от DCO;
  • ACLK от кварца;
  • частоты DCO и кварца одинаковые;
  • разрешено прерывание по сбою генратора;
  • в прерывании подтверждаю переход на DCO и пытаюсь запустить кварц, если в течении примерно 10 мс не удалось, то сброс.

sasa_c
А попробуйте для эксперимента добавить резистор на 5 МОм между входом генератора и + 3,3v, может сбои уменьшаться?
emark
Цитата(sasa_c @ Jun 30 2016, 10:46) *
А попробуйте для эксперимента добавить резистор на 5 МОм между входом генератора и + 3,3v, может сбои уменьшаться?


Можно попробовать.
Dog Pawlowa
Цитата(_3m @ Jun 27 2016, 09:30) *
При работе от dco msp очень устойчив.

Ну не очень он устойчив, но зато имеет хорошее свойство - при помехах, если срабатывает супервизор питания, то контроллер пересбрасывается, но содержимое памяти остается неиспорченным. Это позволяет реализовать восстановление текущего состояния программы, и пользователь может даже не заметить, что произошел сброс.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.