0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

XIP模式的littlefs_shell代碼實現(xiàn)

LI1323882 ? 來源:MCU頻道 ? 作者:MCU頻道 ? 2022-11-23 10:27 ? 次閱讀

寫在前面

在實際應(yīng)用中,通常會使用Serial Nor flash作為RT系列MCU的代碼儲存設(shè)備,如QSPI,HyperFlash等,這些設(shè)備都支持XIP特性,而這些Flash除了儲存代碼外,剩下的空間可以用于存儲數(shù)據(jù),比如設(shè)備參數(shù),log信息,并能用文件系統(tǒng)來管理,所以這次小編就分享一個可運行在QSPI的Littlefs的例程,可用于管理QSPI的數(shù)據(jù)區(qū)域。

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

測試環(huán)境介紹

硬件平臺:MIMXRT1060-EVKB;

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

IDE:MCUXpresso;

移植步驟

我們直接以SDK中的littlefs_shell工程作為模板來避免重復(fù)造輪子,由于littlefs_shell工程是鏈接到RAM中,所以我們需要對它進行改造。

添加Flash項

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

添加FDCB
littlefs_shell工程默認(rèn)是鏈接到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

函數(shù)重定位
Fig6為littlefs_shell工程的代碼分層圖,其中結(jié)構(gòu)體lfs_config包含塊設(shè)備的各類操作接口函數(shù)及各種參數(shù)配置,而接口函數(shù)需要調(diào)用FlexSPI驅(qū)動函數(shù)才能真正實現(xiàn)QSPI的讀寫,刪除等操作。

b242c5e4-6a48-11ed-8abf-dac502259ad0.pngFig6 代碼分層

由于代碼本身就是在QSPI中運行,需要修改linker file把塊設(shè)備的各類操作接口函數(shù)和FlexSPI驅(qū)動函數(shù)重定位到RAM中運行。

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

修改Flexspi clock
littlefs_shell工程中,F(xiàn)lex_SPI時鐘會被重新設(shè)置,這部分也需要進行重定位處理的,不然會觸發(fā)hardfalut,當(dāng)然,你可以在BOARD_InitBootClocks()中,就提前設(shè)置好想要的FlexSPI時鐘頻率,避免二次設(shè)置。

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

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    146

    文章

    16813

    瀏覽量

    349492
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4700

    瀏覽量

    68117
  • Shell
    +關(guān)注

    關(guān)注

    1

    文章

    361

    瀏覽量

    23239
  • QSPI
    +關(guān)注

    關(guān)注

    0

    文章

    41

    瀏覽量

    12144

原文標(biāo)題:XIP模式的littlefs_shell代碼實現(xiàn)

文章出處:【微信號:MCU頻道,微信公眾號:MCU頻道】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    shell是什么?shell實現(xiàn)原理分析基于MM32 MCU的shell腳本源碼

    在前兩節(jié)中,我們講解了如何在MM32 MCU上使用shell來輔助開發(fā),分別介紹的是通過串口方式和J-Link RTT方式的shell,本次課程我們分析源碼來講解shell實現(xiàn)原理。
    發(fā)表于 12-02 15:58 ?2444次閱讀

    Windows CE 5.0 mult-xip bin模式實現(xiàn)

    模式實現(xiàn) XIP是什么,微軟說: Execute-in-place (XIP) regions are areas where an application can execute c
    發(fā)表于 04-15 14:22

    講解shell實現(xiàn)原理

    在前兩節(jié)中,我們講解了如何在MM32 MCU上使用shell來輔助開發(fā),分別介紹的是通過串口方式和J-Link RTT方式的shell,本次課程我們分析源碼來講解shell實現(xiàn)原理。軟
    發(fā)表于 11-26 08:30

    如何實現(xiàn)XIP方式的flash代碼啟動?

    如何實現(xiàn)XIP方式的flash代碼啟動?
    發(fā)表于 11-29 06:06

    littlefs文件系統(tǒng)掉電保護是如何實現(xiàn)

    文檔: 在 STM32L4 上應(yīng)用 littlefs 文件系統(tǒng)文檔上說little fs支持 擦寫均衡 和 掉電保護;擦寫均衡可以理解,通過打包幾條寫入,由寫入幾次變一次,從而增大flash壽命;這樣要寫入的數(shù)據(jù)臨時保存在ram中,掉電不就沒了,這個掉電保護是如果實現(xiàn)的,
    發(fā)表于 08-26 14:15

    如何將SPIFFS代碼移植到LittleFS?

    有沒有人有關(guān)于將 SPIFFS 代碼移植到 LittleFS 的過程的任何提示或教程鏈接? 我做了基準(zhǔn)測試,很高興看到我的代碼如何在新文件系統(tǒng)上運行,但它不是一個直接的替代品(我試過)所以任何幫助
    發(fā)表于 05-16 07:15

    請問N101 flashxip模式運行的是兩線XIP?

    修改,把QSPI FLASH掛上去運行了,可以進行正常printf,調(diào)出來波形進行觀測,發(fā)現(xiàn)跑的是兩線模式XIP。 是目前給的QSPI的代碼只能運行兩線XIP么?還是需要進行額外的配
    發(fā)表于 08-12 08:18

    基于Vivado/SDK 2018.3的XIP參考設(shè)計

    Without External Memory,把代碼和只讀數(shù)據(jù)放在QSPI Flash中運行程序,這就是execute in place (XIP)。 上述XIP參考設(shè)計工作正常,但是只更新到了Vivado
    的頭像 發(fā)表于 10-09 10:09 ?3223次閱讀

    STM32CubeIDE XiP 和 BootROM介紹, XiP外部內(nèi)存QSPI FLASH執(zhí)行用戶代碼

    STM32CubeIDE XiP 和 BootROM介紹, XiP外部內(nèi)存QSPI FLASH執(zhí)行用戶代碼
    發(fā)表于 12-02 09:21 ?14次下載
    STM32CubeIDE <b class='flag-5'>XiP</b> 和 BootROM介紹, <b class='flag-5'>XiP</b>外部內(nèi)存QSPI FLASH執(zhí)行用戶<b class='flag-5'>代碼</b>

    用于MCU上的代碼下載與執(zhí)行的并發(fā)并行XIP閃存和SRAM設(shè)計

    電子發(fā)燒友網(wǎng)站提供《用于MCU上的代碼下載與執(zhí)行的并發(fā)并行XIP閃存和SRAM設(shè)計.zip》資料免費下載
    發(fā)表于 09-05 17:14 ?3次下載
    用于MCU上的<b class='flag-5'>代碼</b>下載與執(zhí)行的并發(fā)并行<b class='flag-5'>XIP</b>閃存和SRAM設(shè)計

    基于OpenHarmony3.1的LittleFS文件系統(tǒng)hdf驅(qū)動實現(xiàn)

    ?? ? LittleFS是一個小型的Flash文件系統(tǒng),它結(jié)合日志結(jié)構(gòu)(log-structured)文件系統(tǒng)和COW(copy-on-write)文件系統(tǒng)的思想,以日志結(jié)構(gòu)存儲元數(shù)據(jù),以COW結(jié)構(gòu)存儲數(shù)據(jù)
    的頭像 發(fā)表于 09-30 18:32 ?1550次閱讀

    剖析Linux shell 函數(shù)實現(xiàn)

    作為一個嵌入式 Linux 工程師,肯定需要編寫 shell 腳本進行一些自動化工作。剛好,我最近就有類似需求——一鍵交叉編譯 DDS。本著“編寫漂亮代碼的原則”,我用到了 **shell 函數(shù)** 。
    的頭像 發(fā)表于 05-12 10:27 ?463次閱讀
    剖析Linux <b class='flag-5'>shell</b> 函數(shù)<b class='flag-5'>實現(xiàn)</b>

    基于OpenHarmony3.1的LittleFS文件系統(tǒng)hdf驅(qū)動實現(xiàn)

    一、簡介LittleFS是一個小型的Flash文件系統(tǒng),它結(jié)合日志結(jié)構(gòu)(log-structured)文件系統(tǒng)和COW(copy-on-write)文件系統(tǒng)的思想,以日志結(jié)構(gòu)存儲元數(shù)據(jù),以COW結(jié)構(gòu)
    的頭像 發(fā)表于 06-22 09:42 ?848次閱讀
    基于OpenHarmony3.1的<b class='flag-5'>LittleFS</b>文件系統(tǒng)hdf驅(qū)動<b class='flag-5'>實現(xiàn)</b>

    XIP是什么?XIP運行有什么要求?XIP的優(yōu)缺點

    XIP是什么?XIP運行有什么要求?XIP的優(yōu)缺點? XIP是指可執(zhí)行代碼在存儲器運行的一項技術(shù),其全稱為eXecute In Place。
    的頭像 發(fā)表于 10-29 16:28 ?4110次閱讀

    python shell怎么用

    Python Shell是一種交互式解釋器,可以通過命令行直接運行Python代碼。在Shell中,可以輸入一行代碼并立即得到結(jié)果,非常適合于測試、嘗試新
    的頭像 發(fā)表于 11-29 14:36 ?1035次閱讀