Skip to content

[bsp][nxp] support qspi flash and filesystem for imxrt1180-evk board#11486

Open
CoreBoxer wants to merge 3 commits into
RT-Thread:masterfrom
CoreBoxer:imxrt1180_evk_flash_support
Open

[bsp][nxp] support qspi flash and filesystem for imxrt1180-evk board#11486
CoreBoxer wants to merge 3 commits into
RT-Thread:masterfrom
CoreBoxer:imxrt1180_evk_flash_support

Conversation

@CoreBoxer

@CoreBoxer CoreBoxer commented Jun 15, 2026

Copy link
Copy Markdown
Contributor

拉取/合并请求描述:(PR description)

[

为什么提交这份PR (why to submit this PR)

support qspi flash driver and filesystem (LittleFS) for imxrt1180-evk board

你的解决方案是什么 (what is your solution)

  1. adapt current driver 'drv_flexspi.c/.h flexspi_port.h' to support qspi flash on imxrt1180-evk board
  2. add new flash driver 'drv_flexspi_nor_flash.c/.h', modify 'link.scf' to avoid XIP RWW problems
  3. add FAL adapt files 'fal_flash_port.c fal_cfg.h mnt.c'

请提供验证的bsp和config (provide the config and bsp)

  • BSP:
    bsp\nxp\imx\imxrt\imxrt1180-nxp-evk\cm33
    bsp\nxp\imx\imxrt\imxrt1180-nxp-evk\cm33\packages\nxp-imxrt-sdk-latest\MIMXRT1180\SConscript
    bsp\nxp\imx\imxrt\libraries\drivers
  • .config:
    CONFIG_BSP_USING_FLEXSPI=y
    BSP_USING_FLEXSPI1=y
    RT_USING_FAL=y
    FAL_PART_HAS_TABLE_CFG=y
    RT_USING_MTD_NOR=y
    PKG_USING_LITTLEFS=y
  • action:
    not defined it yet.
    ]

当前拉取/合并请求的状态 Intent for your PR

必须选择一项 Choose one (Mandatory):

  • 本拉取/合并请求是一个草稿版本 This PR is for a code-review and is intended to get feedback
  • 本拉取/合并请求是一个成熟版本 This PR is mature, and ready to be integrated into the repo

代码质量 Code Quality:

我在这个拉取/合并请求中已经考虑了 As part of this pull request, I've considered the following:

  • 已经仔细查看过代码改动的对比 Already check the difference between PR and old code
  • 代码风格正确,包括缩进空格,命名及其他风格 Style guide is adhered to, including spacing, naming and other styles
  • 没有垃圾代码,代码尽量精简,不包含#if 0代码,不包含已经被注释了的代码 All redundant code is removed and cleaned up
  • 所有变更均有原因及合理的,并且不会影响到其他软件组件代码或BSP All modifications are justified and not affect other components or BSP
  • 对难懂代码均提供对应的注释 I've commented appropriately where code is tricky
  • 代码是高质量的 Code in this PR is of high quality
  • 已经使用formatting 等源码格式化工具确保格式符合RT-Thread代码规范 This PR complies with RT-Thread code specification
  • 如果是新增bsp, 已经添加ci检查到.github/ALL_BSP_COMPILE.json 详细请参考链接BSP自查

@CoreBoxer CoreBoxer requested a review from Rbb666 as a code owner June 15, 2026 02:49
@github-actions

Copy link
Copy Markdown

👋 感谢您对 RT-Thread 的贡献!Thank you for your contribution to RT-Thread!

为确保代码符合 RT-Thread 的编码规范,请在你的仓库中执行以下步骤运行代码格式化工作流(如果格式化CI运行失败)。
To ensure your code complies with RT-Thread's coding style, please run the code formatting workflow by following the steps below (If the formatting of CI fails to run).


🛠 操作步骤 | Steps

  1. 前往 Actions 页面 | Go to the Actions page
    点击进入工作流 → | Click to open workflow →

  2. 点击 Run workflow | Click Run workflow

  • 设置需排除的文件/目录(目录请以"/"结尾)
    Set files/directories to exclude (directories should end with "/")
  • 将目标分支设置为 \ Set the target branch to:imxrt1180_evk_flash_support
  • 设置PR number为 \ Set the PR number to:11486
  1. 等待工作流完成 | Wait for the workflow to complete
    格式化后的代码将自动推送至你的分支。
    The formatted code will be automatically pushed to your branch.

完成后,提交将自动更新至 imxrt1180_evk_flash_support 分支,关联的 Pull Request 也会同步更新。
Once completed, commits will be pushed to the imxrt1180_evk_flash_support branch automatically, and the related Pull Request will be updated.

如有问题欢迎联系我们,再次感谢您的贡献!💐
If you have any questions, feel free to reach out. Thanks again for your contribution!

@github-actions github-actions Bot added BSP: NXP Code related with NXP BSP labels Jun 15, 2026
@nxp-ran

nxp-ran commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

Hi @CoreBoxer ,
我这边测试时,发现keil编译报错:
packages/littlefs-v2.11.2/dfs_lfs.c(938): error: incompatible function pointer types initializing 'off_t (*)(struct dfs_file , off_t)' (aka 'long ()(struct dfs_file *, long)') with an expression of type 'off_t (struct dfs_file *, rt_off_t)' (aka 'long (struct dfs_file *, int)') [-Wincompatible-function-pointer-types]

请问是否这边和littlefs的版本有关?或者还有哪个config没有配置?

@Rbb666

Rbb666 commented Jun 17, 2026

Copy link
Copy Markdown
Member

Hi @CoreBoxer , 我这边测试时,发现keil编译报错: packages/littlefs-v2.11.2/dfs_lfs.c(938): error: incompatible function pointer types initializing 'off_t (*)(struct dfs_file , off_t)' (aka 'long ()(struct dfs_file *, long)') with an expression of type 'off_t (struct dfs_file *, rt_off_t)' (aka 'long (struct dfs_file *, int)') [-Wincompatible-function-pointer-types]

请问是否这边和littlefs的版本有关?或者还有哪个config没有配置?

使用最新版本的软件包

@nxp-ran

nxp-ran commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

Hi @CoreBoxer , 我这边测试时,发现keil编译报错: packages/littlefs-v2.11.2/dfs_lfs.c(938): error: incompatible function pointer types initializing 'off_t (*)(struct dfs_file , off_t)' (aka 'long ()(struct dfs_file *, long)') with an expression of type 'off_t (struct dfs_file *, rt_off_t)' (aka 'long (struct dfs_file *, int)') [-Wincompatible-function-pointer-types]
请问是否这边和littlefs的版本有关?或者还有哪个config没有配置?

使用最新版本的软件包

默认latest版本的littlefs也是同样的错误。随后我尝试切到2.11.2版本,报的如上错误。

@CoreBoxer

CoreBoxer commented Jun 17, 2026

Copy link
Copy Markdown
Contributor Author

@nxp-ran @Rbb666
最新版littlefs和rt-thread之间有个类型兼容错误。
临时解决办法:
dfs_lfs.c 第88行的
#define DFS_LFS_LSEEK_PARAMS DFS_LFS_FILE_STRUCT* file, rt_off_t offset
改为
#define DFS_LFS_LSEEK_PARAMS DFS_LFS_FILE_STRUCT* file, off_t offset

@Rbb666

Rbb666 commented Jun 17, 2026

Copy link
Copy Markdown
Member

@nxp-ran @Rbb666 最新版littlefs和rt-thread之间有个类型兼容错误。 临时解决办法: dfs_lfs.c 第88行的 #define DFS_LFS_LSEEK_PARAMS DFS_LFS_FILE_STRUCT* file, rt_off_t offset 改为 #define DFS_LFS_LSEEK_PARAMS DFS_LFS_FILE_STRUCT* file, off_t offset

是存在这个定义的:

typedef rt_base_t rt_off_t; /**< Type for offset */

@github-actions

github-actions Bot commented Jun 17, 2026

Copy link
Copy Markdown

@CoreBoxer

Copy link
Copy Markdown
Contributor Author

@nxp-ran @Rbb666 最新版littlefs和rt-thread之间有个类型兼容错误。 临时解决办法: dfs_lfs.c 第88行的 #define DFS_LFS_LSEEK_PARAMS DFS_LFS_FILE_STRUCT* file, rt_off_t offset 改为 #define DFS_LFS_LSEEK_PARAMS DFS_LFS_FILE_STRUCT* file, off_t offset

是存在这个定义的:

typedef rt_base_t rt_off_t; /**< Type for offset */

定义确实存在。
看起来是因为rt_off_t的底层是signed int,off_t的底层signed long,类型不兼容导致了编译报错。

@wdfk-prog

wdfk-prog commented Jun 22, 2026

Copy link
Copy Markdown
Contributor

@nxp-ran @Rbb666 最新版littlefs和rt-thread之间有个类型兼容错误。 临时解决办法: dfs_lfs.c 第88行的 #define DFS_LFS_LSEEK_PARAMS DFS_LFS_FILE_STRUCT* file, rt_off_t offset 改为 #define DFS_LFS_LSEEK_PARAMS DFS_LFS_FILE_STRUCT* file, off_t offset

是存在这个定义的:

typedef rt_base_t rt_off_t; /**< Type for offset */

定义确实存在。 看起来是因为rt_off_t的底层是signed int,off_t的底层signed long,类型不兼容导致了编译报错。

  • 我这里使用GCC+DFS_V1没有出现警告;分析发现是因为使用了newlib定义了RT_USING_LIBC
  • 使用工具查看了最终链路发现rtt_off_t会最终定义为long,所以没有错误
echo. | D:\arm_gnu_Toos\arm-gnu-toolchain-15.2.rel1-mingw-w64-i686-arm-none-eabi\bin\arm-none-eabi-gcc.exe -x c -dM -E - | findstr /R "__INT32_TYPE__ __SIZEOF_INT__ __SIZEOF_LONG__"
#define __SIZEOF_INT__ 4
#define __SIZEOF_LONG__ 4
#define __INT32_TYPE__ long int
  • littlefs的CI编译由于使用了bsp/qemu-vexpress-a9所以没有编译错误;由于没有很好的方案来模拟编译keil``iar的实现,所以这一块还是得实际编译才能知道

  • littlefs的这个_dfs_lfs_lseek函数的入参从一开始就是用的rt_off_t;

  • off_t (*lseek) (struct dfs_file *fd, off_t offset);倒是从一开始就用的off_t的选项

  • 看来是应该把_dfs_lfs_lseek函数的入参从rt_off_t修改为off_t

  • 加入参数接口签名的检查

#if !defined(RT_USING_DFS_V2) && defined(RT_VERSION_CHECK) && (RTTHREAD_VERSION >= RT_VERSION_CHECK(5, 0, 2))
typedef off_t (*dfs_lfs_lseek_expected_t)(struct dfs_file *file, off_t offset);
static dfs_lfs_lseek_expected_t dfs_lfs_lseek_type_check = dfs_lfs_lseek;
#endif

@Rbb666

Rbb666 commented Jun 22, 2026

Copy link
Copy Markdown
Member

@nxp-ran @Rbb666 最新版littlefs和rt-thread之间有个类型兼容错误。 临时解决办法: dfs_lfs.c 第88行的 #define DFS_LFS_LSEEK_PARAMS DFS_LFS_FILE_STRUCT* file, rt_off_t offset 改为 #define DFS_LFS_LSEEK_PARAMS DFS_LFS_FILE_STRUCT* file, off_t offset

是存在这个定义的:

typedef rt_base_t rt_off_t; /**< Type for offset */

定义确实存在。 看起来是因为rt_off_t的底层是signed int,off_t的底层signed long,类型不兼容导致了编译报错。

  • 我这里使用GCC+DFS_V1没有出现警告;分析发现是因为使用了newlib定义了RT_USING_LIBC
  • 使用工具查看了最终链路发现rtt_off_t会最终定义为long,所以没有错误
echo. | D:\arm_gnu_Toos\arm-gnu-toolchain-15.2.rel1-mingw-w64-i686-arm-none-eabi\bin\arm-none-eabi-gcc.exe -x c -dM -E - | findstr /R "__INT32_TYPE__ __SIZEOF_INT__ __SIZEOF_LONG__"
#define __SIZEOF_INT__ 4
#define __SIZEOF_LONG__ 4
#define __INT32_TYPE__ long int
  • littlefs的CI编译由于使用了bsp/qemu-vexpress-a9所以没有编译错误;由于没有很好的方案来模拟编译 keiliar ``的实现,所以这一块还是得实际编译才能知道
  • littlefs的这个_dfs_lfs_lseek函数的入参从一开始就是用的rt_off_t;
  • off_t (*lseek) (struct dfs_file *fd, off_t offset);倒是从一开始就用的off_t的选项
  • 看来是应该把_dfs_lfs_lseek函数的入参从rt_off_t修改为off_t
  • 加入参数接口签名的检查
#if !defined(RT_USING_DFS_V2) && defined(RT_VERSION_CHECK) && (RTTHREAD_VERSION >= RT_VERSION_CHECK(5, 0, 2))
typedef off_t (*dfs_lfs_lseek_expected_t)(struct dfs_file *file, off_t offset);
static dfs_lfs_lseek_expected_t dfs_lfs_lseek_type_check = dfs_lfs_lseek;
#endif

这个PR也在推进off_t相关的事情:#11503

看下来lfs,ext4可能也需要修改下传入类型

@Rbb666 Rbb666 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

麻烦作者添加下 ci-attach 吧,把这个驱动使用 ci 看护起来


ER_m_QuickAccessCode m_qacode_start m_qacode_size
{
fsl_flexspi.o (+RO-CODE)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

加这段的作用是什么?是否有必要呢

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

有必要的,去掉它会报错。
因为这块Flash也在XIP执行代码,需要把FlexSPI底层操作的代码段放到RAM中,避免Read-While-Write问题

@CoreBoxer

Copy link
Copy Markdown
Contributor Author

麻烦作者添加下 ci-attach 吧,把这个驱动使用 ci 看护起来

好的,我处理一下

@CoreBoxer

Copy link
Copy Markdown
Contributor Author

麻烦作者添加下 ci-attach 吧,把这个驱动使用 ci 看护起来

加好了

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

BSP: NXP Code related with NXP BSP

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants