Перейти к содержанию
    

Действующая тех. поддержка.

Может есть у кого действующая тех. поддержка в IAR? Нужно задать ребятам вопрос а моя просрочена.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 minute ago, jenya7 said:

Нужно задать ребятам вопрос

А Вы пока начните с местных ребят:angel: Тут есть серьёзные люди, которые указывали ИАРу, как надо компиляторы делать:blum:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 10/2/2023 at 10:45 AM, haker_fox said:

А Вы пока начните с местных ребят:angel: Тут есть серьёзные люди, которые указывали ИАРу, как надо компиляторы делать:blum:

Весьма специфический вопрос. Ну чем чёрт не шутит...

У меня две платы с процессором 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.

Очевидно что кроме линкера нужно ещё менять какие то настройки. Вопрос какие. 

Изменено пользователем jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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();
}

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну так берём и правим под себя. За вас этого никто не сделает.

 

В папке с доками у IAR есть файлик FlashLoaderGuide.ENU.pdf - там всё подробно расписано.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 как я понимаю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

раз у вас флэшка на SPI1 работает, то алгоритм прошивки для неё есть. Вам надо перенастроить в .board адреса и в .mac инциализацию на SPI2.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 10/2/2023 at 11:32 AM, VladislavS said:

раз у вас флэшка на SPI1 работает, то алгоритм прошивки для неё есть. Вам надо перенастроить в .board адреса и в .mac инциализацию на SPI2.

я не могу понять откуда он тянет mac. ни тот который в папке проекта ни системный не настраивают пины FlexSPI.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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();
  }
}

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кстати, в "arm\src\flashloader\NXP\FlashIMXRT1170_FlexSPI" лежат исходники FlashLoader-а. Можете посмотреть до последней команды что он делает.

2 минуты назад, jenya7 сказал:

не пойму как указать ему чтоб взял FlashIMXRT1170_FlexSPI2.flash

У вас же в .board написано, что для адресов 0x60000000+ его использовать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...