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

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

А как кстати проверить, что файл является валидной прошивкой, а не переименованной картинкой? Сигнатуры внутри или вектора прерываний?

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


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

On 3/26/2023 at 7:06 PM, fpga_student said:

Добрый день. 

В серии в изделиях начали самостираться платы. Визуально - белый экран, судя по всему слетает сам загрузчик. Загрузчик целостность программы проверяет по контрольной сумме, если программа не в порядке выводит сообщение на экран. Его нет. На 0 сектор загрузчика, после того как начали происходить эти глюки, сделали блокировку записи. Это ничего не изменило. Код вроде проверили, на столе в отладке при отключенной защите ситуация не воспроизвелась. У заказчиков через месяц-полгода может случиться.

Такая же петрушка. F407 проц. По неизвестным причинам стирается сектор с самим загрузчиком. Непонятно, что происходит, но факт на лице. 

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


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

В 31.03.2023 в 21:42, romas2010 сказал:

Такая же петрушка. F407 проц. По неизвестным причинам стирается сектор с самим загрузчиком. Непонятно, что происходит, но факт на лице. 

А как вы поняли что стирается именно нулевой сектор?

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


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

11 часов назад, romas2010 сказал:

Непонятно, что происходит,

Так надо ж проследить по коду или пошагово, что там понаписали. Чаще всего выполняют массовое стирание при незащищенном секторе загрузчика. 

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


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

Добрый вечер. 

Сделал тест. Дохнет именно загрузчик - обновление не идет.

 

В этот раз повезло особо.

1. Самовыставился лок на запись на все сектора (должен быть лок только на 0 секторе).

2. Самовыставились фузы db1m и bfb2

Считаю это точно баг проца. У нас в софте нет вообще записи в 0 страницу, туда загрузчик заливается ручками. Точно нет вообще db1m и bfb2, фузов запрета записи старших секторов. Есть запись параметра в ненулевую страницу (ситуативно, сейчас в тесте создана именно эта ситуация) при старте. Щаз попробуем ее отключить.

 

Есть у меня подозрение что дело в следующем. На тесте поставил плохой (дешевый китаец с наводками большими, frameless) источник питания и смотрел в ресет. С плохим источником при запуске БП с ресетом периодически происходит какой-то непонятный мандраж. Думаю дело в том, что начинается запись во флешь, которую рубит ресетом из-за например падения напряжения на старте источника (возможно он перезапускается, тк стартует не сразу, хз). От этого может в проце чтото дохнуть.

 

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

 

Скриншот сделал не сразу как фузы открыл, а после того как снял блокировку чтения. Но больше ничего не трогал.

 

Ps Интересно есть осцилл для нормального рассматривания старта ? Чтобы запись была секунду длинной, а дискретизация при этом быстрая ??

image.png

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


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

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

1. Самовыставился лок на запись на все сектора (должен быть лок только на 0 секторе).

2. Самовыставились фузы db1m и bfb2

Гениально.

 

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

Считаю это точно баг проца.

Нэт.

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

Интересно есть осцилл для нормального рассматривания старта ? Чтобы запись была секунду длинной, а дискретизация при этом быстрая ??

Этот осцилл называется логический анализатор.

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


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

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

Интересно есть осцилл для нормального рассматривания старта ? Чтобы запись была секунду длинной, а дискретизация при этом быстрая ??

Конечно есть! Во-первых, это логический анализатор (но он пишет только логические уровни). Во вторых, осциллограф с глубиной записи от 12 мегасемплов. 

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

519636774_.thumb.png.7d9302c9e701fff9f421169b41a1769f.png

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

Изменено пользователем EdgeAligned

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


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

On 4/9/2023 at 8:59 AM, EdgeAligned said:

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

Экспертиза запредельная, но я вроде написал ясно, что обычно у нас фузы db1m, bfb2 и локи записи на все сектора кроме 0 отключены. Вы либо не пишите больше ничего, либо прекратите свои детсадовские озарения, читайте внимательно. Я благодарен за идею про Baсkup SRAM, но открытий Ватсона было уже 4 штуки. 

 

On 4/9/2023 at 8:44 AM, Vasily_ said:

Нэт.

Обьясните плз, где проблема

 

On 4/9/2023 at 8:44 AM, Vasily_ said:

Этот осцилл называется логический анализатор.

Я играющим вратарем 15 лет разрабатывал прошивки ПЛИС, и хорошо знаком с логическим анализатором. ЛА - первый инструмент отладки в ПЛИС, но в данном случае я именно про осцилл писал. У ЛА триггер ставится на фронт, и да два фронта он может поймать. Но интересен нормальный график напряжения.

 

Помнится на старой работе и на Лекрое при попытке сделать нормальный захват старта БП были грабли. Мне хочется осцилл, у которого одновременно включен пиковый детектор на быстрые фронты, и который может импульсный выброс записать с разрешением скажем 20нс/дел, а когда выбросов нет пишет семплы например 1/100 мкс. Типа сжатие.

 

Лет 20 назад я напилил сам ЛА, который мог с частотой 10Мвыб/c сделать дискретизацию нескольких линий за несколько часов времени, и вся запись помещалась во флешку 8МБ) Редкие были передачи на интерфейсе. Вот хочется такое только осцилл.

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


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

48 минут назад, fpga_student сказал:

было уже 4 штуки

Хорошо сосчитали 🙂 Ну чтож, не хотите - как хотите. Ваше право искать негра в темной комнате. 

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

Впрочем, следуя вашим пожеланиям, я умолкаю и далее вы вольны самостоятельно мучить микроконтроллер и обвинять его в глюках, вместо того, чтобы лишний раз проверить програ.... ладно, всё, молчу! 😄 

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


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

2 hours ago, fpga_student said:

Но интересен нормальный график напряжения.

Ок. Читайте раздел "Интеграция с осциллографом" в описании ЛА Тектроникс. 

ЛА и Осцил. пишут сигналы с одних щупов, потом показывают их на одном экране.

Будет вот такая картинка: 

fig-14.png

https://www.tek.com/en/documents/primer/logic-analyzer-fundamentals

 

 

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


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

Так.

Эсперимент 1. Добавили в бутлоадер паузу 1 секунду в самом начале, и 2 секунды в конце.

Прошивка сдохла все равно, в этот раз выставились только bfb2 и локи записи на все.

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

 

Тк БП без кожуха, он наводит на всю плату такое. На avdd ничего нет, на 3.3 есть наводка до 400мв. На пинах всех соответственно тоже

 

Эсперимент 2. Вернул обратно загрузчик без паузы, сделали прошивку что ничего не пишет во флешь контроллера. Сняли все защиты. Это не валится...вроде

 

 

 

Безымянный.png

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


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

Я очень слабо верю в самопроизвольную порчу option bytes. А вот в ошибку программы, из-за которой она вызывает процедуру записи option bytes и пишет туда мусор, верю охотно. Поставьте ловушки перед всеми записями в FLASH->OPCR с проверкой на допустимые значения. Может еще какой-то флаг, который выставляется где-то глубоко в программе в момент появления штатной необходимости записи в option bytes и проверяется непосредственно перед записью. Потому что перед записью еще должен сброситься OPTLOCK двумя записями  разных чисел в FLASH->OPTKEYR, что явно не может произойти случайно, а только при исполнении кода, заточенного на запись option bytes, Я бы копал в эту сторону. 

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


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

Отключили проверки фузов на старте и со старым быстрым загрузчиком некоторое время все жило. Щаз сделаю сборку с новым загрузчиком и буду ее тестить до победного.

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

 

Эти 2 последние эксперимента, где вывалился bfb2 и ожидаемо все развалилось - я такое увидел емнип впервые.

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


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

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

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

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

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

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

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

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

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

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