0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

XIP模式的littlefs_shell代码实现

LI1323882 来源:MCU频道 作者:MCU频道 2022-11-23 10:27 次阅读

写在前面

在实际应用中,通常会使用Serial Nor flash作为RT系列MCU的代码储存设备,如QSPI,HyperFlash等,这些设备都支持XIP特性,而这些Flash除了储存代码外,剩下的空间可以用于存储数据,比如设备参数,log信息,并能用文件系统来管理,所以这次小编就分享一个可运行在QSPI的Littlefs的例程,可用于管理QSPI的数据区域。

b177aeea-6a48-11ed-8abf-dac502259ad0.pngFig1

测试环境介绍

硬件平台:MIMXRT1060-EVKB;

b19a4fb8-6a48-11ed-8abf-dac502259ad0.pngFig2 MIMXRT1060-EVKB

IDE:MCUXpresso;

移植步骤

我们直接以SDK中的littlefs_shell工程作为模板来避免重复造轮子,由于littlefs_shell工程是链接到RAM中,所以我们需要对它进行改造。

添加Flash项

b1e61c54-6a48-11ed-8abf-dac502259ad0.pngFig3 添加Flash

添加FDCB
littlefs_shell工程默认是链接到RAM中,所以需要手动添加FDCB,具体如下所示。

在工程中添加xip(来自于SDK library)

b20b43f8-6a48-11ed-8abf-dac502259ad0.pngFig4

Settings->Preprocessor中,添加XIP_EXTERNAL_FLASH=1和XIP_BOOT_HEADER_ENABLE=1

b2213bcc-6a48-11ed-8abf-dac502259ad0.pngFig5

函数重定位
Fig6为littlefs_shell工程的代码分层图,其中结构体lfs_config包含块设备的各类操作接口函数及各种参数配置,而接口函数需要调用FlexSPI驱动函数才能真正实现QSPI的读写,删除等操作。

b242c5e4-6a48-11ed-8abf-dac502259ad0.pngFig6 代码分层

由于代码本身就是在QSPI中运行,需要修改linker file把块设备的各类操作接口函数和FlexSPI驱动函数重定位到RAM中运行。

b2713032-6a48-11ed-8abf-dac502259ad0.pngb28d9e02-6a48-11ed-8abf-dac502259ad0.pngFig7

修改Flexspi clock
littlefs_shell工程中,Flex_SPI时钟会被重新设置,这部分也需要进行重定位处理的,不然会触发hardfalut,当然,你可以在BOARD_InitBootClocks()中,就提前设置好想要的FlexSPI时钟频率,避免二次设置。

CLOCK_InitUsb1Pll(&g_ccmConfigUsbPll);
CLOCK_InitUsb1Pfd(kCLOCK_Pfd0,24);/*SetPLL3PFD0clock360MHZ.*/
CLOCK_SetMux(kCLOCK_FlexspiMux,0x3);/*ChoosePLL3PFD0clockasflexspisourceclock.*/
CLOCK_SetDiv(kCLOCK_FlexspiDiv,2);/*flexspiclock120M.*/

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    146

    文章

    16977

    浏览量

    350215
  • 代码
    +关注

    关注

    30

    文章

    4741

    浏览量

    68324
  • Shell
    +关注

    关注

    1

    文章

    363

    浏览量

    23287
  • QSPI
    +关注

    关注

    0

    文章

    41

    浏览量

    12174

原文标题:XIP模式的littlefs_shell代码实现

文章出处:【微信号:MCU频道,微信公众号:MCU频道】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    shell是什么?shell实现原理分析基于MM32 MCU的shell脚本源码

    在前两节中,我们讲解了如何在MM32 MCU上使用shell来辅助开发,分别介绍的是通过串口方式和J-Link RTT方式的shell,本次课程我们分析源码来讲解shell实现原理。
    发表于 12-02 15:58 2462次阅读

    Windows CE 5.0 mult-xip bin模式实现

    模式实现 XIP是什么,微软说: Execute-in-place (XIP) regions are areas where an application can execute c
    发表于 04-15 14:22

    讲解shell实现原理

    在前两节中,我们讲解了如何在MM32 MCU上使用shell来辅助开发,分别介绍的是通过串口方式和J-Link RTT方式的shell,本次课程我们分析源码来讲解shell实现原理。软
    发表于 11-26 08:30

    如何实现XIP方式的flash代码启动?

    如何实现XIP方式的flash代码启动?
    发表于 11-29 06:06

    littlefs文件系统掉电保护是如何实现

    文档: 在 STM32L4 上应用 littlefs 文件系统文档上说little fs支持 擦写均衡 和 掉电保护;擦写均衡可以理解,通过打包几条写入,由写入几次变一次,从而增大flash寿命;这样要写入的数据临时保存在ram中,掉电不就没了,这个掉电保护是如果实现的,
    发表于 08-26 14:15

    如何将SPIFFS代码移植到LittleFS?

    有没有人有关于将 SPIFFS 代码移植到 LittleFS 的过程的任何提示或教程链接? 我做了基准测试,很高兴看到我的代码如何在新文件系统上运行,但它不是一个直接的替代品(我试过)所以任何帮助
    发表于 05-16 07:15

    请问N101 flashxip模式运行的是两线XIP

    修改,把QSPI FLASH挂上去运行了,可以进行正常printf,调出来波形进行观测,发现跑的是两线模式XIP。 是目前给的QSPI的代码只能运行两线XIP么?还是需要进行额外的配
    发表于 08-12 08:18

    基于Vivado/SDK 2018.3的XIP参考设计

    Without External Memory,把代码和只读数据放在QSPI Flash中运行程序,这就是execute in place (XIP)。 上述XIP参考设计工作正常,但是只更新到了Vivado
    的头像 发表于 10-09 10:09 3269次阅读

    STM32CubeIDE XiP 和 BootROM介绍, XiP外部内存QSPI FLASH执行用户代码

    STM32CubeIDE XiP 和 BootROM介绍, XiP外部内存QSPI FLASH执行用户代码
    发表于 12-02 09:21 14次下载
    STM32CubeIDE <b class='flag-5'>XiP</b> 和 BootROM介绍, <b class='flag-5'>XiP</b>外部内存QSPI FLASH执行用户<b class='flag-5'>代码</b>

    用于MCU上的代码下载与执行的并发并行XIP闪存和SRAM设计

    电子发烧友网站提供《用于MCU上的代码下载与执行的并发并行XIP闪存和SRAM设计.zip》资料免费下载
    发表于 09-05 17:14 3次下载
    用于MCU上的<b class='flag-5'>代码</b>下载与执行的并发并行<b class='flag-5'>XIP</b>闪存和SRAM设计

    基于OpenHarmony3.1的LittleFS文件系统hdf驱动实现

         LittleFS是一个小型的Flash文件系统,它结合日志结构(log-structured)文件系统和COW(copy-on-write)文件系统的思想,以日志结构存储元数据,以COW结构存储数据
    的头像 发表于 09-30 18:32 1589次阅读

    剖析Linux shell 函数实现

    作为一个嵌入式 Linux 工程师,肯定需要编写 shell 脚本进行一些自动化工作。刚好,我最近就有类似需求——一键交叉编译 DDS。本着“编写漂亮代码的原则”,我用到了 **shell 函数** 。
    的头像 发表于 05-12 10:27 486次阅读
    剖析Linux <b class='flag-5'>shell</b> 函数<b class='flag-5'>实现</b>

    基于OpenHarmony3.1的LittleFS文件系统hdf驱动实现

    一、简介LittleFS是一个小型的Flash文件系统,它结合日志结构(log-structured)文件系统和COW(copy-on-write)文件系统的思想,以日志结构存储元数据,以COW结构
    的头像 发表于 06-22 09:42 897次阅读
    基于OpenHarmony3.1的<b class='flag-5'>LittleFS</b>文件系统hdf驱动<b class='flag-5'>实现</b>

    XIP是什么?XIP运行有什么要求?XIP的优缺点

    XIP是什么?XIP运行有什么要求?XIP的优缺点  XIP是指可执行代码在存储器运行的一项技术,其全称为eXecute In Place。
    的头像 发表于 10-29 16:28 4341次阅读

    python shell怎么用

    Python Shell是一种交互式解释器,可以通过命令行直接运行Python代码。在Shell中,可以输入一行代码并立即得到结果,非常适合于测试、尝试新
    的头像 发表于 11-29 14:36 1098次阅读