jenya7 0 2 октября, 2023 Опубликовано 2 октября, 2023 · Жалоба Может есть у кого действующая тех. поддержка в IAR? Нужно задать ребятам вопрос а моя просрочена. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 2 октября, 2023 Опубликовано 2 октября, 2023 · Жалоба 1 minute ago, jenya7 said: Нужно задать ребятам вопрос А Вы пока начните с местных ребят Тут есть серьёзные люди, которые указывали ИАРу, как надо компиляторы делать Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 2 октября, 2023 Опубликовано 2 октября, 2023 (изменено) · Жалоба On 10/2/2023 at 10:45 AM, haker_fox said: А Вы пока начните с местных ребят Тут есть серьёзные люди, которые указывали ИАРу, как надо компиляторы делать Весьма специфический вопрос. Ну чем чёрт не шутит... У меня две платы с процессором MIMXRT1176. На одной плате процессор подключён к nor flash через FlexSpi_1 (адрес 0x30000000), на второй через FlexSpi_2 (адрес 0x60000000). Первой плате подсовываю линкер для FlexSpi_1 (показываю только поля относящиеся к FlexSpi) Quote define symbol m_interrupts_start = 0x30002000; define symbol m_interrupts_end = 0x300023FF; define symbol m_text_start = 0x30002400; define symbol m_text_end = 0x30FBFFFF; define exported symbol m_boot_hdr_conf_start = 0x30000400; define symbol m_boot_hdr_ivt_start = 0x30001000; define symbol m_boot_hdr_boot_data_start = 0x30001020; define symbol m_boot_hdr_dcd_data_start = 0x30001030; define exported symbol core1_image_start = 0x30FC0000; define exported symbol core1_image_end = 0x30FFFFFF И отладка бежит без проблем. Для второй платы изменяю линкер Quote define symbol m_interrupts_start = 0x60002000; define symbol m_interrupts_end = 0x600023FF; define symbol m_text_start = 0x60002400; define symbol m_text_end = 0x60FBFFFF; define exported symbol m_boot_hdr_conf_start = 0x60000400; define symbol m_boot_hdr_ivt_start = 0x60001000; define symbol m_boot_hdr_boot_data_start = 0x60001020; define symbol m_boot_hdr_dcd_data_start = 0x60001030; define exported symbol core1_image_start = 0x60FC0000; define exported symbol core1_image_end = 0x60FFFFFF; И получаю ошибку - The flash loader program reported an error. Очевидно что кроме линкера нужно ещё менять какие то настройки. Вопрос какие. Изменено 2 октября, 2023 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 2 октября, 2023 Опубликовано 2 октября, 2023 · Жалоба Алгоритм прошивки флэшки Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 2 октября, 2023 Опубликовано 2 октября, 2023 · Жалоба On 10/2/2023 at 11:10 AM, VladislavS said: Алгоритм прошивки флэшки файл указанный там не подходит ни под FlexSpi_1 ни под FlexSpi_2 Spoiler /* * Copyright 2019-2021 NXP * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ __var rev; initSysPll2() { __var t; // ANADIG_PLL_PLL_528_CTRL t = __readMemory32(0x40C84240, "Memory"); if (t & 0x800000) { // SysPll2 has been initialized t &= ~0x40000000; __writeMemory32(t, 0x40C84240, "Memory"); return; } t = __readMemory32(0x40C84270, "Memory"); t |= 0x80808080; __writeMemory32(t, 0x40C84270, "Memory"); t = __readMemory32(0x40C84240, "Memory"); t &= ~(0x802000); t |= 0x40000000; __writeMemory32(t, 0x40C84240, "Memory"); // ANADIG_PLL_PLL_528_MFN __writeMemory32(0, 0x40C84280, "Memory"); // ANADIG_PLL_PLL_528_MFI __writeMemory32(22, 0x40C84290, "Memory"); // ANADIG_PLL_PLL_528_MFD __writeMemory32(0x0FFFFFFF, 0x40C842A0, "Memory"); // ANADIG_PLL_PLL_528_CTRL __writeMemory32(0x40000008, 0x40C84240, "Memory"); __delay(30); // ANADIG_PLL_PLL_528_CTRL t = __readMemory32(0x40C84240, "Memory"); t |= 0x800000 | 0x800; __writeMemory32(t, 0x40C84240, "Memory"); __delay(250); t = __readMemory32(0x40C84240, "Memory"); t &= ~0x800; __writeMemory32(t, 0x40C84240, "Memory"); do { t = __readMemory32(0x40C84240, "Memory"); } while ((t & 0x20000000) == 0); t |= 0x2000; __writeMemory32(t, 0x40C84240, "Memory"); t &= ~0x40000000; __writeMemory32(t, 0x40C84240, "Memory"); } initSysPll2Pfd1() { __var t, stable; t = __readMemory32(0x40C84270, "Memory"); if (((t & 0x8000) != 0) || (((t & 0x3F00) >> 8) != 16)) { stable = t & 0x4000; t |= 0x8000; __writeMemory32(t, 0x40C84270, "Memory"); t = __readMemory32(0x40C84270, "Memory"); t &= ~0x3F00; t |= 16 << 8; __writeMemory32(t, 0x40C84270, "Memory"); t = __readMemory32(0x40C84250, "Memory"); t ^= 0x4; __writeMemory32(t, 0x40C84250, "Memory"); t = __readMemory32(0x40C84270, "Memory"); t &= ~0x8000; __writeMemory32(t, 0x40C84270, "Memory"); do { t = __readMemory32(0x40C84270, "Memory") & 0x4000; } while (t == stable); } else { t &= ~0x8000; __writeMemory32(t, 0x40C84270, "Memory"); } } SDRAM_WaitIpCmdDone() { __var reg; do { reg = __readMemory32(0x400D403C, "Memory"); __delay(10); }while((reg & 0x3) == 0); __writeMemory32(0x00000003, 0x400D403C, "Memory"); // clear IPCMDERR and IPCMDDONE bits } setSemcClock() { initSysPll2(); initSysPll2Pfd1(); // Set SEMC root clock to use sys pll2 pfd1 divided by 3: 198Mhz __writeMemory32(0x602, 0x40cc0200, "Memory"); } initSDRAM() { // Config IOMUX __writeMemory32(0x00000000, 0x400E8010, "Memory"); __writeMemory32(0x00000000, 0x400E8014, "Memory"); __writeMemory32(0x00000000, 0x400E8018, "Memory"); __writeMemory32(0x00000000, 0x400E801C, "Memory"); __writeMemory32(0x00000000, 0x400E8020, "Memory"); __writeMemory32(0x00000000, 0x400E8024, "Memory"); __writeMemory32(0x00000000, 0x400E8028, "Memory"); __writeMemory32(0x00000000, 0x400E802C, "Memory"); __writeMemory32(0x00000000, 0x400E8030, "Memory"); __writeMemory32(0x00000000, 0x400E8034, "Memory"); __writeMemory32(0x00000000, 0x400E8038, "Memory"); __writeMemory32(0x00000000, 0x400E803C, "Memory"); __writeMemory32(0x00000000, 0x400E8040, "Memory"); __writeMemory32(0x00000000, 0x400E8044, "Memory"); __writeMemory32(0x00000000, 0x400E8048, "Memory"); __writeMemory32(0x00000000, 0x400E804C, "Memory"); __writeMemory32(0x00000000, 0x400E8050, "Memory"); __writeMemory32(0x00000000, 0x400E8054, "Memory"); __writeMemory32(0x00000000, 0x400E8058, "Memory"); __writeMemory32(0x00000000, 0x400E805C, "Memory"); __writeMemory32(0x00000000, 0x400E8060, "Memory"); __writeMemory32(0x00000000, 0x400E8064, "Memory"); __writeMemory32(0x00000000, 0x400E8068, "Memory"); __writeMemory32(0x00000000, 0x400E806C, "Memory"); __writeMemory32(0x00000000, 0x400E8070, "Memory"); __writeMemory32(0x00000000, 0x400E8074, "Memory"); __writeMemory32(0x00000000, 0x400E8078, "Memory"); __writeMemory32(0x00000000, 0x400E807C, "Memory"); __writeMemory32(0x00000000, 0x400E8080, "Memory"); __writeMemory32(0x00000000, 0x400E8084, "Memory"); __writeMemory32(0x00000000, 0x400E8088, "Memory"); __writeMemory32(0x00000000, 0x400E808C, "Memory"); __writeMemory32(0x00000000, 0x400E8090, "Memory"); __writeMemory32(0x00000000, 0x400E8094, "Memory"); __writeMemory32(0x00000000, 0x400E8098, "Memory"); __writeMemory32(0x00000000, 0x400E809C, "Memory"); __writeMemory32(0x00000000, 0x400E80A0, "Memory"); __writeMemory32(0x00000000, 0x400E80A4, "Memory"); __writeMemory32(0x00000000, 0x400E80A8, "Memory"); __writeMemory32(0x00000010, 0x400E80AC, "Memory"); // EMC_39, DQS PIN, enable SION __writeMemory32(0x00000000, 0x400E80B8, "Memory"); __writeMemory32(0x00000000, 0x400E80BC, "Memory"); __writeMemory32(0x00000000, 0x400E80C0, "Memory"); __writeMemory32(0x00000000, 0x400E80C4, "Memory"); __writeMemory32(0x00000000, 0x400E80C8, "Memory"); __writeMemory32(0x00000000, 0x400E80CC, "Memory"); __writeMemory32(0x00000000, 0x400E80D0, "Memory"); __writeMemory32(0x00000000, 0x400E80D4, "Memory"); __writeMemory32(0x00000000, 0x400E80D8, "Memory"); __writeMemory32(0x00000000, 0x400E80DC, "Memory"); __writeMemory32(0x00000000, 0x400E80E0, "Memory"); __writeMemory32(0x00000000, 0x400E80E4, "Memory"); __writeMemory32(0x00000000, 0x400E80E8, "Memory"); __writeMemory32(0x00000000, 0x400E80EC, "Memory"); __writeMemory32(0x00000000, 0x400E80F0, "Memory"); __writeMemory32(0x00000000, 0x400E80F4, "Memory"); __writeMemory32(0x00000000, 0x400E80F8, "Memory"); __writeMemory32(0x00000000, 0x400E80FC, "Memory"); // PAD ctrl // PDRV = 1b (normal); PULL = 10b (PD) __writeMemory32(0x00000008, 0x400E8254, "Memory"); __writeMemory32(0x00000008, 0x400E8258, "Memory"); __writeMemory32(0x00000008, 0x400E825C, "Memory"); __writeMemory32(0x00000008, 0x400E8260, "Memory"); __writeMemory32(0x00000008, 0x400E8264, "Memory"); __writeMemory32(0x00000008, 0x400E8268, "Memory"); __writeMemory32(0x00000008, 0x400E826C, "Memory"); __writeMemory32(0x00000008, 0x400E8270, "Memory"); __writeMemory32(0x00000008, 0x400E8274, "Memory"); __writeMemory32(0x00000008, 0x400E8278, "Memory"); __writeMemory32(0x00000008, 0x400E827C, "Memory"); __writeMemory32(0x00000008, 0x400E8280, "Memory"); __writeMemory32(0x00000008, 0x400E8284, "Memory"); __writeMemory32(0x00000008, 0x400E8288, "Memory"); __writeMemory32(0x00000008, 0x400E828C, "Memory"); __writeMemory32(0x00000008, 0x400E8290, "Memory"); __writeMemory32(0x00000008, 0x400E8294, "Memory"); __writeMemory32(0x00000008, 0x400E8298, "Memory"); __writeMemory32(0x00000008, 0x400E829C, "Memory"); __writeMemory32(0x00000008, 0x400E82A0, "Memory"); __writeMemory32(0x00000008, 0x400E82A4, "Memory"); __writeMemory32(0x00000008, 0x400E82A8, "Memory"); __writeMemory32(0x00000008, 0x400E82AC, "Memory"); __writeMemory32(0x00000008, 0x400E82B0, "Memory"); __writeMemory32(0x00000008, 0x400E82B4, "Memory"); __writeMemory32(0x00000008, 0x400E82B8, "Memory"); __writeMemory32(0x00000008, 0x400E82BC, "Memory"); __writeMemory32(0x00000008, 0x400E82C0, "Memory"); __writeMemory32(0x00000008, 0x400E82C4, "Memory"); __writeMemory32(0x00000008, 0x400E82C8, "Memory"); __writeMemory32(0x00000008, 0x400E82CC, "Memory"); __writeMemory32(0x00000008, 0x400E82D0, "Memory"); __writeMemory32(0x00000008, 0x400E82D4, "Memory"); __writeMemory32(0x00000008, 0x400E82D8, "Memory"); __writeMemory32(0x00000008, 0x400E82DC, "Memory"); __writeMemory32(0x00000008, 0x400E82E0, "Memory"); __writeMemory32(0x00000008, 0x400E82E4, "Memory"); __writeMemory32(0x00000008, 0x400E82E8, "Memory"); __writeMemory32(0x00000008, 0x400E82EC, "Memory"); __writeMemory32(0x00000008, 0x400E82F0, "Memory"); __writeMemory32(0x00000008, 0x400E82FC, "Memory"); __writeMemory32(0x00000008, 0x400E8300, "Memory"); __writeMemory32(0x00000008, 0x400E8304, "Memory"); __writeMemory32(0x00000008, 0x400E8308, "Memory"); __writeMemory32(0x00000008, 0x400E830C, "Memory"); __writeMemory32(0x00000008, 0x400E8310, "Memory"); __writeMemory32(0x00000008, 0x400E8314, "Memory"); __writeMemory32(0x00000008, 0x400E8318, "Memory"); __writeMemory32(0x00000008, 0x400E831C, "Memory"); __writeMemory32(0x00000008, 0x400E8320, "Memory"); __writeMemory32(0x00000008, 0x400E8324, "Memory"); __writeMemory32(0x00000008, 0x400E8328, "Memory"); __writeMemory32(0x00000008, 0x400E832C, "Memory"); __writeMemory32(0x00000008, 0x400E8330, "Memory"); __writeMemory32(0x00000008, 0x400E8334, "Memory"); __writeMemory32(0x00000008, 0x400E8338, "Memory"); __writeMemory32(0x00000008, 0x400E833C, "Memory"); __writeMemory32(0x00000008, 0x400E8340, "Memory"); // Config SDR Controller Registers/ __writeMemory32(0x10000004, 0x400d4000, "Memory"); // MCR __writeMemory32(0x00000081, 0x400d4008, "Memory"); // BMCR0 __writeMemory32(0x00000081, 0x400d400C, "Memory"); // BMCR1 __writeMemory32(0x8000001D, 0x400d4010, "Memory"); // BR0, 64MB __writeMemory32(0x00000F32, 0x400d4040, "Memory"); // SDRAMCR0, 32bit __writeMemory32(0x00772A22, 0x400d4044, "Memory"); // SDRAMCR1 __writeMemory32(0x00010A0D, 0x400d4048, "Memory"); // SDRAMCR2 __writeMemory32(0x21210408, 0x400d404C, "Memory"); // SDRAMCR3 __writeMemory32(0x80000000, 0x400d4090, "Memory"); // IPCR0 __writeMemory32(0x00000002, 0x400d4094, "Memory"); // IPCR1 __writeMemory32(0x00000000, 0x400d4098, "Memory"); // IPCR2 __writeMemory32(0xA55A000F, 0x400d409C, "Memory"); // IPCMD, SD_CC_IPREA SDRAM_WaitIpCmdDone(); __writeMemory32(0xA55A000C, 0x400d409C, "Memory"); // SD_CC_IAF SDRAM_WaitIpCmdDone(); __writeMemory32(0xA55A000C, 0x400d409C, "Memory"); // SD_CC_IAF SDRAM_WaitIpCmdDone(); __writeMemory32(0x00000033, 0x400d40A0, "Memory"); // IPTXDAT __writeMemory32(0xA55A000A, 0x400d409C, "Memory"); // SD_CC_IMS SDRAM_WaitIpCmdDone(); __writeMemory32(0x00000017, 0x400d4150, "Memory"); // DCCR __writeMemory32(0x21210409, 0x400d404C, "Memory"); // enable sdram self refresh after initialization done. __message "SDRAM init done"; } restoreFlexRAM() { __var base; __var value; base = 0x400E4000; value = __readMemory32(base + 0x44, "Memory"); value &= ~(0xFFFF); value |= 0xFFAA; __writeMemory32(value, base + 0x44, "Memory"); value = __readMemory32(base + 0x48, "Memory"); value &= ~(0xFFFF); value |= 0xFFAA; __writeMemory32(value, base + 0x48, "Memory"); value = __readMemory32(base + 0x40, "Memory"); value &= ~(0xFF << 8); value |= 0x7 | (0xaa << 8); __writeMemory32(value, base + 0x40, "Memory"); __message "FlexRAM configuration is restored"; } execUserPreload() { restoreFlexRAM(); setSemcClock(); initSDRAM(); } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 2 октября, 2023 Опубликовано 2 октября, 2023 · Жалоба Ну так берём и правим под себя. За вас этого никто не сделает. В папке с доками у IAR есть файлик FlashLoaderGuide.ENU.pdf - там всё подробно расписано. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 2 октября, 2023 Опубликовано 2 октября, 2023 · Жалоба On 10/2/2023 at 11:20 AM, VladislavS said: Ну так берём и правим под себя. За вас этого никто не сделает. извиняюсь. ошибся. там указан файл - FlashIMXRT1170_FlexSPI.board <?xml version="1.0" encoding="iso-8859-1"?> <flash_board> <pass> <loader>$TOOLKIT_DIR$\config\flashloader\NXP\FlashIMXRT1170_FlexSPI1.flash</loader> <range>CODE 0x30000000 0x3FFFFFFF</range> </pass> <pass> <loader>$TOOLKIT_DIR$\config\flashloader\NXP\FlashIMXRT1170_FlexSPI2.flash</loader> <range>CODE 0x60000000 0x6F7FFFFF</range> </pass> </flash_board> и не понятно какой из двух он выбирает и на основании чего. а тот файл который я указал - это mac файл, скрипт для J-LINK как я понимаю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 2 октября, 2023 Опубликовано 2 октября, 2023 · Жалоба раз у вас флэшка на SPI1 работает, то алгоритм прошивки для неё есть. Вам надо перенастроить в .board адреса и в .mac инциализацию на SPI2. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 2 октября, 2023 Опубликовано 2 октября, 2023 · Жалоба On 10/2/2023 at 11:32 AM, VladislavS said: раз у вас флэшка на SPI1 работает, то алгоритм прошивки для неё есть. Вам надо перенастроить в .board адреса и в .mac инциализацию на SPI2. я не могу понять откуда он тянет mac. ни тот который в папке проекта ни системный не настраивают пины FlexSPI. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 2 октября, 2023 Опубликовано 2 октября, 2023 · Жалоба В файл FlashIMXRT1170_FlexSPI2.flash загляните Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 2 октября, 2023 Опубликовано 2 октября, 2023 · Жалоба On 10/2/2023 at 11:50 AM, VladislavS said: В файл FlashIMXRT1170_FlexSPI2.flash загляните <?xml version="1.0" encoding="iso-8859-1"?> <flash_device> <exe>$TOOLKIT_DIR$\config\flashloader\NXP\FlashIMXRT1170_FlexSPI.out</exe> <page>256</page> <block>1 0x0F800000</block> <flash_base>0x60000000</flash_base> <macro>$TOOLKIT_DIR$\config\flashloader\NXP\FlashIMXRT1170_FlexSPI.mac</macro> <aggregate>1</aggregate> <args_doc>To specify the connected memory use the flash loader with one of the following args: "--Qspi" - QuadSPI NOR - Quad SDR Read (same if no arg is used) "--QspiDDR" - QuadSPI NOR - Quad DDR Read "--Hyper1V8" - HyperFLASH 1V8 "--Hyper3V0" - HyperFLASH 3V0 "--MxicOpiDDR"- MXIC OPI DDR (OPI DDR enabled by default) "--McrnOct" - Micron Octal DDR "--McrnOpi" - Micron OPI DDR "--McrnOpiDDR"- Micron OPI DDR (DDR read enabled by default): "--AdstOpi" - Adesto OPI DDR "--Opt0 0x..."- set Option0 hex value "--Opt1 0x..."- set Option1 hex value For more info refer to IMXRT1170 ROM API specification</args_doc> </flash_device> не пойму как указать ему чтоб взял FlashIMXRT1170_FlexSPI2.flash. кроме того FlashIMXRT1170_FlexSPI.mac - совсем не про FlexSPI_2 _disableM4Cache() { __writeMemory32(0x00000000,0xE0082000,"Memory"); __writeMemory32(0x00000000,0xE0082800,"Memory"); } _disableM7Cache() { __var tmp; tmp = __readMemory32(0xE000ED14,"Memory") & ~(3<<16); __writeMemory32(tmp,0xE000ED14,"Memory"); } execUserFlashInit() // Called by debugger before loading flash loader in RAM. { __var tmp; __var cpu; cpu = __readMemory32(0xE000ED00,"Memory")>>4; cpu &= 0xFFF; /*Make sure both cores are stopped*/ tmp = __readMemory32(0x40c04000,"Memory"); // if(tmp & 0x2) { _haltM7Core(); } if(tmp & 0x1) { _haltM4Core(); } if(0xC24 == cpu) { _disableM4Cache(); } else { _disableM7Cache(); } } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 2 октября, 2023 Опубликовано 2 октября, 2023 · Жалоба Кстати, в "arm\src\flashloader\NXP\FlashIMXRT1170_FlexSPI" лежат исходники FlashLoader-а. Можете посмотреть до последней команды что он делает. 2 минуты назад, jenya7 сказал: не пойму как указать ему чтоб взял FlashIMXRT1170_FlexSPI2.flash У вас же в .board написано, что для адресов 0x60000000+ его использовать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться