请选择 进入手机版 | 继续访问电脑版
查看: 256|回复: 3

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

  [复制链接]

该用户从未签到

374

主题

5708

帖子

0

金豆

超级版主

Rank: 8Rank: 8

积分
11347
最后登录
2021-6-22
发表于 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, 下载次数: 2)
回复

使用道具 举报

  • TA的每日心情
    开心
    3 小时前
  • 签到天数: 128 天

    [LV.7]常住居民III

    14

    主题

    980

    帖子

    0

    金豆

    金牌会员

    Rank: 6Rank: 6

    积分
    1118
    最后登录
    2021-6-22
    发表于 2021-4-19 08:41:02 | 显示全部楼层
    好厉害,大神啥都知道啊
    要是我,我肯定选不想填写,别问我为啥,懒~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    3 小时前
  • 签到天数: 203 天

    [LV.7]常住居民III

    44

    主题

    1055

    帖子

    0

    金豆

    金牌会员

    Rank: 6Rank: 6

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

    使用道具 举报

  • TA的每日心情
    开心
    6 天前
  • 签到天数: 12 天

    [LV.3]偶尔看看II

    0

    主题

    51

    帖子

    0

    金豆

    注册会员

    Rank: 2

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

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2021-6-22 13:19 , Processed in 0.104562 second(s), 17 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

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