Ivan. 4 11 ноября, 2022 Опубликовано 11 ноября, 2022 · Жалоба Доброго времени суток! Осваиваю микроконтроллеры Gigadevice, все шло хорошо, пока не наткнулся на задачу переопределить область загрузки в реальном времени. Микроконтроллеры GD32E23x и GD32L23x - это по сути клоны STM32F0xx и STM32L0xx. В них есть возможность перенаправить 0x00000000 адрес на флешь память, загрузочную область или RAM, и выполняется это с помощью ножек BOOT. В микроконтроллерах ST это так-же можно сделать с помощью регистра SYSCFG_CFGR1 битами MEM_MODE. Reference manual STM32F0xx.pdf В Gigadevice это регистр SYSCFG_CFG0 и биты BOOT_MODE, но эти биты доступны только для чтения. GD32E23x_User_Manual_Rev1.5.pdf Может я что-то недопонимаю, но как в Gigadevice программно перенаправить область загрузки? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 11 ноября, 2022 Опубликовано 11 ноября, 2022 · Жалоба В 11.11.2022 в 08:09, Ivan. сказал: Доброго времени суток! Осваиваю микроконтроллеры Gigadevice, все шло хорошо, пока не наткнулся на задачу переопределить область загрузки в реальном времени. Микроконтроллеры GD32E23x и GD32L23x - это по сути клоны STM32F0xx и STM32L0xx. В них есть возможность перенаправить 0x00000000 адрес на флешь память, загрузочную область или RAM, и выполняется это с помощью ножек BOOT. В микроконтроллерах ST это так-же можно сделать с помощью регистра SYSCFG_CFGR1 битами MEM_MODE. Reference manual STM32F0xx.pdf В Gigadevice это регистр SYSCFG_CFG0 и биты BOOT_MODE, но эти биты доступны только для чтения. GD32E23x_User_Manual_Rev1.5.pdf Может я что-то недопонимаю, но как в Gigadevice программно перенаправить область загрузки? SCB->VTOR Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ivan. 4 11 ноября, 2022 Опубликовано 11 ноября, 2022 (изменено) · Жалоба он есть только в 1xx серии и выше ST и соответственно GD. В 0xx только фиксированный ремап Изменено 11 ноября, 2022 пользователем Ivan. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 11 ноября, 2022 Опубликовано 11 ноября, 2022 · Жалоба В 11.11.2022 в 10:08, Ivan. сказал: он есть только в 1xx серии и выше ST и соответственно GD. В 0xx только фиксированный ремап Это не фишка какого-то производителя или семейства, VTOR - это часть ядра (в данном случае Cortex-M23) Правда, опциональная. На 21 странице список опций: Цитата Some system peripherals listed below are also provided by Cortex®-M23: Low latency, high-speed peripheral I/O port A Vector Table Offset Register Breakpoint unit Data Watchpoint Serial Wire Debug Port Типа, VTOR у вас должен быть. В файле gd32e23x.h Цитата #define __VTOR_PRESENT 1U /*!< VTOR is present */ Указано, что VTOR есть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 11 ноября, 2022 Опубликовано 11 ноября, 2022 · Жалоба Установить VTOR можно функцией /*! \brief set the NVIC vector table base address \param[in] nvic_vict_tab: the RAM or FLASH base address \arg NVIC_VECTTAB_RAM: RAM base address \arg NVIC_VECTTAB_FLASH: Flash base address \param[in] offset: Vector Table offset \param[out] none \retval none */ void nvic_vector_table_set(uint32_t nvic_vict_tab, uint32_t offset) { SCB->VTOR = nvic_vict_tab | (offset & NVIC_VECTTAB_OFFSET_MASK); __DSB(); } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ivan. 4 11 ноября, 2022 Опубликовано 11 ноября, 2022 (изменено) · Жалоба Спасибо большое. я знал, что я что-то недоглядел Изменено 11 ноября, 2022 пользователем Ivan. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 11 ноября, 2022 Опубликовано 11 ноября, 2022 · Жалоба Эти cortex-микроконтроллеры.. мало изучать доки от производителя МК, нужно еще изучать доки производителя ядра (CMSIS так точно). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tonyk_av 45 11 ноября, 2022 Опубликовано 11 ноября, 2022 · Жалоба 1 hour ago, adnega said: Установить VTOR можно функцией И не забыть указать линковщику, чтобы поместил в нужное место таблицу векторов. NVIC_VECTTAB_OFFSET_MASK Это ведь выравнивание адреса в таблице, не забывай. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ivan. 4 14 ноября, 2022 Опубликовано 14 ноября, 2022 (изменено) · Жалоба On 11/11/2022 at 2:24 PM, tonyk_av said: И не забыть указать линковщику, чтобы поместил в нужное место таблицу векторов. Это я знаю, спасибо FLASH (rx) : ORIGIN = 0x8000000 + 8K, LENGTH = 64K - 8K Я во все свои устройства закладываю функцию самообновления ПО и в AVR и STM и ESP по всем доступным протоколам от Modbus до HART. А в связи с проблемами поставок STM пришлось осваивать аналоги: Gigadevice, Geehy и Artery. А от AVR вообще отказываться (наконец то) Изменено 14 ноября, 2022 пользователем Ivan. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 63 14 ноября, 2022 Опубликовано 14 ноября, 2022 · Жалоба И VTOR тогда устанавливать значением из скрипта линковщика. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tonyk_av 45 14 ноября, 2022 Опубликовано 14 ноября, 2022 (изменено) · Жалоба 9 hours ago, Ivan. said: FLASH (rx) : ORIGIN = 0x8000000 + 8K, LENGTH = 64K - 8K О как. А 8К для чего? Если обновления, то, скорей всего, и таблица прерываний в RAM. Изменено 14 ноября, 2022 пользователем tonyk_av Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ivan. 4 15 ноября, 2022 Опубликовано 15 ноября, 2022 · Жалоба 20 hours ago, tonyk_av said: О как. А 8К для чего? Если обновления, то, скорей всего, и таблица прерываний в RAM. В первых 8К лежит загрузчик со своей таблицей прерываний. А в основном приложении стартовый адрес смещен на 8К и размер соответственно уменьшен на 8К В M0 для перенаправления таблицы векторов необходимо скопировать всю таблицу в RAM и потом ремапнуть 0 адрес на RAM с помощью SYSCFG_CFGR1 соответственно в скрипте нужно так же зарезервировать место в RAM RAM (xrw) : ORIGIN = 0x20000000 + 0xC0, LENGTH = 4K - 0xC0 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ivan. 4 15 ноября, 2022 Опубликовано 15 ноября, 2022 · Жалоба bootloader - это маленькая программа, которая проверяет наличие application и если таковое имеется - передает управление ему. если application нет (а это проверяется по первому слову в основной программе, которое не может быть FFFFFFFF), то ожидает прием нового ПО. application в свою очередь может передать управление bootloader-у для выполнения обновления по команде с какого либо интерфейса. bootloader принимает новое ПО и запиcывает его в область application кроме первого слова. как только ПО будет загружено полностью и контрольная сумма проверена - записывается первое слово app. таким образом app не может быть запущен некорректно Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 189 15 ноября, 2022 Опубликовано 15 ноября, 2022 · Жалоба 6 часов назад, Ivan. сказал: как только ПО будет загружено полностью и контрольная сумма проверена - записывается первое слово app. таким образом app не может быть запущен некорректно В отношении надежности так себе идея. Правильнее будет, все же, обновлять весь бинарь, а при каждом запуске проверять контрольную сумму всего образа. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tonyk_av 45 16 ноября, 2022 Опубликовано 16 ноября, 2022 (изменено) · Жалоба 17 hours ago, Ivan. said: В первых 8К лежит загрузчик со своей таблицей прерываний. А в основном приложении стартовый адрес смещен на 8К и размер соответственно уменьшен на 8К Ну так и прописал бы это явно в скрипте линковщика: создать секцию с такого-то адреса такого-то размера в такой-то области памяти. Я с М0 не работал, поэтому и не понял смысла загадочных "+8К". Модератор: рекомендую обратить внимание на п. 2.1 правил форума. Не всем пользователям форума может нравиться обращение на "ты". Изменено 16 ноября, 2022 пользователем haker_fox Пункт 2.1 правил форума. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться