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

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

9 hours ago, Arlleex said:

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

Это только с опытом приходит. Ну или жесткий контроль наставника. В таком случае нужно быть готовым уволить первых 3-4.

1 minute ago, jcxz said:

Элементарно: Держать его в 2-х копиях.

А кто будет выбирать, какой стартовать?

 

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


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

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

А кто будет выбирать, какой стартовать?

pre-boot. Микроскопический, простейший как амёба.

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

"чрезвычайно хороший программист" накосяпорил с загрузчиком

"Чрезвычайно хороший" напишет безопасно обновляемый загрузчик. Если программист не додумался до такого, то он явно не "чрезвычайно хорош".

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


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

Да, некоторые STM32 имеют двухбанковую организацию флеши, как раз для аздачи безопасного обновления прошивки. STM322F429VG, который у топикстартера, как раз имеет вариант конфигурирования флеши под два банка. Но желательно было выбрать версию VI с большим (2 МБ) размером флеши, чтобы двухбанковая организация была уже по-дефолту. Работа с двухбанковой флешей описана в документах ST (забыл, какой номер дока)

  

12 часов назад, Arlleex сказал:

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

А кто будет писать неглючный загрузчик загрузчика? 🙂 Там же вот в чем фишка то. При установке уровня защиты Level 2 отключаются все системные загрузчики СТМ-ки, и единственный способ обновления - софтовый загрузчик во флеше, в защищенной от перезаписи области. Если же установлен Level 1, тогда можно загрузиться с системного (нестираемого) загрузчика или через отладочный интерфейс, но в этом режиме невозможно ни стереть, ни записать флеш. Только понижение Level 1 до Level 0 вызовет массовое стирание флеша, и как результат, получится чистый МК, на который теперь уже нужно будет залить полную прошивку, вместе с загрузчиком и самой рабочей программой. Но выполнение этих действий для неподготовленного пользователя уже может быть труднореализуемым. К тому же, пользователю придется давать всю прошивку в целом, что не шибко то безопасно с точки зрения копирования устройства.

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

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


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

1 hour ago, jcxz said:

pre-boot. Микроскопический, простейший как амёба.

Ясно. А как он выбирает, какой загрузчик стартовать?

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


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

1 минуту назад, turnon сказал:

Ясно. А как он выбирает, какой загрузчик стартовать?

Перед каждой копией есть табличка, в которой прописаны: Флаг валидности копии, её CRC (для контроля валидности копии) и порядковый номер. pre-boot смотрит в табличку, проверяет CRC и выбирает ту копию, у которой CRC правильная. Если правильная у двух копий - выбирает ту, у которой порядкой номер больше. Копирует выбранную в ОЗУ и запускает. При обновлении загрузчика: флаг валидности снимается, пишется образ загрузчика, пишется новая табличка с новой CRC, сброшенным флагом валидности и следующим по порядку порядковым номером. После полной записи образа загрузчика, ей ставится флаг валидности. Всё.

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


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

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

Да, некоторые STM32 имеют двухбанковую организацию флеши...

На одном банке тоже можно сделать все безопасно:wink: Это не играет принципиальной роли кроме удобства программирования.

Цитата

А кто будет писать неглючный загрузчик загрузчика?

Нет, там один обновляет другого, затем (либо каким-то ручным способом, либо автоматическим) новый становится главным активным. Теперь он сможет перешить соседа. Можно предусмотреть функционал отката номера активного загрузчика обратно. В любом случае, перед прошивкой на серии функционал нового загрузчика проверяется на столе, как минимум. Понятное дело, что зашив пургу, можно оказаться без одного загрузчика. Но зато второй останется ровно в том функционале, в котором он был точно работоспособен (ведь как-то забагованный он умудрился прошить? Вот и отошьет его исправленной через 5 минут версией).

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


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

Да хоть сколько ставь "соседей", которые будут обновлять друг друга, но если сам загрузчик написан косячно, то результат будет траги-комичным, как у топикстартера. Я ж уже в который раз повторяю это! Да в принципе то, если один загрузчик написан и проверен, то его и достаточно. Не нужно перезаписывать сам загрузчик! Он ведь не стирается в процессе перезаписи флеша, находясь в защищенном от записи секторе. 

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

ведь как-то забагованный он умудрился прошить?

А че тут гадать то - подключаемся к микроконтроллеру по отладочному интерфейсу и сбрасываем Level 1 в опциях. При этом автоматически стирается вся флеш (Mass Erase) и получаем чистый микроконтроллер, который можем заново прошить с нуля. 

Ну а если установлен Level 2? Тогда всё, если софтовый загрузчик сам себя стер, то получили кирпич, больше никак. Причем, даже если у вас есть хоть пять копий этих загрузчиков, все равно похрен - Mass Erase сотрет без следа всё, коль у программиста руки кривые.

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


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

Это все нормально, за одного битого двух небитых дают. 

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

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


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

Вопщем походу проблема была в фузах.

 

Убрали разблокировку доступа к фузам и проверку того что лок включен. По результатам проверки процедура должна была установить лок на чтение прошивки, в случае если он отключен. Если включен, больше ничего делать процедура не была должна. Однако по факту мне принесли десяток плат за 2-3 месяца из 50 установленных, где были выставлены фузы db1m и bfb2 (которые я не ставил), и естественно загрузчик переставал быть загрузчиком. Никаких других повреждений больше не видел.

 

Убрали проверку/установку лока, все проблемы исчезли как с быстрым, там и с медленным (с паузами везде) загрузчиками. На стенде сделали 8000 перезапусков платы с быстрым загрузчиком - не случилось ни одного падения.

 

Засим надеюсь эта жуткая история завершена, и чудо-заказчик отправится в зрительный зал) Берегитесь заказов из бьюти, друзья))

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


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

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

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

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


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

On 5/2/2023 at 10:09 PM, Obam said:

Берегитесь заказов из бьюти, друзья))
Откель? (((-8Ж

Beauty. Индустрия красоты. Скоро кому-то сказочно повезет. Берегись пылесоса, разраб)

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


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

On 5/2/2023 at 10:32 PM, fpga_student said:

Beauty. Индустрия красоты. Скоро кому-то сказочно повезет. Берегись пылесоса, разраб)

Так а что не так с заказчиками из индустррии красоты? Часто перезагружают устройство? Так это вам в благо, баг помогли найти.

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


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

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

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

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

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

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

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

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

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

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