Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

ITCM stm32h7

Ср янв 24, 2024 21:29:37

Всем привет. Кто ни будь догадался как в принципе использовать ITCM?
Как я понял это обычный Executable SRAM с быстрым доступом (0 wait state).
Как я предполагаю-у, я должен скомпилировать код под область ITCM, но залить его как Data блок во Flash,
затем моё пользовательское приложение должно перенести этот Data блок из Flash в ITCM и... передать управление?
Или я чо-то недопер?

Re: ITCM stm32h7

Пн мар 25, 2024 10:19:45

Помощь зала попрошу.
Проц. STM32H750. Во флеш расположен только свой загрузчик и больше ничего.
Загрузчик принимает рабочую прошивку по UART и кладет её в RAM D1.

Рабочая программа - отдельный проект, подразумевается работа без флеш.
Собирается с STM32H750VBTX_RAM.ld и в отладчике работает.

Всё в сборе - не работает переход от загрузчика к рабочей программе.
Где виснет непонятно, отладку запускаю в проекте загрузчика,
загрузчик свое отрабатывает и после перехода в основную программу все виснет.
Адрес запуска основной программы беру из её HEX , типа такого :
#define APPLICATION_ADDRESS 0x24003500UL
В отладке видно, что PC и SP изменились, но дальше пошаговая не работает.

Может, у кого есть работающий вариант перехода для H7?
Вложения
STM32H750VBTX_RAM.ld.txt
(4.65 KiB) Скачиваний: 10
jmp.txt
(1.01 KiB) Скачиваний: 9

Re: ITCM stm32h7

Пн мар 25, 2024 18:28:37

Программа скомпилирована с того адреса куда её загружают и пытаются запустить?

Re: ITCM stm32h7

Пн мар 25, 2024 18:44:26

в ld файле RAM_EXEC (xrw) : ORIGIN = 0x24000000, LENGTH = 512K
всё там сейчас - и программа и все данные.
Стек в DTCMRAM.
Если запускаю отладчиком в RAM, то всё работает.
Если загружаю загрузчиком HEX ->BIM и в ОЗУ с 0x24000000, и запускаю с адреса старта программы, то не работает
Когда запускаю отладчиком в RAM, потом выхожу из отладки и подключаюсь отладкой в конфигурации "БЕЗ ЗАГРУЗКИ"
то работает.
Если подключусь отладкой без загрузки к тому , ч то флеш загрузчик перенес, то отладка тоже не то показыват.

Re: ITCM stm32h7

Вт мар 26, 2024 07:17:48

Посмотрите листинг во что компилируется вызов JumpToApplication(); Былт недавно. После того как вы стек передвинули он продолжал использоваться и всё падало.

Re: ITCM stm32h7

Ср мар 27, 2024 08:39:16

Если подключусь отладкой без загрузки к тому , ч то флеш загрузчик перенес, то отладка тоже не то показыват.
Не понимаю проблемы... Отладчик вроде имеется. Почему тогда просто не отладить им - не найти где именно стопорится? Зачем без толку продолжать пинать колёса? :dont_know:
Скорее всего (имхо) ваша рабочая программа начинает работать с периферией (инитить её) в расчёте на то, что регистры периферии содержат дефолтные значения (послесбросовые). А ваш загрузчик уже что-то записал в какой-то регистр и не восстановил дефолтное.
С помощью отладчика такое находится на раз.

Re: ITCM stm32h7

Ср мар 27, 2024 15:19:16

дело за малым - подключить отладчик после загрузки кода загрузчиком.

/*
* ARM clearly says that changing the VTOR requires a DSB after it
* and changing the stack pointer requires an ISB after it.
*/
Вот с этим вроде как заработало.

__set_MSP(*(__IO uint32_t*) startToProgramAddress);
__ISB(); /* Instruction Synchronization Barrier */

и вот это еще:
// Make sure, the CPU is in privileged mode.
#define EnablePrivilegedMode() __asm("SVC #0");
if( CONTROL_nPRIV_Msk & __get_CONTROL( ) )
{ /* not in privileged mode */
EnablePrivilegedMode();
}

Re: ITCM stm32h7

Чт мар 28, 2024 14:41:56

Вот с этим вроде как заработало.

__set_MSP(*(__IO uint32_t*) startToProgramAddress);
__ISB(); /* Instruction Synchronization Barrier */
Ну так и есть, как я и говорил - проблема в вашем "загрузчике". Кривой он. Загрузчик, перед передачей управления загруженной программе, должен ВСЕ регистры CPU и периферии перевести в начальное (послесбросовое) состояние. Ваш загрузчик значит этого не делает.

Re: ITCM stm32h7

Пт мар 29, 2024 10:24:10

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

Re: ITCM stm32h7

Пт мар 29, 2024 14:20:42

__ISB - это не про обнуление регистров.
Ответить