查看: 1954|回复: 3

[原创] 基于MCUXpresso的RT1024 FlexRAM重新配置后的debug错误

  [复制链接]

该用户从未签到

656

主题

6312

帖子

0

超级版主

Rank: 8Rank: 8

积分
20013
最后登录
2024-4-25
发表于 2021-4-16 11:27:51 | 显示全部楼层 |阅读模式
问题背景
在论坛中,已经有几篇介绍FlexRAM重新配置的经验分享了,如基于IAR RT1064 FlexRAM重新配置基于MCUXpresso RT1050 FlexRAM重新配置基于MCUXpresso RT1020 FlexRAM重新配置等,本篇经验分享是由于客户想实现将RT1024中的FlexRAM全部都配置成256 KB的OCRAM,即DTCM与ITCM都为0 KB,客户按照基于MCUXpresso RT1020 FlexRAM重新配置的经验分享来重新配置FlexRAM,并且修改Debug脚本以实现debug功能,但客户在所有的配置和修改完成后,依然无法进入debug?(如图一所示)
7748584-fc9eb3a00ac415d5.png
图一:Debug错误
问题分析
根据图一的错误信息,我们猜测问题应该与RT1064 flexRAM ITCM为0 IAR debug问题解决里碰到的问题类似,MCUXpresso IDE内的Flash driver需要占用DTCM区域(0x20000000~0x2003FFFF),但是ITCM和DTCM在代码工程中ResetISR中断函数中已经被禁止了,具体代码如下。
  1. void ResetISR(void) {

  2.     // Disable interrupts
  3.     __asm volatile ("cpsid i");
  4.     FLEXRAM->TCM_CTRL = 4;
  5.     IOMUXC_GPR->GPR17 = 0x00005555;  //FlexRAM全部配置层OCRAM
  6.     IOMUXC_GPR->GPR16 |= 0x4;
  7.     IOMUXC_GPR->GPR16 &= ~(0x3);  //禁用ITCM,DTCM
  8.     IOMUXC_GPR->GPR14 = ((0<<20) | (0<<16)) ;

  9.     __asm volatile ("MSR MSP, %0" : : "r" (&_vStackTop) : );
  10.     ~~~~~~~
  11.     ~~~~~~~
  12.     ~~~~~~~
  13. }
复制代码
问题解决
针对这类问题,需要我们修改Flash driver,以避开必须占用DTCM区域的限制,而如何生成满足需要的flash driver呢?
痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU硬件那些事(2.6)- 串行NOR Flash下载算法(MCUXpresso IDE篇)中介绍了MCUXpresso IDE的NOR Flash下载算法设计步骤,我们就遵照上述文档介绍的步骤来修改RT1024的Flash driver。
由于在~\MCUXpressoIDE_11.3.0\ide\Examples\Flashdrivers\NXP\iMXRT路径下的Flash driver源码没有RT1024的Flash driver源码,所有我们选择iMXRT1020_QSPI工程作为原型工程。
7748584-97bb3562fd145050.png
图二 iMXRT1020_QSPI工程
RT1024相较于RT1020最大的不同就是,QSPI flash集成在RT1024的封装里面,对外就与内置的Flash一样。
其中对应的FlexSPI模块的连接线如下图所示,所以我们除了需要MemoryDevice连接到OCRAM区域执行外,还需要修改FlexSPI模块引脚的初始化以与图三相符,具体过程如下:
7748584-452719dd76fbfa84.png
图三 FlexSPI模块连接线
  • 修改iMXRT1020_QSPI工程的FlashDriver_32Kbuffer.ld链接文件,具体如下
  1. /*
  2. * Linker script for NXP LPC546xx SPIFI Flash Driver (Messaged)
  3. */

  4. MEMORY
  5. {
  6.       /*SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = (64 * 1024)*/
  7.       SRAM (rwx) : ORIGIN = 0x20200000, LENGTH = (64 * 1024)   /*OCRAM的前64KB区域/*
  8. }

  9. /* stack size :  multiple of 8*/
  10. __stack_size = (4 * 1024);

  11. /* flash image buffer size : multiple of page size*/               
  12. __cache_size = (32 * 1024);         
  13. ~~~~~~~~~~
  14. ~~~~~~~~~~
  15. }
复制代码


  • 修改iMXRT1020_QSPI工程中的pin_mux.c文件内的BOARD_InitPins函数,代码如下:
  1. /* FUNCTION ************************************************************************************************************
  2. *
  3. * Function Name : BOARD_InitPins
  4. * Description   : Configures pin routing and optionally pin electrical features.
  5. *
  6. * END ****************************************************************************************************************/
  7. void BOARD_InitPins(void) {
  8.   CLOCK_EnableClock(kCLOCK_Iomuxc);           /* iomuxc clock (iomuxc_clk_enable): 0x03u */

  9.   IOMUXC_SetPinMux(
  10.       IOMUXC_GPIO_AD_B0_06_LPUART1_TX,        /* GPIO_AD_B0_06 is configured as LPUART1_TX */
  11.       0U);                                    /* Software Input On Field: Input Path is determined by functionality */
  12.   IOMUXC_SetPinMux(
  13.       IOMUXC_GPIO_AD_B0_07_LPUART1_RX,        /* GPIO_AD_B0_07 is configured as LPUART1_RX */
  14.       0U);                                    /* Software Input On Field: Input Path is determined by functionality */
  15.   IOMUXC_SetPinMux(
  16.       IOMUXC_GPIO_SD_B1_05_FLEXSPI_A_DQS,     /* GPIO_SD_B1_05 is configured as FLEXSPI_A_DQS */
  17.       1U);                                    /* Software Input On Field: Force input path of pad GPIO_SD_B1_05 */
  18. //  IOMUXC_SetPinMux(
  19. //      IOMUXC_GPIO_SD_B1_06_FLEXSPI_A_DATA03,  /* GPIO_SD_B1_06 is configured as FLEXSPI_A_DATA03 */
  20. //      1U);                                    /* Software Input On Field: Force input path of pad GPIO_SD_B1_06 */
  21. //  IOMUXC_SetPinMux(
  22. //      IOMUXC_GPIO_SD_B1_07_FLEXSPI_A_SCLK,    /* GPIO_SD_B1_07 is configured as FLEXSPI_A_SCLK */
  23. //      1U);                                    /* Software Input On Field: Force input path of pad GPIO_SD_B1_07 */
  24. //  IOMUXC_SetPinMux(
  25. //      IOMUXC_GPIO_SD_B1_08_FLEXSPI_A_DATA00,  /* GPIO_SD_B1_08 is configured as FLEXSPI_A_DATA00 */
  26. //      1U);                                    /* Software Input On Field: Force input path of pad GPIO_SD_B1_08 */
  27. //  IOMUXC_SetPinMux(
  28. //      IOMUXC_GPIO_SD_B1_09_FLEXSPI_A_DATA02,  /* GPIO_SD_B1_09 is configured as FLEXSPI_A_DATA02 */
  29. //      1U);                                    /* Software Input On Field: Force input path of pad GPIO_SD_B1_09 */
  30. //  IOMUXC_SetPinMux(
  31. //      IOMUXC_GPIO_SD_B1_10_FLEXSPI_A_DATA01,  /* GPIO_SD_B1_10 is configured as FLEXSPI_A_DATA01 */
  32. //      1U);                                    /* Software Input On Field: Force input path of pad GPIO_SD_B1_10 */
  33. //  IOMUXC_SetPinMux(
  34. //      IOMUXC_GPIO_SD_B1_11_FLEXSPI_A_SS0_B,   /* GPIO_SD_B1_11 is configured as FLEXSPI_A_SS0_B */
  35. //      1U);                                    /* Software Input On Field: Force input path of pad GPIO_SD_B1_11 */

  36.   IOMUXC_SetPinMux(
  37.       IOMUXC_GPIO_AD_B1_00_FLEXSPI_A_DATA03,  /* GPIO_AD_B1_00 is configured as FLEXSPI_A_DATA03 */
  38.       1U);                                    /* Software Input On Field: Force input path of pad GPIO_AD_B1_00 */
  39.   IOMUXC_SetPinMux(
  40.      IOMUXC_GPIO_AD_B1_01_FLEXSPI_A_SCLK,    /* GPIO_AD_B1_01 is configured as FLEXSPI_A_SCLK */
  41.       1U);                                    /* Software Input On Field: Force input path of pad GPIO_AD_B1_01 */
  42.   IOMUXC_SetPinMux(
  43.      IOMUXC_GPIO_AD_B1_02_FLEXSPI_A_DATA00,  /* GPIO_AD_B1_02 is configured as FLEXSPI_A_DATA00 */
  44.       1U);                                    /* Software Input On Field: Force input path of pad GPIO_AD_B1_02 */
  45.   IOMUXC_SetPinMux(
  46.      IOMUXC_GPIO_AD_B1_03_FLEXSPI_A_DATA02,  /* GPIO_AD_B1_03 is configured as FLEXSPI_A_DATA02 */
  47.       1U);                                    /* Software Input On Field: Force input path of pad GPIO_AD_B1_03 */
  48.   IOMUXC_SetPinMux(
  49.      IOMUXC_GPIO_AD_B1_04_FLEXSPI_A_DATA01,  /* GPIO_AD_B1_04 is configured as FLEXSPI_A_DATA01 */
  50.       1U);                                    /* Software Input On Field: Force input path of pad GPIO_AD_B1_04 */
  51.   IOMUXC_SetPinMux(
  52.      IOMUXC_GPIO_AD_B1_05_FLEXSPI_A_SS0_B,   /* GPIO_AD_B1_05 is configured as FLEXSPI_A_SS0_B */
  53.       1U);                                    /* Software Input On Field: Force input path of pad GPIO_AD_B1_05 */
  54.   IOMUXC_SetPinConfig(
  55.       IOMUXC_GPIO_AD_B0_06_LPUART1_TX,        /* GPIO_AD_B0_06 PAD functional properties : */
  56.       0x10B0u);                               /* Slew Rate Field: Slow Slew Rate
  57.                                                  Drive Strength Field: R0/6
  58.                                                  Speed Field: medium(100MHz)
  59.                                                  Open Drain Enable Field: Open Drain Disabled
  60.                                                  Pull / Keep Enable Field: Pull/Keeper Enabled
  61.                                                  Pull / Keep Select Field: Keeper
  62.                                                  Pull Up / Down Config. Field: 100K Ohm Pull Down
  63.                                                  Hyst. Enable Field: Hysteresis Disabled */
  64.   IOMUXC_SetPinConfig(
  65.       IOMUXC_GPIO_AD_B0_07_LPUART1_RX,        /* GPIO_AD_B0_07 PAD functional properties : */
  66.       0x10B0u);                               /* Slew Rate Field: Slow Slew Rate
  67.                                                  Drive Strength Field: R0/6
  68.                                                  Speed Field: medium(100MHz)
  69.                                                  Open Drain Enable Field: Open Drain Disabled
  70.                                                  Pull / Keep Enable Field: Pull/Keeper Enabled
  71.                                                  Pull / Keep Select Field: Keeper
  72.                                                  Pull Up / Down Config. Field: 100K Ohm Pull Down
  73.                                                  Hyst. Enable Field: Hysteresis Disabled */
  74.   IOMUXC_SetPinConfig(
  75.       IOMUXC_GPIO_SD_B1_05_FLEXSPI_A_DQS,     /* GPIO_SD_B1_05 PAD functional properties : */
  76.       0x10F1u);                               /* Slew Rate Field: Fast Slew Rate
  77.                                                  Drive Strength Field: R0/6
  78.                                                  Speed Field: max(200MHz)
  79.                                                  Open Drain Enable Field: Open Drain Disabled
  80.                                                  Pull / Keep Enable Field: Pull/Keeper Enabled
  81.                                                  Pull / Keep Select Field: Keeper
  82.                                                  Pull Up / Down Config. Field: 100K Ohm Pull Down
  83.                                                  Hyst. Enable Field: Hysteresis Disabled */
  84.   IOMUXC_SetPinConfig(
  85.       IOMUXC_GPIO_SD_B1_06_FLEXSPI_A_DATA03,  /* GPIO_SD_B1_06 PAD functional properties : */
  86.       0x10F1u);                               /* Slew Rate Field: Fast Slew Rate
  87.                                                  Drive Strength Field: R0/6
  88.                                                  Speed Field: max(200MHz)
  89.                                                  Open Drain Enable Field: Open Drain Disabled
  90.                                                  Pull / Keep Enable Field: Pull/Keeper Enabled
  91.                                                  Pull / Keep Select Field: Keeper
  92.                                                  Pull Up / Down Config. Field: 100K Ohm Pull Down
  93.                                                  Hyst. Enable Field: Hysteresis Disabled */
  94.   IOMUXC_SetPinConfig(
  95.       IOMUXC_GPIO_SD_B1_07_FLEXSPI_A_SCLK,    /* GPIO_SD_B1_07 PAD functional properties : */
  96.       0x10F1u);                               /* Slew Rate Field: Fast Slew Rate
  97.                                                  Drive Strength Field: R0/6
  98.                                                  Speed Field: max(200MHz)
  99.                                                  Open Drain Enable Field: Open Drain Disabled
  100.                                                  Pull / Keep Enable Field: Pull/Keeper Enabled
  101.                                                  Pull / Keep Select Field: Keeper
  102.                                                  Pull Up / Down Config. Field: 100K Ohm Pull Down
  103.                                                  Hyst. Enable Field: Hysteresis Disabled */
  104.   IOMUXC_SetPinConfig(
  105.       IOMUXC_GPIO_SD_B1_08_FLEXSPI_A_DATA00,  /* GPIO_SD_B1_08 PAD functional properties : */
  106.       0x10F1u);                               /* Slew Rate Field: Fast Slew Rate
  107.                                                  Drive Strength Field: R0/6
  108.                                                  Speed Field: max(200MHz)
  109.                                                  Open Drain Enable Field: Open Drain Disabled
  110.                                                  Pull / Keep Enable Field: Pull/Keeper Enabled
  111.                                                  Pull / Keep Select Field: Keeper
  112.                                                  Pull Up / Down Config. Field: 100K Ohm Pull Down
  113.                                                  Hyst. Enable Field: Hysteresis Disabled */
  114.   IOMUXC_SetPinConfig(
  115.       IOMUXC_GPIO_SD_B1_09_FLEXSPI_A_DATA02,  /* GPIO_SD_B1_09 PAD functional properties : */
  116.       0x10F1u);                               /* Slew Rate Field: Fast Slew Rate
  117.                                                  Drive Strength Field: R0/6
  118.                                                  Speed Field: max(200MHz)
  119.                                                  Open Drain Enable Field: Open Drain Disabled
  120.                                                  Pull / Keep Enable Field: Pull/Keeper Enabled
  121.                                                  Pull / Keep Select Field: Keeper
  122.                                                  Pull Up / Down Config. Field: 100K Ohm Pull Down
  123.                                                  Hyst. Enable Field: Hysteresis Disabled */
  124.   IOMUXC_SetPinConfig(
  125.       IOMUXC_GPIO_SD_B1_10_FLEXSPI_A_DATA01,  /* GPIO_SD_B1_10 PAD functional properties : */
  126.       0x10F1u);                               /* Slew Rate Field: Fast Slew Rate
  127.                                                  Drive Strength Field: R0/6
  128.                                                  Speed Field: max(200MHz)
  129.                                                  Open Drain Enable Field: Open Drain Disabled
  130.                                                  Pull / Keep Enable Field: Pull/Keeper Enabled
  131.                                                  Pull / Keep Select Field: Keeper
  132.                                                  Pull Up / Down Config. Field: 100K Ohm Pull Down
  133.                                                  Hyst. Enable Field: Hysteresis Disabled */
  134.   IOMUXC_SetPinConfig(
  135.       IOMUXC_GPIO_SD_B1_11_FLEXSPI_A_SS0_B,   /* GPIO_SD_B1_11 PAD functional properties : */
  136.       0x10F1u);                               /* Slew Rate Field: Fast Slew Rate
  137.                                                  Drive Strength Field: R0/6
  138.                                                  Speed Field: max(200MHz)
  139.                                                  Open Drain Enable Field: Open Drain Disabled
  140.                                                  Pull / Keep Enable Field: Pull/Keeper Enabled
  141.                                                  Pull / Keep Select Field: Keeper
  142.                                                  Pull Up / Down Config. Field: 100K Ohm Pull Down
  143.                                                  Hyst. Enable Field: Hysteresis Disabled */
  144. }
复制代码
  • 完成上述修改后,重新编译iMXRT1020_QSPI工程就可以生成适合RT1024的flash driver文件(cfx文件)
在附件中,测试工程(hello_world工程),还有修改完成了的debug脚本文件与新生成的Flash driver文件,有兴趣的小伙伴不妨一试。
Attachment.zip (545.38 KB, 下载次数: 6)
回复

使用道具 举报

  • TA的每日心情

    6 天前
  • 签到天数: 557 天

    [LV.9]以坛为家II

    34

    主题

    5914

    帖子

    2

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    5697
    最后登录
    2024-4-25
    发表于 2021-4-19 08:41:02 | 显示全部楼层
    好厉害,大神啥都知道啊
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2023-12-25 08:42
  • 签到天数: 391 天

    [LV.9]以坛为家II

    45

    主题

    1337

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    3156
    最后登录
    2024-2-19
    发表于 2021-4-23 13:58:57 | 显示全部楼层
    学习一下
    哎...今天够累的,签到来了~
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2022-3-21 22:25
  • 签到天数: 44 天

    [LV.5]常住居民I

    0

    主题

    110

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    228
    最后登录
    2022-3-21
    发表于 2021-4-28 09:11:11 | 显示全部楼层
    学习一下
    哎...今天够累的,签到来了~
    回复

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2024-4-25 13:41 , Processed in 0.126194 second(s), 23 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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