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

STM32L152VBH6A перепрограммирование.

2 hours ago, JohnKorsh said:

У буржуев есть, значит, думаю,  не совсем глупо.

Ну вы сами-то подумайте (не перекладывая ответственность на буржуев): отключите собаку, а вэто время что-то произойдёт и МК зависнет. По закону подлости (по-буржуйски, если это более звучно, это будет закон Мерфи). И всё. Висеть будет до тех пор, пока не перезагрузите. Зачем тогда вообще псина нужна?

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


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

IWDG у STM никак не отключается, остановить можно только WWDG.

 

Если речь идет об экономии батарейного питания, то стоит оптимизировать "беспокоящий" код, т.е. валиться в сон как можно скорее после сброса.

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


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

3 часа назад, JohnKorsh сказал:

В EFM32G880F128 есть такая возможность. Использовал, удобно. У буржуев есть, значит, думаю,  не совсем глупо.

Так удалите его вовсе из программы - станет ещё удобнее. Толку от него всё равно нету у вас.

54 минуты назад, haker_fox сказал:

отключите собаку, а вэто время что-то произойдёт и МК зависнет. По закону подлости

Даже отключать не нужно - помеха сама и отключит его  :biggrin:

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


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

IWDG битом 4 в байте опций 0x1ff80004 переводится в программный режим (стм-овской утилёй) и после холодного старта перестаёт беспокоить (сбросов не будет)... это на тему можно\нельзя отключить, а хорошо-ли\плохо-ли - вопрос сродни "количеству чертей на игольном острие".

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


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

49 минут назад, Obam сказал:

IWDG битом 4 в байте опций 0x1ff80004 переводится в программный режим (стм-овской утилёй) и после холодного старта перестаёт беспокоить (сбросов не будет)... это на тему можно\нельзя отключить, а хорошо-ли\плохо-ли - вопрос сродни "количеству чертей на игольном острие".

Он по-умолчанию в программном режиме управления. Однако, это сути не меняет: однажды включив, IWDT отключить "на время" нельзя.

P.S. В некоторых МК сторожевой пес может не сбрасывать МК, а формировать исключение, а в нем пользователь, оценивая положение вещей, дает разрешение на сброс, или не дает.

 

2 часа назад, jcxz сказал:

Даже отключать не нужно - помеха сама и отключит его  :biggrin:

Однажды (дежавю у меня) мельком видел Ваш комментарий, что при испытаниях какого-то девайса из-за "иголок" МК не мог дойти до места включения сторожевого пса и зависал (может не совсем корректно описал - поправьте). Расскажите, что тогда было?

У меня IWDT включается программно сразу по вектору сброса, только потом запускаются функции копирования инициализированных секций в RAM и т.д., потом, собственно, управление на main(). Теперь есть сомнения, а не включать ли ее всегда аппаратно (битом опций в NVM-памяти):wink:

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


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

1 час назад, Arlleex сказал:

Однако, это сути не меняет: однажды включив, IWDT отключить "на время" нельзя.

Можно. Программным сбросом. Но надо пределывать стрктуру программы и, возможно, схему, чтобы после такого сброса уходить в deepsleep, а просываться по ноге wkup или будильнику и после пробуждения начинать с вектора сброса и с пустой памятью. Из плюсов - потребление будет минимально возможным.

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


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

2 часа назад, Arlleex сказал:

Однажды (дежавю у меня) мельком видел Ваш комментарий, что при испытаниях какого-то девайса из-за "иголок" МК не мог дойти до места включения сторожевого пса и зависал (может не совсем корректно описал - поправьте). Расскажите, что тогда было?

А что собственно рассказывать? По ГОСТу при испытаниях на помехоустойчивость с испытательного генератора должна подаваться пачка импульсов с определёнными характеристиками. Обратите внимание на слово пачка. Т.е. - условно говоря: если по первому импульсу пачки срабатывает WDT, то если 2-й импульс пачки успевает прийти до того как исполнение дойдёт до точки включения WDT - то устройство спокойно виснет. У нас на испытаниях (с программно включаемым WDT) такое происходило где-то 1 раз на 10-20 испытательных воздействий.

И больше мы девайсов с программно включаемым WDT делать никогда не пытались, только обязательный внешний и всегда работающий. Ну это конечно если требования к сфере применения серьёзные.

Цитата

У меня IWDT включается программно сразу по вектору сброса, только потом запускаются функции копирования инициализированных секций в RAM и т.д., потом, собственно, управление на main(). Теперь есть сомнения, а не включать ли ее всегда аппаратно (битом опций в NVM-памяти):wink:

А время выполнения ROM-boot не учитываете? :biggrin:

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


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

6 hours ago, Arlleex said:

У меня IWDT включается программно сразу по вектору сброса

О! Правильная идея значит у меня возникла) Я теперь тоже в стартапе сразу включаю собаку, а затем инициализирую всё остальное. Внешнюю собачку у нас не ставят.

6 hours ago, Arlleex said:

битом опций в NVM-памяти

стоп, а это какой МК?*

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


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

8 часов назад, jcxz сказал:

А что собственно рассказывать? По ГОСТу при испытаниях на помехоустойчивость с испытательного генератора должна подаваться пачка импульсов с определёнными характеристиками. Обратите внимание на слово пачка.

Да, это понятно. Не понятна физика происходящего. От импульсов внутри МК происходили какие-то разрушения содержимого RAM и устройство зависало?

Потому что я вижу такую принципиальную возможность только в том случае, когда после сброса и до передачи управления в main() выполняется еще какой-то код (BootROM, __main() и т.д.), который может работать с данными в ОЗУ.

У меня же в текущем проекте WDT запускается сразу после сброса МК (никаких BootROM, __main(), SystemInit() и т.д.), при этом, как правило, включение WDT не сопровождается работой с ОЗУ (одна строчка кода, выполняется прямо из Flash). Вот и думаю, существует ли такая же вероятность бесконечного зависания:to_take_umbrage: По идее - нет.

 

4 часа назад, haker_fox сказал:

стоп, а это какой МК?*

Да почти любая STM-ка.

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


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

7 minutes ago, Arlleex said:

никаких BootROM

А загрузчик от производителя, если речь о STM?

8 minutes ago, Arlleex said:

Да почти любая STM-ка.

Ок, спасибо)

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


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

Только что, haker_fox сказал:

А загрузчик от производителя, если речь о STM?

А в STM32 нет BootROM в том виде, в каком он есть, например, в XMC4xxx.

В STM32 после аппаратного сброса пользователь сам волен выбирать, что ему делать - и, если честно, мне так даже больше нравится. Но тут уж на вкус и цвет, как говорится:smile:

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


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

27 минут назад, Arlleex сказал:

А в STM32 нет BootROM в том виде, в каком он есть, например, в XMC4xxx.

Судя по всему в последних уже есть:

Цитата

On STM32F070x6 and STM32F030xC devices only, internal empty check flag is
implemented to allow easy programming of the virgin devices by the boot loader. This flag is
used when BOOT0 pin is defining Main Flash memory as the target boot space. When the flag is set, the device is considered as empty and System memory (boot loader) is selected instead of the Main Flash as a boot space to allow user to program the Flash memory.
This flag is updated only during Option bytes loading: it is set when the content of the
address 0x08000 0000 is read as 0xFFFF FFFF, otherwise it is cleared. It means a power
on or setting of OBL_LAUNCH bit in FLASH_CR register is needed to clear this flag after
programming of a virgin device to execute user code after System reset.

Кстати, Option bytes loading происходит тоже до сброса и управляется совсем не Святым Духом.

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


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

41 minutes ago, Arlleex said:

В STM32 после аппаратного сброса пользователь сам волен выбирать,

Погодите, сначала запускается загрузчик, который мониторит состояние ножек BOOT0, 1, или не так?

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


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

Только что, Сергей Борщ сказал:

Судя по всему в последних уже есть

Все-таки, как мне кажется, нужно отталкиваться от того, что девайс уже прошит и с ножками boot все в порядке (загрузка из основной Flash-памяти, при этом во Flash-памяти уже лежит нужная прошивка).

К тому же, в Вашей цитате приведен случай программного изменения байтов опций. В этом случае как раз Святой Дух рулит процессом "option byte loading" после включения питания:

Цитата

Note: The new programmed option byte (user, read/write protection) are not loaded after a system reset. To reload them, either a POR or setting to '1' the OBL_LAUNCH bit is necessary

...

On every power-on reset, the option byte loader (OBL) reads the information block and stores the data into the option byte register (FLASH_OBR) and the write protection register (FLASH_WRPR).

RM на STM32F030, стр. 65.

 

Только что, haker_fox сказал:

Погодите, сначала запускается загрузчик, который мониторит состояние ножек BOOT0, 1, или не так?

Ножки BOOT0/BOOT1 аппаратно перенастраивают отображение области памяти по адресу 0x00000000 для CPU, подсовывая туда либо адрес загрузчика, либо ОЗУ, либо Main Flash Program. Происходит это в течение первых нескольких тактов работы CPU после сброса. Никакого программного BootROM при этом не запускается.

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


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

Добрый день! Спасибо за обсуждение. Ну, раз нельзя отключать - обрабатываю программно , кто включил железо, кнопка или IWDG. 

"Однажды (дежавю у меня) мельком видел Ваш комментарий, что при испытаниях какого-то девайса из-за "иголок" МК не мог дойти до места включения сторожевого пса и зависал (может не совсем корректно описал - поправьте). Расскажите, что тогда было?" - если вопрос ко мне, то было на MSP430. В начале работы инициализировал огромный массив и за это время WDT отрабатывал, что положено, и так в цикле. В IAR есть low_level_init.c - в этот файл можно записать функции, которые выполняются до низкоуровневой инициализации, там я и запретил WDT, а, после инициализации, включил. Кстати, в MSP WDT тоже отключается.

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


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

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...