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

Как выключить wathcdog в GD32F103RBT6?

Контроллер GigaDevice GD32F103RBT6. Вопрос в заголовке. Использую FWDGT. Запускается и ресетится как надо, а как его выключить, если он перестал быть нужным? В регистрах нужного бита не нашёл.

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


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

5 minutes ago, LAS9891 said:

В регистрах нужного бита не нашёл.

Лень смотреть доку. Но возможно, что сделано это в целях безопасности. Нельзя отключить сторожевую собаку, которую заставили охранять целостность ПО. Ведь отключить его может потенциальная ошибка программы. Включили, живите с ним)

На это намекает и постоянное включение сторожевика через биты опций. Т.е. без участия кода, и таймер включается сразу же со стартом микроконтроллера, вернее, заводстким загрузчиком. Но к старту Вашего кода он уже запущен и работает.

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


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

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

Лень смотреть доку. Но возможно, что сделано это в целях безопасности.

Это не возможно, это так и есть. Отключаемый WDT - это бесполезный WDT. Даже просто "включаемый WDT" - это уже бесполезный WDT.

WDT должен быть включен всегда. В работающей программе.

И что такое "перестал быть нужным"? Т.е. - на старте программа может содержать ошибки, а начиная с какого-то момента работы - становится идеальной? :wink:

 

PS: Вроде как вопрос задаётся не в ветке для чайников, а таких само собой разумеющихся вещей не понимать - это очень странно....

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


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

On 12/13/2023 at 11:17 AM, LAS9891 said:

Контроллер GigaDevice GD32F103RBT6. Вопрос в заголовке. Использую FWDGT. Запускается и ресетится как надо, а как его выключить, если он перестал быть нужным? В регистрах нужного бита не нашёл.

FWDGT клокируется от IRC40K. Это клок можно выключить в регистре RCU_RSTSCK битом IRC40KEN



 

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


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

клокируется
Клокуется!!!
"рука-лицо" \-8<Ж "Вам чизу послайсать или так, целым писом возьмёте?"

Это клок можно выключить в регистре RCU_RSTSCK битом IRC40KEN
Тем более бессмысленный WDT, если у него можно "отрубить" тактовый сигнал.
Изменено пользователем Obam

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


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

3 hours ago, Obam said:

Тем более бессмысленный WDT, если у него можно "отрубить" тактовый сигнал.

Всё зависит от области применения микроконтроллера. Думаю, что если он стоит в каком-либо лабораторном приборе, то зависание микроконтроллера - ведь неприятная, но не приводящая к экономическим потерям и т.п. результатам. Если же такой МК стоит на плате привода лифта, то внешний сторожевой таймер - единственный допустимый вариант.

P.S. На счёт лабораторного оборудования, конечно, не всё так просто. В случае зависания какого-нибудь вольтметра, измеряющего непрерывно процесс в течение нескольких суток, экономический ущерб тоже может оказаться довольно большим.

P.S.S. Насколько я понимаю, если таймер включить с помощью байт опций (option bytes), то он всё равно будет включен программно, но загрузчиком, встроенным в микроконтроллер на заводе. А это значит, что его надёжность всё же ниже, чем надёжность таймера внешнего.

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


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

10 часов назад, Obam сказал:

Тем более бессмысленный WDT, если у него можно "отрубить" тактовый сигнал.

Это же "чайный" контроллер.  :wink:

Если разработчики контроллера не догадались заблокировать возможность выключения тактирования при разрешённом WDT, то, да - это бессмысленный WDT.

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


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

7 часов назад, haker_fox сказал:

Всё зависит от области применения микроконтроллера. Думаю, что если он стоит в каком-либо лабораторном приборе, то зависание микроконтроллера - ведь неприятная, но не приводящая к экономическим потерям и т.п. результатам.

Не согласен. Представьте, что у вас на столе стоит прибор, который вобщем-то работает, но иногда вдруг виснет или перезапускается из-за какой-то помехи (например - включившегося/выключившегося рядом холодильника). При том, что другие приборы на неё не реагируют. Да - скорее всего вы просто будете отзываться о его разработчиках нехорошими словами после каждого зависания, но скорее всего не выкинете его. Даже если перезапуск прибора произойдёт в самый неподходящий момент, когда на его экране находились результаты измерений, которые стоило получить немалых трудов (представьте: Вы отлаживаете девайс, в котором происходят редкие, непериодические сбои. Вы потратили целый день, пытаясь их воспроизвести и захватить на осциллографе картинку с проявлением этого сбоя. Вам это наконец-то удалось, Вы воскликнули "Эврика!" и........ тут включился холодильник  :shok: :dash2: :suicide2: ).

Когда в следующий раз потребуется пополнить парк ваших измерительных приборов, я думаю - вы скорее всего предпочтёте этому глючному прибору другой, от другого производителя. Так ведь? И скорее всего - к любым приборам от этого производителя станете относиться с недоверием, и будете предпочитать им аналоги от других производителей?

А значит - это приведёт к экономическим потерям для производителя сего глючного девайса.

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

7 часов назад, haker_fox сказал:

P.S.S. Насколько я понимаю, если таймер включить с помощью байт опций (option bytes), то он всё равно будет включен программно, но загрузчиком, встроенным в микроконтроллер на заводе. А это значит, что его надёжность всё же ниже, чем надёжность таймера внешнего.

Если таймер включается ROM-загрузчиком, то почему МК не может зависнуть в этом загрузчике, не дойдя до включения WDT? Как правило - помехи ходят пачками. Первый импульс пачки помех перегружает контроллер, второй - случается во время выполнеия ROM-кода.

Любой WDT, который включается/выключается неким устройством, которое может зависнуть - априори ненадёжен. WDT не должен управляться защищаемым устройством. Никак.

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


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

В STM32 (а значит, скорее всего, и в GD32) бит в байтах опций отвечает за аппаратное включение WDT при старте.

А при BOOT0 == 0 никакого выполнения из ROM-области не происходит, CPU стартует как описано в RM на Cortex-M.

Загнать в таком случае устройство в кирпич внешним помеховым воздействием значит, что плата спроектирована не помехоустойчивой.

P.S. Вообще самое интересное начинается тогда, когда внешний WDT нужно каким-то образом единократно "попросить" подождать, пока загрузится ОС. Приходилось использовать специализированные микросхемы. Т.е. WDT не отключался, а лишь после сброса и до первого перепада на WDI принудительно увеличивал таймаут ожидания в несколько раз больший, чем при штатной работе. Ну а зависания, не исправляемые банальным сбросом CPU (на случай непреднамеренного защелкивания КМОП внутри), я парировал сбросом питания всего процессорного узла, т.е. WDT стоял на входе EN системы питания.

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


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

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

самое интересное начинается тогда, когда внешний WDT нужно каким-то образом единократно "попросить" подождать, пока загрузится ОС.

ISR от таймера.

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


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

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

ISR от таймера.

WDT-схема - железобетонная внешняя. RESET-выход заводится на EN системы питания или (что было для нас невозможным) RESET CPU.

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


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

В 13.12.2023 в 20:06, 0men сказал:

FWDGT клокируется от IRC40K. Это клок можно выключить в регистре RCU_RSTSCK битом IRC40KEN

Согласно UserManual (рисунок тактирования МК), данный бит отключает частоту от RTC, на FWDT частота идет всегда.

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


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

On 12/15/2023 at 1:05 PM, Edit2007 said:

Согласно UserManual (рисунок тактирования МК), данный бит отключает частоту от RTC, на FWDT частота идет всегда.

согласно рисунку от RTC отключает RTCSRC[1:0], а IRC40KEN отключает сам клок IRC40K

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


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

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

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

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

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

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

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

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

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

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