eu1cc 0 9 февраля, 2022 Опубликовано 9 февраля, 2022 · Жалоба Всем привет! Есть демоборда STM32F7508-DK. Внутренней флэши только 64кб. По QSPI подключено еще 16МБт. Не могу найти информации, как эту связку запустить в отладке? Может кто уже прошел эти камни? Спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 10 9 февраля, 2022 Опубликовано 9 февраля, 2022 · Жалоба Тут, что-то есть, правда для H7. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 29 9 февраля, 2022 Опубликовано 9 февраля, 2022 · Жалоба 2 часа назад, eu1cc сказал: Не могу найти информации, как эту связку запустить в отладке? Как любой другой STM32. Там же на борту ST-Link. Создаёте проект в любой известной вам IDE, нажимаете кнопку Debug и понеслась... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
eu1cc 0 9 февраля, 2022 Опубликовано 9 февраля, 2022 · Жалоба 1 hour ago, VladislavS said: Как любой другой STM32. Там же на борту ST-Link. Создаёте проект в любой известной вам IDE, нажимаете кнопку Debug и понеслась... Не все так просто. Т.к. на борту всего 64к флеши, в нее загружается только "кусок" кода, в котором инициализируется работа с внешней флеш по QSPI, а вся остальная программа записывается в эту флеш. И дебаггер отваливается... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 9 февраля, 2022 Опубликовано 9 февраля, 2022 · Жалоба 5 минут назад, eu1cc сказал: Не все так просто. Т.к. на борту всего 64к флеши А всё ещё проще. Так как на борту есть 340КБ ОЗУ. В неё загружается программа и отлаживается. Это если делать по уму.... Когда перестанет влезать в 340КБ, обнаружите на плате 16МБ SDRAM. Отлаживаться в маленьком флеше, при наличии рядом 340КБ + 16МБ ОЗУ, можно только сдуру. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 9 февраля, 2022 Опубликовано 9 февраля, 2022 · Жалоба 11 minutes ago, eu1cc said: дебаггер отваливается... Не должен бы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
eu1cc 0 9 февраля, 2022 Опубликовано 9 февраля, 2022 · Жалоба 42 minutes ago, jcxz said: А всё ещё проще. Так как на борту есть 340КБ ОЗУ. В неё загружается программа и отлаживается. Это если делать по уму.... Когда перестанет влезать в 340КБ, обнаружите на плате 16МБ SDRAM. Отлаживаться в маленьком флеше, при наличии рядом 340КБ + 16МБ ОЗУ, можно только сдуру. Это интересно! Спасибо! Может есть какой нибуть пример? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 29 9 февраля, 2022 Опубликовано 9 февраля, 2022 · Жалоба В какой IDE работаете? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 9 февраля, 2022 Опубликовано 9 февраля, 2022 · Жалоба 1 час назад, eu1cc сказал: Это интересно! Спасибо! Может есть какой нибуть пример? Что примерять? IAR .icf-файл: define region RAM_regionA = mem:[from 0x1FFE8000 size 0x17F00]; //PSRAM (ro-code) ... define block IMAGE_HEAD with fixed order {section .intvec, section .checksum, section .codehead, section .intvecTail, section .codeSignature}; place in RAM_regionA {ro, first block IMAGE_HEAD, last section .codetail}; говорю компоновщику чтобы все read-only-секции он помещал в регион ОЗУ = RAM_regionA. Всё. Посмотрите какие регионы ОЗУ есть в вашем МК, распределите их (куда RW-данные, куда - RO-данные/код), опишите в .icf-файле и укажите какие секции в какие регионы класть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 35 9 февраля, 2022 Опубликовано 9 февраля, 2022 (изменено) · Жалоба 4 часа назад, VladislavS сказал: Как любой другой STM32. Интересная тенденция, вроде всегда флеша набивали под завязку, 512,1024,2048Кб, тут же всего 64, явно только под бутлоадер задумано... Чем этот камень так хорош, цена дешевле, чем у МК с большим флешем? Изменено 9 февраля, 2022 пользователем mantech Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
eu1cc 0 10 февраля, 2022 Опубликовано 10 февраля, 2022 · Жалоба 17 hours ago, jcxz said: Что примерять? IAR .icf-файл: define region RAM_regionA = mem:[from 0x1FFE8000 size 0x17F00]; //PSRAM (ro-code) ... define block IMAGE_HEAD with fixed order {section .intvec, section .checksum, section .codehead, section .intvecTail, section .codeSignature}; place in RAM_regionA {ro, first block IMAGE_HEAD, last section .codetail}; говорю компоновщику чтобы все read-only-секции он помещал в регион ОЗУ = RAM_regionA. Всё. Посмотрите какие регионы ОЗУ есть в вашем МК, распределите их (куда RW-данные, куда - RO-данные/код), опишите в .icf-файле и укажите какие секции в какие регионы класть. Да, спасибо! Заработало. IDE - CubeIDE. Поменял в STM32F750N8HX_FLASH.ld: /* Memories definition */ MEMORY { /*RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 320K FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 64K*/ RAM (xrw) : ORIGIN = 0x20025000, LENGTH = 160K FLASH (rx) : ORIGIN = 0x20000000, LENGTH = 160K } Правда, некоторые вещи ведут себя странно. Например HAL_Delay перестала работать. (в __weak uint32_t HAL_GetTick uwTick не меняется) А как теперь сделать, чтобы можно было в SDRAM, или QSPI отлаживать? Просто замена адресов, как с RAM не работает. Очевидно, вначале должны стартануть процедуры работы с этой памятью, и где-то в теле программы надо сказать какие куски кода куда складывать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 10 февраля, 2022 Опубликовано 10 февраля, 2022 · Жалоба 49 минут назад, eu1cc сказал: А как теперь сделать, чтобы можно было в SDRAM, или QSPI отлаживать? Просто замена адресов, как с RAM не работает. Очевидно, вначале должны стартануть процедуры работы с этой памятью, и где-то в теле программы надо сказать какие куски кода куда складывать? Как в Вашей IDE - не знаю. Но как правило делается так: 1. Сперва (код во внутренней ОЗУ) пишете и отлаживаете процедуру иниализации контроллера SDRAM. 2. В IAR-е переносите процедуру инициализации SDRAM из своего си-файла в .mac-файл. В нём надо создать функцию с соответствующим именем, которую IAR вызывает перед началом загрузки образа прошивки в память МК. 3. Указываете этот .mac-файл в свойствах проекта. Перераспределяете регионы в .icf-файле с использованием пространства SDRAM. Всё. В вашей IDE должны быть аналогичные шаги. Там тоже должна быть возможность выполнения некоего командного скрипта перед началом загрузки образа прошивки. PS: Смысла отлаживать в QSPI-памяти нет никакого, но можно сделать аналогично процедуре с SDRAM. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 29 10 февраля, 2022 Опубликовано 10 февраля, 2022 · Жалоба 2 часа назад, eu1cc сказал: Поменял в STM32F750N8HX_FLASH.ld 1. Это неправильный подход. Посмотрите приложенный скрипт. 2. Ещё не забудьте в стартапе по Reset_Handler загрузить правильное значение указателя стека. Не все отладчики делают это автоматически. На С это как-то так выглядит. Если у вас стартап на асме (что скорее всего), то поколдуйте. void Reset_Handler() { #ifdef __DEBUG_SRAM__ __set_MSP((uint32_t)&_estack); #endif SystemInit(); 3. При отладке из SRAM с тем линкерскриптом, что я приложил, можно/нужно пропустить код копирования инициализированного сегмента данных, он же и так уже в RAM слинкован и загружен. У меня как-то так. В своём стартапе найдите код делающий то же самое. #ifndef __DEBUG_SRAM__ extern uint32_t _sidata[], _sdata[], _edata[]; for (volatile uint32_t *pSrc = _sidata, *pDst = _sdata; pDst != _edata; *pDst ++= *pSrc++) ; #endif 4. Обязательно проверьте какое значение у вас в SCB->VTOR загружается. Прежде чем разрешить какие-нибудь прерывания где-нибудь в SystemInit() надо делать что-то типа extern void(*__vector_table[])(); SCB->VTOR = (uint32_t)&__vector_table; 5. Проверьте, чтобы в стартапе таблица векторов прерываний размещалась в той же секции, что указана в линкерскрипте. Сталкивался, что где-то в CMSIS она .isr_vector, где-то просто .vectors - лучше сразу проверить, а не ловить "интересности". 6. Если будете загружать код для отладки в SDRAM, то внимательно прочитайте сообщение jcxz про инициализацию SDRAM перед загрузкой кода. STM32F750N8_sram.lds Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 29 10 февраля, 2022 Опубликовано 10 февраля, 2022 · Жалоба 1 час назад, jcxz сказал: Смысла отлаживать в QSPI-памяти нет никакого, но можно сделать аналогично процедуре с SDRAM. Для QSPI наверняка готовый FlashLoader есть, тем более для девборда. 2 часа назад, eu1cc сказал: Очевидно, вначале должны стартануть процедуры работы с этой памятью, и где-то в теле программы надо сказать какие куски кода куда складывать? При штатной работе из Flash, самом собой, стартовый код и будет инициализировать SDRAM. Обратите внимание, чтобы SystemInit() вызывался раньше кода инициализации данных - в нём и включите SDRAM. При отладке перед загрузкой данных в SDRAM отладчик может/должен сделать это сам. Тут есть два пути - написать простенький загрузчик, на подобии того как это делается для QSPI, либо скриптами отладчика. Смотря что для вас проще. А куда что складывать делается через линкерскрипт - он для этого и нужен. Добавляете в него регионы памяти, прописываете какие секции в них размещать. Тут, на самом деле, творческий подход нужен, потому что очень многое зависит от задачи, которую вы решаете. В стартапе всё и разложите по местам согласно таблицами инициализации, которые линкер создаст. Рекомендую стартап на C сразу найти/взять, так будет сильно проще. Для нестандартных конфигураций его править надо будет по любому. Ну и разобраться, в конце концов, придётся - это вам не Cortex-M0. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться