查看: 2204|回复: 6

[原创] 【经验分享】RT1010 MCUXPresso ocram flashdriver移植

[复制链接]

该用户从未签到

656

主题

6312

帖子

0

超级版主

Rank: 8Rank: 8

积分
19942
最后登录
2024-4-19
发表于 2021-6-1 14:15:16 | 显示全部楼层 |阅读模式
本帖最后由 小恩GG 于 2021-6-1 14:25 编辑

【经验分享】RT1010MCUXPresso ocram flashdriver移植

一 文档说明

   从我们之前分享的一些文章,如:RT1064flexRAM ITCM为0 IAR debug问题解决基于MCUXpresso的RT1024 FlexRAM重新配置后的debug错误 可以知道,当我们做一些关闭ITCM DTCM的flexRAM配置的APP的时候,可能会出现debug下载不进去的情况,该情况通常是由于我们的IDE 的flashdriver代码所在空间位置所决定。比如flashdriver已经占用了RT的ITCM/DTCM, 这个时候如果芯片需要关闭ITCM/DTCM 会导致调用flashdriver失败。通常我们会采用修改flashdriver所在空间位置到OCRAM的方法去解决。如果目前使用的RT芯片已经有了IDE安装目录下自带的源代码,修改flashdriver代码存放位置会很简单,但是我们知道,通常IDE也不会存放所有的源代码,只会给几个典型的RT源代码,所以本文将以RT1010芯片为例,讲解如何在MCUXPresso IDE现有的flashdriver源代码基础上去移植一个MIMXRT1010-EVK的flashdriver,并且存放到ocram,生成.cfx文件供关闭ITCM/DTCM的APP去使用。

二 flashdriver移植步骤
    获取参考flashdriver RT源文件,打开MCUXpresso IDE安装目录,flashdriver的路径:
C:\nxp\MCUXpressoIDE_11.3.0_5222\ide\Examples\Flashdrivers\NXP\iMXRT
可以看到有RT1020_QSPI以及RT1050的三个驱动源文件,这里我们以iMXRT1020_QSPI.zip为基础,拷贝出来解压移植备用,打开mcuxpresso软件,导入iMXRT1020_QSPI解压后的两个文件iMXRT1020_QSPI以及LPCXFlashDriverLib.
拷贝iMXRT1020_QSPI工程然后粘贴工程重新命名为RT1010的工程,这里为iMXRT1010_QSPI_DOC, 在生成.cfx之前,我们需要先保证这个驱动能够准确的实现RT1010外部QSPI flash芯片的操作,这样才能保证移植的成功。下面进入具体移植步骤。

2.1 文件修改

  由于源代码是基于RT1020芯片,所以我们这里需要把相关芯片的驱动以及头文件等代码都修改为RT1010 SDK的相关代码并删掉对应的RT1020芯片的代码,涉及文件有:
CMSIS, board, drivers, QSPIsource

CMSIS文件夹:fsl_device_registers.h,MIMXRT1011.h, MIMXRT1011_features.h, system_MIMXRT1011.c, system_MIMXRT1011.h
SDK对应文件路径:
SDK_2.9.1_EVK-MIMXRT1010\devices\MIMXRT1011
System_MIMXRT1011.c 中SystemInit,屏蔽ICache以及DCache:
SCB_EnableICache();
SCB_EnableDCache();
原因是代码放到OCRAM,和flexSPI都需要经过interconnect bus fabrics,为了防止冲突产生fault,这里直接关闭cache. 否则debug的时候,会遇到直接进入fault的情况。

Board文件夹:替换所有代码为SDK的代码,peripherals.c以及peripherals.h可以不换因为没有用到。
SDK对应文件路径:
SDK_2.9.1_EVK-MIMXRT1010\boards\evkmimxrt1010\driver_examples\flexspi\nor\polling_transfer
代码board.h需要修改一个点,否则编译报错:
#define BOARD_DEBUG_UART_TYPE     1U

Drivers文件夹:
SDK对应的路径:
SDK_2.9.1_EVK-MIMXRT1010\devices\MIMXRT1011\drivers

QSPIsource文件夹:MIMXRT1010-EVK使用的是AT25SF128,和RT1020的IS25LP064存在大小和使能quad命令的区别,修改点:
Flexspi_QSPI_flash.h
#define FLASH_SIZE 0x4000 /* 128Mb/KByte */
#define DEVICE_SIZE 0x1000000 //16MB//0x800000//8MB
从64Mb(8MB)改为128Mb(16MB).
Flexspi_QSPI_flash.c
        /*Enable Quad mode */
        [4* NOR_CMD_LUT_SEQ_IDX_WRITESTATUSREG] =
           FLEXSPI_LUT_SEQ(kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0x31, kFLEXSPI_Command_WRITE_SDR,kFLEXSPI_1PAD, 0x04),

status_t flexspi_nor_enable_quad_mode(FLEXSPI_Type*base)
{
    flexspi_transfer_t flashXfer;
    status_t status;
   uint32_twriteValue = 0x02;//0x40
}
两款芯片的QE位置不一样,所以需要修改。
其余沿用之前的ARM7的代码。

2.2 工程配置
添加RT1010预编译:CPU_MIMXRT1011CAE4A和CPU_MIMXRT1011CAE4A_cm7

1.jpg
图1
修改Linkscripts文件夹下两个ld文件的SRAM位置,从DTCM 0X20000000改到OCRAM 0X20200000
FlashDriver_Test.ld 供debug测试使用
MEMORY
{
         SRAM(rwx) : ORIGIN = 0x20200000, LENGTH = (64 * 1024) - 32
}
__top_SRAM = 0x20200000 + (64 * 1024) - 32;
FlashDriver_32Kbuffer.ld供最后生成.cfx使用:
SRAM (rwx) : ORIGIN = 0x20200000, LENGTH = (64 *1024)
工程编译选择build版本,等工作之后,再转到生成.cfx的版本,这里需要首先编译LPCXFlashDriverLib的4 Release 和 5 Release_SectorHashing生成Lib供后续使用。

2.jpg
图2

3.jpg
图3
在debug的时候,需要配置debugconfiguration为:

4.jpg
图4
需要添加additional options:--nopacked
直接运行,测试结果如下:

5.jpg
图5

6.jpg
图6
可以看到,完全可以实现外部128Mb flash的擦写操作。
下面新建一个build用于配合Release_SectorHashing库生成实际需要使用的.cfx
Project->properties

7.jpg
图7
添加Release_SectorHashing库路径:

8.jpg
图8

9.jpg
图9
链接文件改为FlashDriver_32Kbuffer.ld
添加build生成.cfx命令:
arm-none-eabi-size "${BuildArtifactFileName}"
mkdir -p ../builds
cp ${BuildArtifactFileBaseName}.axf../builds/${ConfigName}.cfx

10.jpg
图10
编译查看工程builds文件夹:

11.jpg
图11
可以看到,已经生成了我们需要的MIMXRT1010-EVK_AT25SF128.cfx


三 APP准备与测试结果

  准备一个关闭ITCM和DTCM的工程,并且添加我们生成的OCRAM flashdriver驱动生成的MIMXRT1010-EVK_AT25SF128.cfx,具体方法可以查看之前的经验分享:
  在附件的APP样例中,startup_mimxrt1011.c ResetISR,添加了不同配置的flexRAM情况:

  1. #if 1
  2.     //128K OC + 0K ITC + 0K DTC flashloader need modification
  3.     IOMUXC_GPR->GPR17 = 0x55;
  4.     IOMUXC_GPR->GPR16 = (IOMUXC_GPR->GPR16 & (~0x3)) | 0x20000;
  5.     IOMUXC_GPR->GPR14 = 0;
  6. #endif

  7. #if 0
  8.     //64K OC + 0K ITC + 64K DTC flashloader no modification
  9.     IOMUXC_GPR->GPR17 = 0xA5;
  10.     IOMUXC_GPR->GPR16 = (IOMUXC_GPR->GPR16 & (~0x1)) | 0x200006;
  11.     IOMUXC_GPR->GPR14 = IOMUXC_GPR_GPR14_CM7_CFGDTCMSZ(0x7);
  12. #endif
  13. #if 0
  14.     //64K OC + 64K ITC + 0K DTC flashloader need modification
  15.     IOMUXC_GPR->GPR17 = 0xF5;
  16.     IOMUXC_GPR->GPR16 = (IOMUXC_GPR->GPR16 & (~0x2)) | 0x200005;
  17.     IOMUXC_GPR->GPR14 = IOMUXC_GPR_GPR14_CM7_CFGITCMSZ(0x7);
  18. #endif
复制代码

配套的scp也在样例中,用于添加到connectscript中

12.jpg
图12

13.jpg
图13

14.jpg
图14


15.jpg
图15
查看ITCM, DTCM, OCRAM, 会发现,只有OCRAM可以查看数据,ITCM/DTCM均不可查看。

16.jpg
图16

17.jpg
图17

18.jpg
图18

运行起来,板上led小灯可以闪烁。
综上,我们可以看到,新生成的ocram flashdriver .cfx完全可以实现关闭ITCM DTCM的下载,并且功能成功运行。

iMXRT1010_QSPI_AT25SF128A.zip (1.43 MB, 下载次数: 9)
回复

使用道具 举报

  • TA的每日心情
    开心
    2024-3-26 15:16
  • 签到天数: 266 天

    [LV.8]以坛为家I

    3298

    主题

    6545

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    32003
    最后登录
    2024-4-9
    发表于 2021-6-1 14:32:56 | 显示全部楼层
    签到签到
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2023-1-31 09:34
  • 签到天数: 202 天

    [LV.7]常住居民III

    7

    主题

    1515

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    3812
    最后登录
    2024-2-19
    发表于 2021-6-1 14:54:09 | 显示全部楼层
    学习 下 载
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情

    昨天 10:49
  • 签到天数: 557 天

    [LV.9]以坛为家II

    34

    主题

    5913

    帖子

    2

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    5680
    最后登录
    2024-4-19
    发表于 2021-6-2 11:04:39 | 显示全部楼层
    真的好详细,不可多得的好资料
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2024-2-5 12:06
  • 签到天数: 627 天

    [LV.9]以坛为家II

    94

    主题

    1628

    帖子

    2

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    4429

    热心会员

    最后登录
    2024-2-5
    发表于 2021-6-2 20:26:18 来自手机 | 显示全部楼层
    nice
    回复

    使用道具 举报

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

    [LV.10]以坛为家III

    7

    主题

    6195

    帖子

    1

    金牌会员

    Rank: 6Rank: 6

    积分
    10389
    最后登录
    2024-4-19
    发表于 2021-6-8 18:19:02 | 显示全部楼层
    感谢分享!!
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2023-8-30 17:43
  • 签到天数: 306 天

    [LV.8]以坛为家I

    14

    主题

    1746

    帖子

    4

    金牌会员

    Rank: 6Rank: 6

    积分
    2526
    最后登录
    2023-8-30
    发表于 2021-6-8 18:26:34 | 显示全部楼层
    密密麻麻的。不错不错,谢谢分享
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2024-4-20 04:29 , Processed in 0.130313 second(s), 26 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

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