mOTA, легкий компонент удаленного обновления, подходящий для MCU.
mOTA, легкий компонент удаленного обновления, подходящий для MCU.
источник | Gitee

Автор |

Сегодня, с бурным развитием Интернета вещей, многие терминальные продукты требуют функций OTA. Сегодня я хотел бы поделиться с вами легким OTA-компонентом с открытым исходным кодом, специально разработанным для микроконтроллеров: mOTA.

1. Введение

Этот проект с открытым исходным кодом представляет собой OTA-компонент, специально разработанный для 32-битных микроконтроллеров. Компонент включает в себя три части: загрузчик, упаковщик прошивки (Firmware_Packager) и передатчик прошивки. Он также предоставляет три части на основе различных микроконтроллеров (STM32F1/STM32F407/). STM32F411/STM32L4) и корпуса протоколов YModem-1K. Исходя из этого, в данном проекте предусмотрен отправитель прошивки YModem_Sender на основе протокола YModem-1K. В папке примеров собраны проекты кейсов, в том числе случаи использования SPI Flash и QSPI Flash для хранения прошивки.

Буква m в mOTA может означать мини, микро, MCU (микроконтроллер) и OTA (Over-the-Air Technology), то есть беспроводную технологию. Согласно определению Википедии, OTA — это метод распространения новых данных. программное обеспечение и конфигурации устройств или даже способы обновления ключей шифрования, например, для мобильных телефонов, преобразователей цифрового видео или устройств защищенной голосовой связи — зашифрованных радиостанций двусторонней связи. Важной особенностью OTA является то, что центральный пункт может отправлять обновления всем пользователям, он не может отклонять, уничтожать или изменять обновление, и обновление немедленно применяется ко всем на канале. Пользователи могут «отклонять» обновления OTA, но менеджеры каналов также могут выгнать их из канала. Отсюда мы можем вывести несколько основных характеристик технологии OTA:

  1. Один центр может распространять обновления (прошивку) на несколько устройств;
  2. После отправки информации об обновлении ее нельзя изменить;
  3. Устройства могут отказываться от обновлений;
  4. Центр может исключить определенные устройства из получения обновлений.

Этот проект реализует только часть технологии OTA-обновления данных, то есть основные функции технологии OTA, перечисленные выше, и не заботится о технологии передачи, используемой при центральном распределении данных. (В примере этого проекта UART используется в качестве среды передачи между MCU и внешним устройством)


2. Реализованные функции

MCU на устройстве OTA Модернизацию можно понимать как IAP (In Application Programming) технология, MCU Через периферийные интерфейсы (например. UART 、 IIC 、 SPI 、 CAN 、 USB и другие интерфейсы) для подключения модулей, устройств и оборудования с сетевыми возможностями (далее совместно именуемые «хост-компьютер»). Главный компьютер получает пакет встроенного ПО с сервера, а затем отправляет пакет встроенного ПО на сервер через интерфейс связи, используя согласованный протокол связи. MCU , Зависит от MCU Отвечает за анализ прошивки, расшифровку, хранение, обновление и другие операции для выполнения функции обновления прошивки устройства. Следует отметить, что example Представленные примеры основаны не на файловых системах, а скорее на Flash Разделите его на различные функциональные области для выполнения обновлений прошивки.

Этот компонент реализует следующие функции:

  1. Проверка целостности пакета прошивки: автоматическое определение значения CRC прошивки для обеспечения надежности данных прошивки.
  2. Шифрование прошивки: поддерживает алгоритм шифрования AES256 для повышения безопасности прошивки.
  3. Проверка целостности приложения: поддерживает проверку целостности перед запуском приложения, чтобы убедиться, что работающая прошивка не имеет дефектов данных.
  4. Защита от отключения электроэнергии: когда Процесс обновления прошивкисередина(Включает загрузку、Расшифровать、Обновление и другие процессы),Любая ссылка отключена,Когда устройство снова включается,Он по-прежнему гарантированно доступенизпрошивка。(нуждаться Конфигурациядля По меньшей мередвойной раздел)
  5. Проверка прошивки водяного знака: он может определить, имеет ли пакет прошивки специальный водяной знак, и подтвердить, что это не соответствующий пакет прошивки стороннего производителя.
  6. Автоматическое обновление прошивки: когда download или factory В разделе имеется прошивка, и APP Разделдлянулевойили APP Раздел不дапоследняя версияизпрошивка时,Может Конфигурациядля Автоматически начинать обновление。
  7. Восстановить заводские настройки: factory В разделе хранится стабильная версия прошивки. При необходимости восстановления устройства до заводских настроек прошивка будет обновлена ​​до. APP Раздел.
  8. Незачем deinit : Мы знаем, что после завершения обновления прошивки bootloader Перейти к APP Перед использованием необходимо проверить используемые периферийные устройства. deinit , для восстановления исходного состояния при включении. этого компонента bootloader Содержит функцию загрузчика, позволяющую использовать комплекс периферийных устройств для получения пакетов прошивки, deinit также станет сложным и даже трудным исключить APP влияние. С этой целью этот компонент использует повторный вход bootloader способ дать APP Обеспечивает периферийную среду, сравнимую с простым включением питания, устраняя необходимость deinit код.
  9. Функции могут быть адаптированы: Благодаря функциональной настройке этот компонент можно переключать между схемами с одним разделом, двумя разделами и тремя разделами, компонентами расшифровки и автоматическими обновлениями. APP ,да Нет проверки APP честность, данетиспользовать SPI Flash (Будет реализовано)
  10. Прошивка хранится в SPI flash : Этот компонент можно передать user_config.h Конфигурация download Раздел и factory Расположение раздела внутри чипа flash или SPI flash , использовал SFUD (Serial Flash Universal Driver) как SPI flash Базовая библиотека драйверов. Если используется SPI flash поддерживать SFDP (Serial Flash Discovable Parameters) ,вы можете заменить другие марки и модели без изменения исходного кода. SPI flash 。Если неподдерживать SFDP ,SFUD Уже соответствует в SPI flash Что касается таблицы параметров, то также можно заменить другие марки и модели без изменения исходного кода. SPI flash 。

3. Архитектура загрузчика

(1) Архитектура программного обеспечения
  • аппаратное описание уровня обеспечения из вычислительных устройств и логических устройств, таких как ЦП, АЦП, ТАЙМЕР, различные микросхемы и т. д., а также все программные компоненты и зааппаратное Основа обеспечения, чтобы программная логика была окончательно выбрана.
  • аппаратное уровень абстракции обеспечения да Кусочек для вождения и аппаратное обеспечениемежду цепямиизинтерфейсслой,Воляаппаратное абстракция обеспечения. Он скрывает конкретные платформы. обеспечение деталей интерфейса, для уровня драйвера обеспечивает изаппаратное абстрагирование обеспечениеинтерфейс,Сделайте это неактуальным.
  • Уровень драйвера вызывает аппаратное обеспечение抽象слойизоткрытьинтерфейс,восстанавливать после инкапсуляции определенных логических функций,Предоставляется программному обеспечению верхнего уровня для вызовов.
  • Уровень передачи данных отвечает за отправку и получение данных.,Открытие внешнему миру изда Отправка и получение данных связанного интерфейса,Логический код интерфейса заблокированной связи,Упростите модификацию интерфейса связи для других типов.
  • Уровень деструктора протокола Воля вызывает уровень передачи данных из интерфейса приемопередатчика данных для отправки и получения пакетов для анализа.,Настройка протокола по настройкепользователя,Завершите структуру данных и анализ.
  • Прикладной уровень отвечает за выполнение кода бизнес-логики.,Инкапсуляция путем вызова других слоев,Полные логические функции верхнего уровня.
(2) Структура файла

документ

Описание функции

main.c

Автоматически генерируется STM32CubeMX и отвечает за инициализацию периферийных устройств.

user_config.h

пользователь Конфигурациядокумент,Используется для пользовательского функционального компонента OTA

app_config.h

приложение Конфигурациядокумент,Разработка кода конфигурации из некоторых вариантов запуска

app.c

Прикладной уровень, отвечающий за реализацию кода бизнес-логики.

firmware_manage.c

Уровень интерфейса управления встроенного ПО обеспечивает все рабочие интерфейсы встроенного ПО.

protocol_parser.c

Уровень деконструкции протокола реализует распаковку и пакетизацию протокола.

data_transfer.c

Уровень передачи данных предоставляет внешние интерфейсы для отправки и получения данных.

data_transfer_port.c

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

utils.c

Библиотека инструментов, которая реализует некоторые функции инструмента, которые необходимо вызывать глобально.

bsp_config.h

BSP Слой из документа Конфигурация

bsp_common.h

BSP Слой из общедоступного заголовка документа

bsp_board.c

Реализуйте некоторый собственный код инициализации для платы.

bsp_uart.c

Универсальная библиотека драйверов UART.

bsp_uart_port.c

UART изинтерфейспересадкадокумент

bsp_uart_config.h

UART из Конфигурациядокумент

bsp_timer.c

Универсальная библиотека драйверов таймеров

bsp_flash.c

абстрактный интерфейс работы с флэш-разделом

fal_stm32f1_flash.c

Встроенный флэш-интерфейс STM32F1 для записи, чтения и стирания абстрактного интерфейса


4. Идеи дизайна загрузчика

Вся идея дизайна загрузчика содержит много контента. Эта идея дизайна также представлена ​​в виде PDF-документа. Подробности см. в разделе «Идеи программирования загрузчика».


5. Процесс обновления прошивки

В зависимости от настроенной схемы разделов процесс обновления прошивки будет несколько отличаться. Здесь показан только краткий процесс обновления, чтобы облегчить быстрое понимание процесса обновления прошивки. Для более подробного содержания, пожалуйста, прочитайте «. Идеи программирования загрузчика» 》Документация и исходный код.

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

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

Вообще говоря, есть два способа уведомить загрузчик о необходимости обновления прошивки:

  1. Приняв метод командного управления верхней машиной, преимущества заключаются в следующем: APP Незачем выставляется флаг обновления Кусочек, и даже если устройство существует после получения команды обновления, его все равно можно обновить как обычно. Недостатки: устройство продолжает существовать. bootloader Вам нужно подождать несколько секунд (время Зависит от протокола связи на решении машины Кусочек), чтобы подтвердить, есть ли команда обновления от машины Кусочек, и, таким образом, решить войти в режим обновления прошивки или Перейти. к APP 。
  2. APP существовать Вход в программный сброс bootloader Прежде чем устанавливать специальный флаг, его можно поместить в RAM , резервный регистр или внешний энергонезависимый носитель данных (например, EEPROM). Преимущество этого метода в том, что при включении устройства bootloader Незачем Ожидание и проверка наличия у да команды обновления прошивки, а по флагу Кусочек можно определить, перешел ли да в режим обновления прошивки или или Перейти. к APP и используйте повторный вход bootloader механизм, который может дать APP Обеспечьте чистую периферийную среду. Недостаток - да APP и bootloader Адресное пространство Кусочекгде должно быть записано, и адресное пространство не может использоваться для других целей, не может быть случайно изменено и не может быть инициализировано компилятором. По сравнению с предыдущим решением здесь требуется больше шагов по указанию адреса переменной, а не по ее инициализации. Если использоватьизда RAM Как и в случае с меткой записи Кусочекиз СМИ, существует также проблема потери информации о метке обновления после отключения электроэнергии.

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

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


6. Механизм обнаружения и обработки прошивки

Причина, по которой механизм обнаружения и обработки встроенного ПО указан отдельно, заключается в облегчении понимания логики кода. Эта часть также представлена ​​в виде PDF-документа. Подробности см. в разделе «Механизм обнаружения и обработки встроенного ПО».


7. Необходимые инструменты

  1. Firmware_Packager Этот инструмент является обязательным и отвечает за упаковку. bin прошивка и для bin Прошивка добавляет 96 byte Заголовок таблицы наконец генерируется как fpk(Firmware Package) Пакет прошивки. о 96 byte Подробное содержание заголовка см. в разделе «Информация заголовка пакета прошивки fpk». потому что YModem-1K протоколиз Размер данных на пакетда 1 Kbyte , для удобства bootloader При распаковке этот инструмент также расширяет заголовок прошивки до 1 Kbyte , если настроить переменную длину пакета, то можно восстановить длину заголовка Воля 96 byte 。

Следует отметить, что в данном случае мы выбрали YModem-1K протокол, поэтому, если он будет непосредственно принят или протестирован example Для случаев в каталоге нужно выбирать размер заголовка упаковщика прошивки. 1024 byte 。

  1. YModem_Sender этого проекта example Используйте широко используемые и общедоступные YModem-1K Информационный протокол и, следовательно, также обеспечивает YModem-1K протоколизпередатчик。Зависит от于прошивкапередатчикикоммуникацияпротоколдаобязательностьиз,Фактическое время использования,Нет необходимости привязывать этот инструмент,Этот проект предоставлен исключительно для удобства тестирования.

Примечание. Вышеуказанные инструменты разработаны на основе Qt6. YModem_Sender зависит от библиотеки Qt Serial_port и должен быть добавлен самостоятельно. Как часть компонента OTA, вышеупомянутые инструменты, естественно, имеют открытый исходный код. В качестве рабочей платформы используется Windows, и она тестировалась только на Win10 и Win11. Если вам нужно изменить и скомпилировать проект, вам придется установить Qt самостоятельно. Найдите руководство по установке самостоятельно.


8. Пространство, занимаемое компонентами

Корпус этого компонента основан на протоколе YModem-1K и UART в качестве среды передачи данных между MCU и внешним миром. Таким образом, это не просто расчет места, занимаемого частью основного кода, а всего доступного проекта. . Эти данные более значимы для справки. Ниже указан размер флэш-памяти и оперативной памяти, занимаемой несколькими конфигурациями.

  1. Минимальное размещение (одна перегородка) ) Program Size: Code=7796 RO-data=464 RW-data=116 ZI-data=9316 flash: 8376 byte (8.18 kB) ram: 9432 byte (9.21 kB)
  2. Общее занятие (один раздел + компонент дешифрования) Program Size: Code=8574 RO-data=1010 RW-data=116 ZI-data=9572 flash: 9700 byte (9.47 kB) ram: 9688 byte (9.46 kB)
  3. Общее размещение (три перегородки) ) Program Size: Code=8846 RO-data=614 RW-data=116 ZI-data=9348 flash: 9576 byte (9.35 kB) ram: 9464 byte (9.24 kB)
  4. Максимальное размещение (три перегородки) + компонент дешифрования) Program Size: Code=9706 RO-data=1158 RW-data=116 ZI-data=9604 flash: 10980 byte (10.72 kB) ram: 9720 byte (9.49 kB)

Поскольку разница в занимаемых размерах между двойными и тройными разделами невелика, занятость двойных разделов отдельно не указывается. Этот компонент был сжат настолько, насколько это возможно. Однако, поскольку обработка данных прошивки требует определенного объема ОЗУ, дальнейшее сжатие этой части будет затруднено, если не будет изменен минимальный процессорный блок каждого пакета (на данный момент 4096 байт). , Пожалуйста, выберите в соответствии с фактическими потребностями.


9. Инструкции по трансплантации

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

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

  1. bootloader Некоторые из основных кодов находятся в source Справочник, для трансплантации из необходимого документа.
  2. source/Component и source/BSP Библиотека компонентов в каталоге не требуется для трансплантации и должна быть адаптирована в соответствии с функциональными потребностями.
  3. Потому что в прошивке есть заголовок, то прошивка пишет flash Метод разделения тесно связан с протоколом связи. Если вы настраиваете переменную длину изпротоколподдержки, рекомендуется использовать заголовок прошивки da (стандартный размер заголовка da при передаче первого пакета). 96 byte , этот проект принимает YModem-1K протокол, заголовок упаковщика прошивки Воля расширен до 1 Кбайт, можно самому доработать), что удобно bootloader Распаковать.
  4. 4096 байт 4096 байт 4096 байт 4096 байт После деления на размер каждого отрезанного пакета оно должно быть целым числом (например, общее из128, 256, 512, 1024, 2048 и т. д.), в противном случае исходный код необходимо изменить.
  5. Хотя схема с одним разделом экономит flash пространство, но многие функции и функции безопасности этого компонента недоступны, если flash Это действительно ограничено, в противном случае рекомендуется использовать хотя бы решение с двумя разделами.

Ниже приведены основные этапы трансплантации.

(1) Часть загрузчика

Рекомендуемая ссылка example Случаи трансплантированы.

  1. Создайте проект кода и убедитесь, что проект может работать нормально. (Например: управление миганием светодиода)
  2. Воля source Каталог издокумента поместите его в каталог проекта, вы можете разместить его и назвать как угодно.
  3. Воля source в каталогеиздокумент按нуждаться添加进代码工程середина(source/Component Библиотека компонентов в каталоге не требуется для портирования) и содержит соответствующий каталог из заголовка документа.
  4. выполнить data_transfer_port.c и fal_stm32f1_flash.c Если функции внутри соответствуют случаю, никаких изменений не требуется.
  5. Если вы используете настроенный протокол изкоммуникатора, измените protocol_parser.c и protocol_parser.h , если это соответствует случаю, никаких изменений не требуется.
  6. Воля app.c документ из функции переносится в код вашего приложения, не забудьте включить app.h , который при необходимости можно изменить.
  7. Попробуйте скомпилировать и устранить сообщение об ошибке компилятора. (Если в подсказке отсутствует часть документа, вы можете продолжить example Найдите и добавьте его в проект в каталоге середина, и вы сможете изменить его позже. )
  8. Настройте по необходимости user_config.h документ, пожалуйста, внимательно прочитайте инструкцию.
  9. Проверять app_config.h да Нужно ли изменить элемент конфигурации?
  10. Если вы выберете «использовать логотип Кусочеккак обновление прошивки из базы» USING_APP_SET_FLAG_UPDATE (в противном случае проигнорируйте этот шаг) и отметьте Кусочек место существования RAM , то необходим журнал конфигурации update_flag где RAM Адрес и конфигурация IDE или Документ загрузки Scatter не инициализирует его. IDE Метод Конфигурация показан на рисунке ниже. ( Необходимо включить common.h ) Среди них макро FIRMWARE_UPDATE_VAR_ADDR существовать user_config.h середина Конфигурация,Этот случайда 0x20000000 . Обратите внимание, что предоставлено update_flag из RAM Район надо проверить NoInit
Язык кода:javascript
копировать
/* Обновление прошивки из флага Кусочек, флаг Кусочек не сбрасывается */
#if (USING_IS_NEED_UPDATE_PROJECT == USING_APP_SET_FLAG_UPDATE)
    #if defined(__IS_COMPILER_ARM_COMPILER_5__)
    volatile uint64_t update_flag __attribute__((at(FIRMWARE_UPDATE_VAR_ADDR), zero_init));

    #elif defined(__IS_COMPILER_ARM_COMPILER_6__)
        #define __INT_TO_STR(x)     #x
        #define INT_TO_STR(x)       __INT_TO_STR(x)
        volatile uint64_t update_flag __attribute__((section(".bss.ARM.__at_" INT_TO_STR(FIRMWARE_UPDATE_VAR_ADDR))));

    #else
        #error "variable placement not supported for this compiler."
    #endif
#endif
  1. Рекомендуемый выбор инженерной конфигурации AC6 (Хотя этот компонент также поддерживает AC5 , если в этом нет крайней необходимости, рекомендуется использовать AC6), выберите C99 (Если используется perf_counter , вам нужно выбрать gnu99 ) , оптимизировать в соответствии с Вам просто нужно его выбрать. Рекомендуется нажать Конфигурация, как показано на картинке.
  1. Попробуйте скомпилировать еще раз и разрешите запросы компилятора.
  2. Если вы выберете «использовать логотип Кусочеккак обновление прошивки из базы» USING_APP_SET_FLAG_UPDATE (иначе игнорируйте этот шаг), после прохождения компиляции Проверять map документ Нет добавил новый Region , и адрес правильный, Type для Zero , площадь для UNINIT Если все соответствует, трансплантация прошла успешно.
(2) часть приложения

APP Часть трансплантации относительно проста и может быть непосредственно упомянута. example случай в .

  1. Создайте проект кода и убедитесь, что проект может работать нормально. (Например: управление миганием светодиода)
  2. Конечно APP существовать flash серединаиз Адрес, нужно учитывать bootloader из размера (не могу и bootloader Возник конфликт), середина разбивает таблицу векторов по адресу из требования (при необходимости да 0x200 целое кратное), flash стереть детализацию (из-за flash При стирании да в сектора для одного Кусочекиз). Нужно обратить внимание на изда, APP из Адрес должен быть и bootloader из user_config.h середина Конфигурация согласована, иначе она не сможет работать.
  3. существуют изменения таблицы векторов разрыва середина перед инициализацией периферийных устройств,Кейл можно изменить, как показано ниже,Раз и навсегда.
Язык кода:javascript
копировать
/* После настройки таблицы векторов разрыва середины включите общий разрыв середины. */
extern int Image$$ER_IROM1$$Base;
BSP_INT_DIS();
SCB->VTOR = (uint32_t)&Image$$ER_IROM1$$Base;
BSP_INT_EN();
  1. такой же bootloader частьиз Шаги 10 последовательный.
  2. Код загрузчика, как показано выше, отправляет на машину команду обновления прошивки. (Во время теста можно имитировать отправку обновлений прошивки на компьютер нажатием кнопок)
  3. существуют выполнить обновление прошивки из команды из кода, добавить настройки update_flag Отметьте значение Кусочекиз и системный комплексный код Кусочекиз, как показано ниже. Это середина, FIRMWARE_UPDATE_MAGIC_WORD изценитьда 0xA5A5A5A5 , Обратите внимание, что это значение должно быть bootloader Будьте последовательны 。 Если вам нужна функция «Восстановление заводской прошивки», отметив Кусочекиспользовать, также укажите дату. или, соответствующий макропринципу да FIRMWARE_RECOVERY_MAGIC_WORD ,ценитьдля 0x5A5A5A5A
Язык кода:javascript
копировать
update_flag = FIRMWARE_UPDATE_MAGIC_WORD;
HAL_NVIC_SystemReset();
  1. Попробуйте скомпилировать еще раз и разрешите запросы компилятора.
  2. такой же bootloader частьиз Шаги 13 последовательный.

10. Ответы на некоторые вопросы

  1. для Что неиспользовать RTOS ?

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

  1. для Что ты хочешь?Воля bootloader дизайнсуществовать flash из Первый адрес?

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

  1. для Почему дизайн должен быть разделен на один раздел, двойной раздел и три раздела?

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

  1. Что за фпк?

fpk да mOTA Упаковщик прошивки компонента генерирует документ на основе bin документ, существующий, имеет дополнительный 96 byte После заголовка из синтезируется в новый документ с суффиксом да. .fpk 。fpk взято из английских слов Firmware Package из аббревиатуры, означающей «пакет прошивки», этот компонент вместе именуется «пакет прошивки», а при упоминании «прошивка» обычно имеется в виду изда. bin документ。

  1. Я могу использовать его напрямую без упаковщика прошивки (Firmware_Packager) bin документ Хотите обновить??

В настоящее время да не может из. Этот компонент предоставляет функциональные возможности и функции безопасности на основе fpk Он реализован с использованием заголовков таблиц и нескольких разделов, поэтому для упаковки прошивки и генерации необходим упаковщик прошивки. fpk Пакет прошивки. Чтобы максимально эффективно использовать эти функции и функции безопасности, bootloader из Процесс обновленияда На основе заголовков, содержащихизпрошивка包开发из,На данный момент мы не рассматриваем возможность добавления процесса обновления без заголовков. когдаран,Не исключено, что по просьбе для будет слишком много людей.,я сделаю это

11. Ссылки на сторонние библиотеки.

 Этот проект с открытым исходным кодом использует или будет использовать следующие сторонние библиотеки. Благодаря следующим превосходным библиотекам кода (перечислены в произвольном порядке).

  1. fal (Flash Abstraction Layer) ,RT-Thread Команда разработчиков из библиотеки, пара Flash и на основе Flash из разделов используются для управления и работы с абстрактными библиотеками.
  2. SFUD (Serial Flash Universal Driver) Одно использование JEDEC SFDP Стандартный из серийного (SPI) Flash Универсальная библиотека драйверов.
  3. crc-lib-c дляэтого проекта CRC32 Расчет дает основу.
  4. tinyAES Это да используется для C Написать из AES 、 ECB 、 CTR и CBC Алгоритм шифрования из небольшой портативной библиотеки.
  5. SEGGER RTT SEGGER's Real Time Transfer (RTT) is the proven technology for system monitoring and interactive user I/O in embedded applications. It combines the advantages of SWO and semihosting at very high performance.
  6. perf_counter Эта библиотека использует SysTick выбор кода из измерения времени выполнения и общего ms и us из функции Delay, и не влияет на оригинал SysTick Функция и логика, если использоватьизда AC5 или AC6 , можно сделать не чувствуя использования, то есть просто Воля perf_counter Библиотеку можно использовать непосредственно после добавления в проект кода, не вызывая ее. init Как и любая функция.

адрес: https://gitee.com/DinoHaw/mOTA

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose