Миландр

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

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




Начать новую тему  Ответить на тему  [ 10 сообщений ] 
Автор Сообщение
СообщениеДобавлено: 2015-авг-31 14:25 
Не в сети

Зарегистрирован: 2014-ноя-17 08:47
Сообщения: 103
Здравствуйте уважаемые разработчики

Вопросы следующие:
при перезаписи флеши контроллера из самого контроллера нужно ли контролировать сторожевые таймеры,
проверки опытным путем показали, что если использовать IWDG, то при задании задержки менее 200мс
контроллер перезаписать с помощью JTAG не возможно приходится его сбрасывать через UART, а следовательно ни поставить брекпоинт , ни тем более залезть в отладчик не получается,
с WWDG интереснее проблема с отладчиком отпадает, но и бита возникновения события для WWDG тоже не возникает хотя я например настроил WWDG на 20мс, а сектор флеш стирается 40мс, поэтому вопрос следующий,
нужно ли при записи флеш в контроллере постоянно сбрасывать сторожевые таймеры?
или на время записи флеш они отключаются?
как можно обойти проблему с IWDG, который не дает запуститься отладчику?

при работе с WWDG заметил такую особенность, таймер сбрасывается, если значение в счетчика == 0x3F(что и написано в документации), а следовательно числа располагаемые ниже можно использовать, есть ли формула для расчета точных задержек данного таймера?

значение битов W всегда должно быть больше битов T хотя бы на 1, но если я ставлю T ниже 0x3F, то каким должен быть W? при снижении W ниже 0x7F МК перезапускается


Вернуться к началу
СообщениеДобавлено: 2015-авг-31 15:11 
Не в сети

Зарегистрирован: 2009-май-22 09:01
Сообщения: 1318
Откуда: АО "ПКК Миландр"
rubygoblin писал(а):
Здравствуйте уважаемые разработчики

Вопросы следующие:
при перезаписи флеши контроллера из самого контроллера нужно ли контролировать сторожевые таймеры,
проверки опытным путем показали, что если использовать IWDG, то при задании задержки менее 200мс
контроллер перезаписать с помощью JTAG не возможно приходится его сбрасывать через UART, а следовательно ни поставить брекпоинт , ни тем более залезть в отладчик не получается,
с WWDG интереснее проблема с отладчиком отпадает, но и бита возникновения события для WWDG тоже не возникает хотя я например настроил WWDG на 20мс, а сектор флеш стирается 40мс, поэтому вопрос следующий,
нужно ли при записи флеш в контроллере постоянно сбрасывать сторожевые таймеры?
или на время записи флеш они отключаются?
как можно обойти проблему с IWDG, который не дает запуститься отладчику?

при работе с WWDG заметил такую особенность, таймер сбрасывается, если значение в счетчика == 0x3F(что и написано в документации), а следовательно числа располагаемые ниже можно использовать, есть ли формула для расчета точных задержек данного таймера?

значение битов W всегда должно быть больше битов T хотя бы на 1, но если я ставлю T ниже 0x3F, то каким должен быть W? при снижении W ниже 0x7F МК перезапускается
1. Да нужно, если они включены.
2. Во время записи они не отключаются.
3. В режиме отладки сторожевые таймеры продолжают считать даже если процессор остановлен. И если нет их сбросов, то они сбрасывают.


Вернуться к началу
СообщениеДобавлено: 2015-авг-31 15:41 
Не в сети

Зарегистрирован: 2014-ноя-17 08:47
Сообщения: 103
Спасибо за ответы
получается во время отладки их вообще лучше не включать...
только на готовый продукт, как самый последний шаг?

и еще на счет точной паузы у WWDG получается T я могу брать любое от 0x7F до 0 кроме 0x3F и 0x40, а W при T > 0x3F от T+1 до предела 0x7F
а при T < 0x3F получается W всегда 0x7F?
0x7F - 127: следовательно 125 это возможное предельное число, тогда при скорости 40Мгц деленной на 8 -> 5Кгц / 125 -> 40 гц -> 25мс задержка, все правильно?


Вернуться к началу
СообщениеДобавлено: 2015-авг-31 17:19 
Не в сети

Зарегистрирован: 2009-май-29 16:09
Сообщения: 591
Откуда: АО "ПКК Миландр"
T изменяется от 7'h7F до 7'h40. При значении 7'h40 генерируется сброс. Сброс снимается при значении T=7'h3F и после этого T начинает опять инкрементироваться со значения 7'h7F. То есть T не может опуститься ниже 7'h3F. W это значение окна от 7'h7F до 7'h40 в пределах которого можно перезаписать T.
То есть при записи T нужно чтобы W было больше текущего T иначе произойдёт сброс. T можно записать и менее 7'h3F но по документации так делать не надо. Нужно всегда быть в пределах от 7'h7F до 7'h40.
Вот пример из аналога как рассчитывать таймаут, возможно что-то подобное следует добавить в спецификацию.


Вложения:
[ attachment ]
Безымянный.png [ 37.68 КБ | 4647 просмотров ]
Вернуться к началу
СообщениеДобавлено: 2015-сен-01 16:33 
Не в сети

Зарегистрирован: 2014-ноя-17 08:47
Сообщения: 103
а вот еще такая ситуация:
допустим я пишу много слов во флеш или стираю ее и проверяю все СТ, оконный таймер я сброшу как появится статусный бит для сброса, а вот IWDG никаких статусных битов не имеет,
его потребуется сбрасывать постоянно, в целом это будет выглядеть примерно так: 2-4 такта процессора на проверки WWDG и задержки и сброс IWDG,
нормально ли будет так часто сбрасывать IWDG? статусного флага у этого таймера нет, может есть место, где можно вытащить значение из счетчика?

ну и вопрос чисто из любопытства у WWDG, если не рекомендуется использовать значения меньше 0x3F, получается достаточно сильно зарезанный диапазон пауз
какой тогда смысл был выбирать число 0x3F вместо ноля?


Вернуться к началу
СообщениеДобавлено: 2015-сен-15 19:03 
Не в сети

Зарегистрирован: 2014-ноя-17 08:47
Сообщения: 103
Здравствуйте Уважаемые разработчики

Интересуют такие вопросы:
если выключить LSI остановится ли IWDG?
и если снять тактирование в блоке разрешения тактовых частот периферии с WWDG остановится ли этот таймер?


Вернуться к началу
СообщениеДобавлено: 2021-окт-04 00:01 
Не в сети
Аватара пользователя

Зарегистрирован: 2021-сен-02 01:00
Сообщения: 3
Организация: частное лицо
Из разряда "обмен опытом":
На своих экземплярах ВЕ92QI заметил, что после подачи питания биты LSITRIM в REG_0F по дефолту ставятся равными нулю. В результате IWDG срабатывает гораздо раньше, чем должен в соответствии со значениями регистров. Подкрутил его частоту (функцией RST_CLK_LSIadjust) - стало гораздо правдоподобнее.


Вернуться к началу
СообщениеДобавлено: 2021-окт-04 09:11 
Не в сети
Support
Аватара пользователя

Зарегистрирован: 2018-авг-10 23:14
Сообщения: 530
Организация: АО «ПКК Миландр»
Откуда: Зеленоград
ejsanyo писал(а): *
Из разряда "обмен опытом":
На своих экземплярах ВЕ92QI заметил, что после подачи питания биты LSITRIM в REG_0F по дефолту ставятся равными нулю. В результате IWDG срабатывает гораздо раньше, чем должен в соответствии со значениями регистров. Подкрутил его частоту (функцией RST_CLK_LSIadjust) - стало гораздо правдоподобнее.
Здравствуйте!

Спасибо за информацию.

Обратите, пожалуйста, внимание, что частота внутренних генераторов LSI, а также HSI имеет большой разброс по частоте. Параметр LSITRIM в регистре REG_0F действительно по сбросу имеет значение ноль, тем не менее, актуальная версия спецификации на семейство микроконтроллеров 1986ВЕ9х (ТСКЯ.431296.001СП Версия 3.23.0 от 09.09.2021) на рисунке 29 "Зависимость частоты LSI от значения LSITRIM" регламентирует требуемую зависимость для получения точной частоты генератора. Важно отметить, что эта зависимость является справочной и от образца к образцу частота будет иметь отклонение от рисунка, тем не менее, для точной настройки можно прибегнуть к использованию таймера, работающего в режиме ШИМ, при этом ядро необходимо тактировать частотой HCLK = LSI, что позволит таймерам общего назначения также работать на этой частоте - согласно рисунку 27 "Структурная блок-схема формирования тактовой частоты". После этого сигнал ШИМ можно считать с внешнего вывода микроконтроллера, например, осциллографом и однозначно сказать о частоте, на которой работает генератор LSI.

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

Информационный портал отдела технической поддержки support.milandr.ru


Вернуться к началу
СообщениеДобавлено: 2021-окт-04 13:06 
Не в сети
Support
Аватара пользователя

Зарегистрирован: 2018-авг-10 23:14
Сообщения: 530
Организация: АО «ПКК Миландр»
Откуда: Зеленоград
ejsanyo писал(а): *
Из разряда "обмен опытом":
На своих экземплярах ВЕ92QI заметил, что после подачи питания биты LSITRIM в REG_0F по дефолту ставятся равными нулю. В результате IWDG срабатывает гораздо раньше, чем должен в соответствии со значениями регистров. Подкрутил его частоту (функцией RST_CLK_LSIadjust) - стало гораздо правдоподобнее.
В продолжение обсуждения данного вопроса сообщаю, что информация из прошлого ответного поста на тему того, что поле LSITRIM по сбросу имеет значение ноль, не является корректной, за что приносим извинения. В исходном посте также есть речь про то, что значение данного поля в нуле, но это не совсем так. Чтобы разобраться в этом, важно обратить внимание на таблицу 110 "Регистр REG_0F" актуальной версии спецификации на семейство микроконтроллеров 1986ВЕ9х, где для LSITRIM по сбросу приведено значение 0b10000 или 16. Проведя исследование библиотек SPL, выяснили, что функции RST_CLK_DeInit(void) и BKP_DeInit(void) из соответствующих файлов MDR32F9Qx_rst_clk.c и MDR32F9Qx_bkp.c отрабатывают не оптимальным способом, вводя искажение в исходные значения по сбросу рассматриваемого регистра REG_0F.

Исправления для будущей версии SPL (предварительно, в релизной версии изменения могут быть видоизменены):
- В функции RST_CLK_DeInit(void) останется только вызов функции RST_CLK_WarmDeInit().
- В функции BKP_DeInit(void) через "=" для регистра REG_0F будут жестко прописываться значения по умолчанию.

Спасибо.

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

Информационный портал отдела технической поддержки support.milandr.ru


Вернуться к началу
СообщениеДобавлено: 2021-окт-04 22:19 
Не в сети
Аватара пользователя

Зарегистрирован: 2021-сен-02 01:00
Сообщения: 3
Организация: частное лицо
Lampadov писал(а): *
Проведя исследование библиотек SPL, выяснили, что функции RST_CLK_DeInit(void) и BKP_DeInit(void) из соответствующих файлов MDR32F9Qx_rst_clk.c и MDR32F9Qx_bkp.c отрабатывают не оптимальным способом, вводя искажение в исходные значения по сбросу рассматриваемого регистра REG_0F.
О...я так ведь и подозревал, что присвоение нулю идёт где-то в библиотеках, но особо не копался дальше, поскольку думал, что "так, наверно, и должно быть". Внезапная оперативность, благодарю! :D


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

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


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

Сейчас этот форум просматривают: Google [Bot] и 2 гостя


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

Перейти: 

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