MasterElectric 0 9 февраля, 2020 Опубликовано 9 февраля, 2020 (изменено) · Жалоба Я извиняюсь что пишу тут. Локализовал свою проблему и встал вопрос как написать свой лоадер для внешней QSPI памяти под J-Link? Где брать исходники для правки тех что предоставлены производителем. Ну или как объяснить ему что у меня есть только Flash 2 (BK2). При загрузке J-Link использует программу ST_STM32H753_Eval_QSPI.elf Изменено 9 февраля, 2020 пользователем MasterElectric Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 9 февраля, 2020 Опубликовано 9 февраля, 2020 · Жалоба 12 минут назад, MasterElectric сказал: Локализовал свою проблему и встал вопрос как написать свой лоадер для внешней QSPI памяти под J-Link? Глянь ТУТ. 1 час назад, MementoMori сказал: RCC->AHB3ENR |= 0x00000002; Либо начни с чего-нибудь попроще, либо напиши правильную инициализацию полностью. Есть вероятность, что доступ к недоинициализированной памяти может HardFault делать. А IDE, перед стиранием может проверять что там записано. Или пустышку на функцию BlanckCheck добавь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MasterElectric 0 9 февраля, 2020 Опубликовано 9 февраля, 2020 · Жалоба VladislavSСпасибо то что надо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 9 февраля, 2020 Опубликовано 9 февраля, 2020 · Жалоба 3 минуты назад, MasterElectric сказал: Спасибо то что надо Похоже, всё один в один с Keil. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 60 9 февраля, 2020 Опубликовано 9 февраля, 2020 · Жалоба 21 minutes ago, VladislavS said: Похоже, всё один в один с Keil. Жаль описание для debug режима нет. Но ссылка крайне полезная. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 9 февраля, 2020 Опубликовано 9 февраля, 2020 · Жалоба 42 минуты назад, x893 сказал: Жаль описание для debug режима нет Глянь ещё "c:\Program Files (x86)\SEGGER\JLink_V640\Doc\Manuals" - там три достаточно объёмных документа, что-нибудь найдёшь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MasterElectric 0 10 февраля, 2020 Опубликовано 10 февраля, 2020 (изменено) · Жалоба Не пойму до конца в чем проблема. В Segger Embedded Studio открыл проект, плюс к тем что в вики нашел еще на гите. Переделал под себя, в дебаг конфигурации все работает нормально, в каждой из функций сделал ногодрыг. Далее все по инструкции, но судя по логу J-Flash не может запустить код из ОЗУ - ERROR: Failed to initialize RAMCode это лог: - J-Link found 1 JTAG device. Core ID: 0x6BA02477 (None) - Connected successfully Erasing selected sectors ... - 4096 of 4096 sectors selected, 1 range, 0x90000000 - 0x90FFFFFF - Start of determining flash info (Bank 0 @ 0x90000000) - End of determining flash info - Flash bank info: - 4096 * 4 KB @ 0x90000000 - Start of preparing flash programming - End of preparing flash programming - Start of determining dirty areas in flash cache - End of determining dirty areas - CPU speed could not be measured. - Start of erasing sectors - ERROR: Timeout while preparing target, core does not stop. (PC = 0x080201B2, XPSR = 0x01000003, SP = 0x000008E0)! - ERROR: Failed to initialize RAMCode - Erasing range 0x90000000 - 0x9001FFFF ( 32 Sectors, 128 KB) - ERROR: Timeout while erasing sectors, core does not stop. (PC = 0x000004EE, XPSR = 0x41000003, SP = 0x00000928)! - ERROR: Failed to erase sectors. - End of erasing sectors - ERROR: Erase failed - Start of restoring - End of restoring - ERROR: Failed to erase sectors Disconnecting ... - Disconnected Куда копать дальше, у меня идей пока нет. Блин попробую еще под st-link сделать. Изменено 10 февраля, 2020 пользователем MasterElectric Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 10 февраля, 2020 Опубликовано 10 февраля, 2020 · Жалоба Проверить, что скомпилировано в Position Independent Code и где в J-Flash указывается с какого адреса загружать алгоритм. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MasterElectric 0 10 февраля, 2020 Опубликовано 10 февраля, 2020 (изменено) · Жалоба Да действительно не были указаны параметры ОЗУ, странно в JLinkDevices.xml взял такой же МК скопировал и переделал только путь к внешнему загрузчику. Как же он узнает параметры ОЗУ у него? <Device> <ChipInfo Vendor="ST" Name="STM32H750VB" Core="JLINK_CORE_CORTEX_M7" JLinkScriptFile="Devices/ST/STM32H7/ST_STM32H7xx.pex"/> <FlashBankInfo Name="QSPI Flash" BaseAddr="0x90000000" MaxSize="0x08000000" Loader="Devices/ST/STM32H7/ST_STM32H745I_Disco_QSPI.elf" LoaderType="FLASH_ALGO_TYPE_OPEN" /> </Device> <Device> <ChipInfo Vendor="ST" Name="STM32H750VB_QSPI_BK2" Core="JLINK_CORE_CORTEX_M7" WorkRAMAddr="0x24000000" WorkRAMSize="0x8000" JLinkScriptFile="Devices/ST/STM32H7/ST_STM32H7xx.pex"/> <FlashBankInfo Name="QSPI Flash" BaseAddr="0x90000000" MaxSize="0x08000000" Loader="Devices/ST/STM32H7/ST_STM32H7_QSPI.elf" LoaderType="FLASH_ALGO_TYPE_OPEN" /> </Device> Добавил WorkRAMAddr="0x24000000" WorkRAMSize="0x8000" и начало все работать, но это из J-Flash. Как себя поведет из CubeIDE буду смотреть ну и еще отладить нужно работу с самой QSPI флешкой. VladislavS спасибо за помощь. Изменено 10 февраля, 2020 пользователем MasterElectric Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 10 февраля, 2020 Опубликовано 10 февраля, 2020 · Жалоба 29 минут назад, MasterElectric сказал: Как же он узнает параметры ОЗУ у него? Там *.elf указан в качестве лоадера. В elf есть вся атрибутика для загрузки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MementoMori 4 13 февраля, 2020 Опубликовано 13 февраля, 2020 · Жалоба Да!!!!!!!!!!!!! Надеюсь, уважаемый Forger не переел попкорна?)) Отдельное спасибо Владиславу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
pvo125 0 18 февраля, 2020 Опубликовано 18 февраля, 2020 (изменено) · Жалоба Почему при включении тактирования qspi у Вас висло все? Решили эту проблему? Изменено 18 февраля, 2020 пользователем pvo125 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 18 февраля, 2020 Опубликовано 18 февраля, 2020 · Жалоба 23 минуты назад, pvo125 сказал: Почему при включении тактирования qspi у Вас висло все? Решили эту проблему? Потому что память на QSPI отображается на общее адресное пространство и IDE лазила в неё в обход функций BlankCheck и Verify. А так как режимы были недоконфигурированы, то это заканчивалось HardFault-ми. Подробности Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MementoMori 4 18 февраля, 2020 Опубликовано 18 февраля, 2020 · Жалоба 39 minutes ago, pvo125 said: Почему при включении тактирования qspi у Вас висло все? Решили эту проблему? Да, полностью решил, все работает. На самом деле термин "висло", как оказалось, не совсем правильный. В двух словах ответить вам не получится. Не знаю, насколько глубоко Вы разобрались в написании алгоритма, но попробую разжевать. IDE (то есть KEIL) в первую очередь вызывает функцию Init. Поставьте в конце этой функции какой-нибудь маячок - зажигание светодиода или, что я настоятельно рекомендую не полениться и сделать, настройте UART на отправку отладочных сообщений. Уверен, что маячок этот, будучи выставлен в конце init сработает даже при включенном тактировании QSPI, которое, как вам кажется, вешает контроллер. Следующий шаг, которые делает IDE - пытается стереть сектор. Перед стиранием она вызывает функцию BlankCheck, которая сверяет содержимое памяти с образцом (как правило затирание осуществляется не нулями, а 0xFF) и за зря не стирает ячейку, не расходует ее ресурс. Если функция BlankCheck в тексте алгоритма есть, то IDE ею пользуется. Если нет, то общается с памятью как с единым адресным пространством. А чтобы это было возможно, QSPI нужно не только проинициализировать, но и включить Memory Mapped Mode. Резюме - посмотрите, есть ли у вас функция BlankCheck. Если нет, то создайте ее, но пустую, чтобы всегда возвращала 0. То же самое и с EraseSector. И поставьте в функциях маячки. А потом расскажите, все ли они сработали. Потом будем разбираться с вашей проблемой дальше. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 60 18 февраля, 2020 Опубликовано 18 февраля, 2020 · Жалоба Пусть эксплуататоры премию дают за такой каторжный труд. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться