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

11

сценарий

Я хочу обновить недорогое устройство IoT по беспроводной сети с помощью новой прошивки, обновляющей микроконтроллер (ы) устройства. Память микроконтроллера - это флэш-память в диапазоне от 32 до 128 Кб (считается каждый цент). Эта дешевая память имеет одно главное ограничение: она может быть стерта только блочно.

Вопрос

Означает ли это, что я не могу сделать дифференциальные ( дельта ) обновления? Всегда ли мне обновлять всю память контроллера (или хотя бы существенные части)?

Я хочу уменьшить необходимость перепрошивки и максимально рисковать кирпичом устройства. Существуют ли существующие стратегии при прошивке микроконтроллеров по воздуху?

Хельмар
источник
Что для вас важнее, стоимость или низкий уровень риска?
Бенс Кауликс
Я думаю, @BenceKaulics нашел правильный баланс между ними. В конце концов, риск кирпича - это также (взвешенная) стоимость.
Хелмар

Ответы:

8

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

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

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

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

Чтобы прояснить функциональные возможности, которые могут быть достигнуты с помощью сложного решения для микропрограммного обеспечения, загрузчик и, возможно, первичный стек связи могут оставаться резидентными, в то время как все оставшееся пространство пользовательского приложения повторно мигает. Это не требует каких-либо накладных расходов (особенно, если разбиение блока является мягким). В сценарии, где необходимо обновить стек связи, область, обычно используемая для кода приложения, может временно использоваться во время загрузки и проверки. Достижение этого требует некоторой поддержки в SoC, но устройства 2-го и 3-го поколения, разработанные с учетом этого, уже существуют.

Шон Хулихейн
источник
6

Я хочу уменьшить необходимость перепрошивки и максимально рисковать кирпичом устройства. Существуют ли существующие стратегии при прошивке микроконтроллеров по воздуху?

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

Имея это в виду, вы можете использовать алгоритмы выравнивания износа при обновлении обоих изображений. Код для таких алгоритмов может занимать около 10-15% от общего объема памяти, но это стоит того, чтобы продлить срок службы устройства.

Выравнивание износа обычно управляется флэш-контроллером, который использует алгоритм выравнивания износа, чтобы определить, какой физический блок следует использовать при каждом программировании данных. Существует два типа выравнивания износа твердотельных накопителей (SSD): динамический и статический. Динамическое выравнивание износа объединяет стертые блоки и выбирает блок с наименьшим количеством стирания для следующей записи.

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

( Techtarget.com: выравнивание износа )

Леон Карло Валенсия
источник
6

Freescale Semiconductor описывает надежный способ обновления встроенного программного обеспечения для микроконтроллеров Kinetis .

Называется она: программа Flash Memory Swap .

Системы, использующие флэш-память подкачки

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

преимущества

  • Простота программирования. Приложение всегда выполняется из нижнего блока в карте памяти.
  • Потеря мощности терпима.
  • Не требуется загрузчик. Нет задержки до запуска основного приложения.
  • Хорошо подходит для многозадачной ОС. Минимальное время простоя приложения. В многозадачной системе можно продолжать выполнять основные задачи приложения, пока выполняются фоновые задачи для обновления новой копии приложения.
  • Резервная копия кода. Можно вернуться к известному рабочему приложению.

Недостатки

  • Для хранения резервной копии требуется дополнительное пространство флэш-памяти.

Вы можете обновить блоки, а затем поменять их местами.

Обмен памяти во время обновления визуализируется

Связанный документ содержит подробное описание.

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

Бенс Кауликс
источник
2
Это выглядит великолепно и выглядит как решение, которое, безусловно, следует учитывать, если оно может быть сбалансировано с требованиями к стоимости. + 1
Хелмар