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

Контроллер самостирается. Кто виноват и что делать (с) Мать (с)

On 3/27/2023 at 10:41 AM, EdgeAligned said:

В показанной схеме номинал индуктивности L1 указан 470 Ом. Но индуктивность измеряется не в Омах, а в Генри (Гн, мкГн, мГн). Сопротивление катушки - это уже дополнительный параметр. Поэтому лично я бы все-таки принял за основу вероятность ошибки разработчиков, собрал бы их вместе и начал бы все перепроверить ещё раз.

Парсингом документации, закупкой, сопровождением производства во многом занимался я сам. Бабло требует внимательности) 

Катушка это ЭМИ фильтр с импендансом 470 Ом, все правильно)

 

On 3/27/2023 at 10:41 AM, EdgeAligned said:

 придётся уж потрудиться

тут нет сомнений

 

On 3/27/2023 at 10:41 AM, EdgeAligned said:

PS. Стоит прочитать документ  ES0206 на сайте st.com, это эррата, список багов микроконтроллера. Там как раз есть кое-что про флеш

Errata мы штудировали несколько раз, и я обращал внимание программиста на связанные flash баги.

Вот exception на MPU и прощелканный HardFault и NMI это реально наш косяк. Но да сейчас имеет смысл пересмотреть еще раз эррату, спасибо.

 

PA12 в проекте не используется. 

 

Data cache might be corrupted during flash memory read-while-write operation это интереснее, но об этом говорили

 

On 3/27/2023 at 12:22 AM, Сергей Борщ said:

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

Это мне кажется слишком сложно. Думаю нужно просто по порядку отработать то что не доработали по HardFault, NMI и Mpu exception. Мне почему-то кажется это даст кучу информации к размышлению

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


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

Прочитал в теме, что у вас там прошивка обновляется через SD карту. Отлично! Вставляете карту, цепляете осцилл или лог анализатор на контакт CLK разъёма карты и подаёте питание. Тактовые импульсы побежали? Отлично, прошивка загрузчика цела и что то делает. Можно даже подцепить лог анализатор к остальным выводам и считать сигналы инициализации карты. Если они осмысленные, команды верные, значит, прошивка в этой части цела. 

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


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

On 3/27/2023 at 11:10 AM, EdgeAligned said:

Прочитал в теме, что у вас там прошивка обновляется через SD карту. Отлично! Вставляете карту, цепляете осцилл или лог анализатор на контакт CLK разъёма карты и подаёте питание. Тактовые импульсы побежали? Отлично, прошивка загрузчика цела и что то делает. Можно даже подцепить лог анализатор к остальным выводам и считать сигналы инициализации карты. Если они осмысленные, команды верные, значит, прошивка в этой части цела. 

мысль спасибо

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


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

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

В общем, счётчик страниц на STM32F103C8T6 успешно крутанулся и записал в загрузчик мусор. Хотя вроди бы всё проверял перед записью. Оказалось, что нет.

А Ваш загрузчик при первом включении разве не выставляет биты блокировки, в том числе на запрет записи в область загрузчика?)) Ну и далее по списку - проверка валидности запускаемого бинарника и т.д.

ИМХО, отладке загрузчика иногда нужно отдавать гораздо больше времени и внимания, чем основному коду. Устраивать встряску и прочие прелести суровой реальности)) Зато от банальных косяков защищен.

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


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

По поводу обработки всякого рода Fault-ов. Они не зря придуманы, поэтому в обработчиках этих исключений нужно писать код, помогающий диагностировать ошибку. Аппаратные средства микроконтроллера сохраняют флаги причин, вызвавших ошибку и последний адрес памяти программ перед "совершение ошибки". Эту информацию и нужно логгировать и выводить куда-либо. Можно записать в Backup SRAM, можно записать во внешнюю мелкосхему EEPROM или Flash, устанавливаемую на панельку, можно вывести на 7-сегментный индикатор код ошибки или промигать код светодиодов или пищалкой, как сделано было в компутерах. Там же можно выполнить подсчёт контрольной суммы прошивки для проверки её повреждения. 

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

А вот пользовательские настройки целесообразно хранить как раз в Backup SRAM, еёйной там аж 4 кБ и она как раз и предназначена для эмуляции EEPROM, как написано в документации. Быстро и безопасно. При вытаскивании батарейки сделанные настройки сбрасываются к "заводским" (которые определены вами как дефолтные). Это есть удобный и надежный способ вернуть прибор в исходное "заводское" состояние. 

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

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


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

On 3/27/2023 at 12:17 PM, EdgeAligned said:

А вот пользовательские настройки целесообразно хранить как раз в Backup SRAM, еёйной там аж 4 кБ и она как раз и предназначена для эмуляции EEPROM, как написано в документации.

Идея суперздравая. Авторство "изобретения" о том что настройки должны быть в памяти проца, мое(( Правда я уже не помню, сколько требовалось места под хранение настроек. 

 

В любом случае это конкретный косяк, от спешки, недочитанности документации и недодуманности проекта. Снаружи есть внешняя 64МБит флешь, где без особых проблем помимо текущих счетчиков и статистики можно было хранить и настройки, и тем не менее, я рискнул(( 

 

Возможно правда дело было в том, что мы там еще и ключи храним. Начиналось все это давно(

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


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

Храню настройки в последних двух страницах в виде копии с CRC (STM32F0). Это вполне нормальное решение и работает нормально. Проблема явно не в этом. 

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


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

Да нет, никто не запрещает использовать эмуляцию EEPROM на флеши памяти программ. В малых и старых микроконтроллерах это единственная возможность. Однако, в F429 размер сектора довольно велик, то есть, он будет весь вычеркнут из доступного объёма для исполняемого кода. Использовать сектор и под настройки, и под исполняемый код - чревато, поскольку перезапись настроек возможна только после стирания сектора. Это ж надо тогда предварительно считать сектор вместе с кодом, изменить и перезаписать заново. Потенциальная проблема потери части прошивки. 

Здесь же мы, не имея точных данных о прошивке, просто приводим список потенциальных мест возникновения косяка. 

Кстати, в двух банковой версии флеша есть возможность безопасного обновления прошивки. Банки просто переключаются между собой. Один банк - активный, второй - хранит резервную копию программы. 

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


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

1 час назад, Михась сказал:

Храню настройки в последних двух страницах в виде копии с CRC (STM32F0). Это вполне нормальное решение и работает нормально.

Зависит от работы, выполняющемой устройством. Такое можно делать если:

1) или МК имеет dual-flash;

2) или алгоритм работы устройства допускает длительные остановки его работы (на сотни мс - единицы секунд); 

3) или размер ОЗУ позволяет вынести всю realtime-работу, требующую немедленной реакции, в ОЗУ.

Не знаю что у вас за проекты, но алгоритмы работы почти всех моих устройств такого не допускают. Ибо - realtime.

 

PS: А если учесть что:

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

Снаружи есть внешняя 64МБит флешь

То идея - хранить настройки во флешь программ МК - очень глупая.

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


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

On 3/27/2023 at 2:13 PM, jcxz said:

идея - хранить настройки во флешь программ МК - очень глупая.

Предыдущий большой проект у меня украли. Поэтому здесь изза ключей кажется мы переборщили

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


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

Никто не мешает настройки во внешней флешь зашифровать. А ключ (константный) хранить в образе прошивки в закрытой флеши МК. Либо шифровать (эти же настройки) ключом, на основе уникального ID процессора (если он не виден в залоченном состоянии МК).

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


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

18 часов назад, fpga_student сказал:

сбросе защиты и стирании проца Baсkup SRAM стирается или нет ?

Да, стирается. 

Ключи лицензии можно хранить в OTP микроконтроллера. 

Кстати, в F429 есть проприетарная защита PCROP с собственным управление защитой секторов. Возможно, режим защиты был установлен именно в это положение. Этим может объясняться непонятка с битами защиты сектора загрузчика, о которой писал топикстартер вначале. 

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

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


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

Изделие массовое, как я понял: похоже, глючат экземпляры МК из конкретной партии поставки - "нарвались" на отбракову\контрафакт.

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


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

Насколько я понял, прошивка обновляется с карточки. Т.е. сначала загрузчик проверяет ее на карте, потом стирает флешь и начинает копировать с карты во внутреннюю память. Если во время этого процесса карту извлечь, что будет?

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


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

On 3/31/2023 at 2:13 PM, 113 said:

Насколько я понял, прошивка обновляется с карточки. Т.е. сначала загрузчик проверяет ее на карте, потом стирает флешь и начинает копировать с карты во внутреннюю память. Если во время этого процесса карту извлечь, что будет?

ничего страшного. Прошивка обновится при следующей подаче питания, тк ее файл с SD не удален

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


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

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

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

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

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

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

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

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

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

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