查看: 2052|回复: 0

[原创] 【MIMXRT1060-EVK】 IAR HyperFlash 下载配置

[复制链接]
  • TA的每日心情
    奋斗
    昨天 13:26
  • 签到天数: 853 天

    连续签到: 2 天

    [LV.10]以坛为家III

    69

    主题

    3247

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    10309
    最后登录
    2025-7-17
    发表于 2024-1-16 12:42:27 | 显示全部楼层 |阅读模式
    本帖最后由 andeyqi 于 2024-1-17 11:13 编辑

    从NXP 官方下载的 SDK (SDK_2_14_0_EVK-MIMXRT1060),默认工程的配置是使用QSPI flash启动,手里的板子的FLASH 配置是配置的是HyperFlash的方式启动,对应原理图的选择的是OPTION1。
    qwq.png


    论坛之前有大佬介绍过 如何在MDK环境下修改flash 配置文件及MDK的下载文件完成下载(【MIMXRT1060-EVK】烧写hyperflash芯片出错的处理方法),IAR 环境下没有说明,IAR 环境下默认使用的配置文件也是QSPI ,查看下官方的flash loader配置文件也是支持HyperFlash的下载的,只要简单坐下修改即可。查看IAR 工程默认的flash loader 使用的 $TOOLKIT_DIR$/config/flashloader/NXP/FlashIMXRT1060_EVK_FlexSPI.board
    文件对应内容如下:
    1. <?xml version="1.0" encoding="iso-8859-1"?>
    2. <flash_board>
    3.   <pass>
    4.     <loader>$TOOLKIT_DIR$/config/flashloader/NXP/FlashIMXRT1060_FlexSPI1.flash</loader>
    5.     <range>CODE 0x60000000 0x6FFFFFFF</range>
    6.   </pass>
    7. </flash_board>
    复制代码

    从配置看下载会依赖$TOOLKIT_DIR$/config/flashloader/NXP/FlashIMXRT1060_FlexSPI1.flash 文件,该文件对应内容如下:
    flash.png

    上述截图可知flashloader 支持多种flash 下载算法,flash 下载时可以传递参数给FlashIMXRT1060_FlexSPI.out,从原理图上可以知道板子上的hyperflash 为1.8v 的我们只要给FlashIMXRT1060_FlexSPI.out 传递"--Hyper1V8" 参数即可,添加参数方法如下。
    20240116-134235.gif

    修改该文件配置:
    flash_config.png

    文件内容可以使用如下code 覆盖:

    1. /*
    2. * Copyright 2017-2020 NXP
    3. * All rights reserved.
    4. *
    5. * SPDX-License-Identifier: BSD-3-Clause
    6. */

    7. #include "evkmimxrt1060_flexspi_nor_config.h"

    8. /* Component ID definition, used by tools. */
    9. #ifndef FSL_COMPONENT_ID
    10. #define FSL_COMPONENT_ID "platform.drivers.xip_board"
    11. #endif

    12. /*******************************************************************************
    13. * Code
    14. ******************************************************************************/
    15. #if defined(XIP_BOOT_HEADER_ENABLE) && (XIP_BOOT_HEADER_ENABLE == 1)
    16. #if defined(__CC_ARM) || defined(__ARMCC_VERSION) || defined(__GNUC__)
    17. __attribute__((section(".boot_hdr.conf"), used))
    18. #elif defined(__ICCARM__)
    19. #pragma location = ".boot_hdr.conf"
    20. #endif

    21. const flexspi_nor_config_t
    22.     hyperflash_config =
    23.         {
    24.             .memConfig =
    25.                 {
    26.                     .tag                = FLEXSPI_CFG_BLK_TAG,
    27.                     .version            = FLEXSPI_CFG_BLK_VERSION,
    28.                     .readSampleClkSrc   = kFlexSPIReadSampleClk_ExternalInputFromDqsPad,
    29.                     .csHoldTime         = 3u,
    30.                     .csSetupTime        = 3u,
    31.                     .columnAddressWidth = 3u,
    32.                     // Enable DDR mode, Wordaddassable, Safe configuration, Differential clock
    33.                     .controllerMiscOption =
    34.                         (1u << kFlexSpiMiscOffset_DdrModeEnable) | (1u << kFlexSpiMiscOffset_WordAddressableEnable) |
    35.                         (1u << kFlexSpiMiscOffset_SafeConfigFreqEnable) | (1u << kFlexSpiMiscOffset_DiffClkEnable),
    36.                     .deviceType         = kFlexSpiDeviceType_SerialNOR,
    37.                     .sflashPadType      = kSerialFlash_8Pads,
    38.                     .serialClkFreq      = kFlexSpiSerialClk_133MHz,
    39.                     .lutCustomSeqEnable = 0x1,
    40.                     .sflashA1Size       = 64u * 1024u * 1024u,
    41.                     .dataValidTime      = {15u, 0u},
    42.                     .busyOffset         = 15u,
    43.                     .busyBitPolarity    = 1u,
    44.                     .lookupTable =
    45.                         {
    46.                             // Read LUTs
    47.                             [0] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0xA0, RADDR_DDR, FLEXSPI_8PAD, 0x18),
    48.                             [1] = FLEXSPI_LUT_SEQ(CADDR_DDR, FLEXSPI_8PAD, 0x10, DUMMY_DDR, FLEXSPI_8PAD, 0x0C),
    49.                             [2] = FLEXSPI_LUT_SEQ(READ_DDR, FLEXSPI_8PAD, 0x04, STOP, FLEXSPI_1PAD, 0x0),

    50.                             // Read Status LUTs
    51.                             // 0
    52.                             [4 * 1 + 0] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x0, CMD_DDR, FLEXSPI_8PAD, 0x0),
    53.                             [4 * 1 + 1] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x0, CMD_DDR, FLEXSPI_8PAD, 0xAA),
    54.                             [4 * 1 + 2] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x0, CMD_DDR, FLEXSPI_8PAD, 0x05),
    55.                             [4 * 1 + 3] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x0, CMD_DDR, FLEXSPI_8PAD, 0x70),

    56.                             // 1
    57.                             [4 * 2 + 0] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0xA0, RADDR_DDR, FLEXSPI_8PAD, 0x18),
    58.                             [4 * 2 + 1] =
    59.                                 FLEXSPI_LUT_SEQ(CADDR_DDR, FLEXSPI_8PAD, 0x10, DUMMY_RWDS_DDR, FLEXSPI_8PAD, 0x0B),
    60.                             [4 * 2 + 2] = FLEXSPI_LUT_SEQ(READ_DDR, FLEXSPI_8PAD, 0x4, STOP, FLEXSPI_1PAD, 0x0),

    61.                             // Write Enable LUTs
    62.                             // 0
    63.                             [4 * 3 + 0] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x0, CMD_DDR, FLEXSPI_8PAD, 0x0),
    64.                             [4 * 3 + 1] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x0, CMD_DDR, FLEXSPI_8PAD, 0xAA),
    65.                             [4 * 3 + 2] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x0, CMD_DDR, FLEXSPI_8PAD, 0x05),
    66.                             [4 * 3 + 3] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x0, CMD_DDR, FLEXSPI_8PAD, 0xAA),

    67.                             // 1
    68.                             [4 * 4 + 0] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x0, CMD_DDR, FLEXSPI_8PAD, 0x0),
    69.                             [4 * 4 + 1] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x0, CMD_DDR, FLEXSPI_8PAD, 0x55),
    70.                             [4 * 4 + 2] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x0, CMD_DDR, FLEXSPI_8PAD, 0x02),
    71.                             [4 * 4 + 3] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x0, CMD_DDR, FLEXSPI_8PAD, 0x55),

    72.                             // Erase Sector LUTs
    73.                             // 0
    74.                             [4 * 5 + 0] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x0, CMD_DDR, FLEXSPI_8PAD, 0x0),
    75.                             [4 * 5 + 1] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x0, CMD_DDR, FLEXSPI_8PAD, 0xAA),
    76.                             [4 * 5 + 2] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x0, CMD_DDR, FLEXSPI_8PAD, 0x05),
    77.                             [4 * 5 + 3] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x0, CMD_DDR, FLEXSPI_8PAD, 0x80),

    78.                             // 1
    79.                             [4 * 6 + 0] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x0, CMD_DDR, FLEXSPI_8PAD, 0x0),
    80.                             [4 * 6 + 1] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x0, CMD_DDR, FLEXSPI_8PAD, 0xAA),
    81.                             [4 * 6 + 2] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x0, CMD_DDR, FLEXSPI_8PAD, 0x05),
    82.                             [4 * 6 + 3] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x0, CMD_DDR, FLEXSPI_8PAD, 0xAA),

    83.                             // 2
    84.                             [4 * 7 + 0] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x0, CMD_DDR, FLEXSPI_8PAD, 0x0),
    85.                             [4 * 7 + 1] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x0, CMD_DDR, FLEXSPI_8PAD, 0x55),
    86.                             [4 * 7 + 2] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x0, CMD_DDR, FLEXSPI_8PAD, 0x02),
    87.                             [4 * 7 + 3] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x0, CMD_DDR, FLEXSPI_8PAD, 0x55),

    88.                             // 3
    89.                             [4 * 8 + 0] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x0, RADDR_DDR, FLEXSPI_8PAD, 0x18),
    90.                             [4 * 8 + 1] = FLEXSPI_LUT_SEQ(CADDR_DDR, FLEXSPI_8PAD, 0x10, CMD_DDR, FLEXSPI_8PAD, 0x0),
    91.                             [4 * 8 + 2] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x30, STOP, FLEXSPI_1PAD, 0x0),

    92.                             // Page Program LUTs
    93.                             // 0
    94.                             [4 * 9 + 0] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x0, CMD_DDR, FLEXSPI_8PAD, 0x0),
    95.                             [4 * 9 + 1] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x0, CMD_DDR, FLEXSPI_8PAD, 0xAA),
    96.                             [4 * 9 + 2] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x0, CMD_DDR, FLEXSPI_8PAD, 0x05),
    97.                             [4 * 9 + 3] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x0, CMD_DDR, FLEXSPI_8PAD, 0xA0),

    98.                             // 1
    99.                             [4 * 10 + 0] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x0, RADDR_DDR, FLEXSPI_8PAD, 0x18),
    100.                             [4 * 10 + 1] =
    101.                                 FLEXSPI_LUT_SEQ(CADDR_DDR, FLEXSPI_8PAD, 0x10, WRITE_DDR, FLEXSPI_8PAD, 0x80),

    102.                             // Erase Chip LUTs
    103.                             // 0
    104.                             [4 * 11 + 0] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x0, CMD_DDR, FLEXSPI_8PAD, 0x0),
    105.                             [4 * 11 + 1] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x0, CMD_DDR, FLEXSPI_8PAD, 0xAA),
    106.                             [4 * 11 + 2] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x0, CMD_DDR, FLEXSPI_8PAD, 0x05),
    107.                             [4 * 11 + 3] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x0, CMD_DDR, FLEXSPI_8PAD, 0x80),

    108.                             // 1
    109.                             [4 * 12 + 0] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x0, CMD_DDR, FLEXSPI_8PAD, 0x0),
    110.                             [4 * 12 + 1] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x0, CMD_DDR, FLEXSPI_8PAD, 0xAA),
    111.                             [4 * 12 + 2] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x0, CMD_DDR, FLEXSPI_8PAD, 0x05),
    112.                             [4 * 12 + 3] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x0, CMD_DDR, FLEXSPI_8PAD, 0xAA),

    113.                             // 2
    114.                             [4 * 13 + 0] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x0, CMD_DDR, FLEXSPI_8PAD, 0x0),
    115.                             [4 * 13 + 1] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x0, CMD_DDR, FLEXSPI_8PAD, 0x55),
    116.                             [4 * 13 + 2] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x0, CMD_DDR, FLEXSPI_8PAD, 0x02),
    117.                             [4 * 13 + 3] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x0, CMD_DDR, FLEXSPI_8PAD, 0x55),

    118.                             // 3
    119.                             [4 * 14 + 0] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x0, CMD_DDR, FLEXSPI_8PAD, 0x0),
    120.                             [4 * 14 + 1] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x0, CMD_DDR, FLEXSPI_8PAD, 0xAA),
    121.                             [4 * 14 + 2] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x0, CMD_DDR, FLEXSPI_8PAD, 0x05),
    122.                             [4 * 14 + 3] = FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0x0, CMD_DDR, FLEXSPI_8PAD, 0x10),
    123.                         },
    124.                     // LUT customized sequence
    125.                     .lutCustomSeq = {{
    126.                                          .seqNum   = 0,
    127.                                          .seqId    = 0,
    128.                                          .reserved = 0,
    129.                                      },
    130.                                      {
    131.                                          .seqNum   = 2,
    132.                                          .seqId    = 1,
    133.                                          .reserved = 0,
    134.                                      },
    135.                                      {
    136.                                          .seqNum   = 2,
    137.                                          .seqId    = 3,
    138.                                          .reserved = 0,
    139.                                      },
    140.                                      {
    141.                                          .seqNum   = 4,
    142.                                          .seqId    = 5,
    143.                                          .reserved = 0,
    144.                                      },
    145.                                      {
    146.                                          .seqNum   = 2,
    147.                                          .seqId    = 9,
    148.                                          .reserved = 0,
    149.                                      },
    150.                                      {
    151.                                          .seqNum   = 4,
    152.                                          .seqId    = 11,
    153.                                          .reserved = 0,
    154.                                      }},
    155.                 },
    156.             .pageSize           = 512u,
    157.             .sectorSize         = 256u * 1024u,
    158.             .ipcmdSerialClkFreq = 1u,
    159.             .serialNorType      = 1u,
    160.             .blockSize          = 256u * 1024u,
    161.             .isUniformBlockSize = true,
    162. };
    163. #endif /* XIP_BOOT_HEADER_ENABLE */

    复制代码
    修改以上两点后,IAR环境下就可以下载hyperflash了。

    20240116-124022.gif




    /* 资料分割线 */

    MIMXRT10601064EKBHUG.pdf (1.4 MB, 下载次数: 2)
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-18 08:19 , Processed in 0.083175 second(s), 20 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表