在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

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

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

ART-Pi外部SPI Flash使用elmfatfs文件系統(tǒng)流程記錄

冬至子 ? 來源:IcyFeather ? 作者:IcyFeather ? 2023-11-21 11:39 ? 次閱讀

SPI 介紹

SPI 原理:

1.jpg

FAL (Flash Abstraction Layer) Flash 抽象層

1.jpg

DFS (Device File System) 設(shè)備虛擬文件系統(tǒng)

DFS 的層次架構(gòu)圖:

1.jpg

ROMFS

ARTPI 外部 SPI Flash

ARTPI 有一個外部 SPI Flash,空間為 16-Mbytes,使用的是 ARTPI 的 SPI1 接口

查閱 Flash 的數(shù)據(jù)手冊可知,扇區(qū)大小為 4KB,也就是 4096B:

1.jpg

整體思路

在 meunconfig 中開啟 DFS,本教程使用 elmfatfs 文件系統(tǒng),需要將 elmfatfs 掛載到 RT-Thread 的 DFS 上,所以 elmfatfs 也要開啟:

1.jpg

注意要把扇區(qū)大小改成上面查閱的 4096:

1.jpg

當(dāng)然,不要忘記在 meunconfig 中開啟 SPI Flash filesystem:

1.jpg

此時 scons --target=mdk5 然后編譯下載,運(yùn)行結(jié)果會是這樣:

1.jpg

顯示兩個報錯:

一是 Flash 上面的 filesystem 分區(qū)(在上方輸出的 FAL 分區(qū)表種可以找到,對應(yīng)的定義在 fal_cfg.h 文件中)掛載到 /flash 上失敗了;二是 lfs 文件系統(tǒng)沒有找到

我們在 filesystem.c 中找到了報錯對應(yīng)的代碼:

1.jpg

2.jpg

可以看出來這部分代碼是掛載 lfs 文件系統(tǒng),于是上面報錯的原因找到了:我們使用的是 elm-FATFS 系統(tǒng),需要手動修改一下掛載代碼。

1.jpg

我們創(chuàng)建設(shè)備的時候是 BLK 設(shè)備,要用 fal_blk_device_create 這個函數(shù)。

代碼修改之后是這樣:

1.jpg

2.jpg

3.jpg

照葫蘆畫瓢寫個 elm 系統(tǒng)的掛載,主要的區(qū)別有:

1.注冊設(shè)備用的 fal_blk_device_create 而非 fal_mtd_nor_device_create
2.掛載到 / 而非 /flash
3.文件系統(tǒng)使用 elm 而非 rom

修改完之后重新編譯下載,發(fā)現(xiàn)依舊報錯,運(yùn)行 ls 查看一下情況,發(fā)現(xiàn)是這樣:

1.jpg

再次返回查看代碼,原來是這里導(dǎo)致的:

1.jpg

使用了 romfs,然后開啟了 flash 和 sdcard 兩塊區(qū)域。這里我們需要默認(rèn)不使用 ROMFS,改成這樣:

1.jpg

另外在 menuconfig 中查看,發(fā)現(xiàn)這個宏是默認(rèn)開啟的,找到是在 boards/Kconfig 中默認(rèn)選擇了,需要注釋掉:

1.jpg

1.jpg

到對應(yīng)的選項(xiàng)取消掉這個宏:

1.jpg

最終,filesystem.c 的代碼完整版如下:

/*

Copyright (c) 2006-2022, RT-Thread Development Team

SPDX-License-Identifier: Apache-2.0

Change Logs:
Date Author Notes
2018-12-13 balanceTWK add sdcard port file 2019-06-11 WillianChan Add SD card hot plug detection
/
#include
#ifdef BSP_USING_FS
#if DFS_FILESYSTEMS_MAX < 4
#error "Please define DFS_FILESYSTEMS_MAX more than 4"
#endif
#if DFS_FILESYSTEM_TYPES_MAX < 4
#error "Please define DFS_FILESYSTEM_TYPES_MAX more than 4"
#endif
#include
#ifdef BSP_USING_SDCARD_FS
#include
#include "drv_sdio.h"
#endif
#ifdef BSP_USING_SPI_FLASH_FS
#include "fal.h"
#endif
#define DBG_TAG "app.filesystem"
#define DBG_LVL DBG_INFO
#include
#ifdef RT_USING_DFS_ROMFS /
默認(rèn)不使用 ROMFS */
#include "dfs_romfs.h"
static const struct romfs_dirent _romfs_root[] =
{
{ROMFS_DIRENT_DIR, "flash", RT_NULL, 0},
{ROMFS_DIRENT_DIR, "sdcard", RT_NULL, 0}
};
const struct romfs_dirent romfs_root =
{
ROMFS_DIRENT_DIR, "/", (rt_uint8_t )_romfs_root, sizeof(_romfs_root) / sizeof(_romfs_root[0])
};
#endif
#ifdef BSP_USING_SDCARD_FS
/
SD Card hot plug detection pin */
#define SD_CHECK_PIN GET_PIN(D, 5)
static void _sdcard_mount(void)
{
rt_device_t device;
device = rt_device_find("sd0");
if (device == NULL)
{
mmcsd_wait_cd_changed(0);
sdcard_change();
mmcsd_wait_cd_changed(RT_WAITING_FOREVER);
device = rt_device_find("sd0");
}
if (device != RT_NULL)
{
if (dfs_mount("sd0", "/sdcard", "elm", 0, 0) == RT_EOK)
{
LOG_I("sd card mount to '/sdcard'");
}
else
{
LOG_W("sd card mount to '/sdcard' failed!");
}
}
}
static void _sdcard_unmount(void)
{
rt_thread_mdelay(200);
dfs_unmount("/sdcard");
LOG_I("Unmount "/sdcard"");
mmcsd_wait_cd_changed(0);
sdcard_change();
mmcsd_wait_cd_changed(RT_WAITING_FOREVER);
}
static void sd_mount(void parameter)
{
rt_uint8_t re_sd_check_pin = 1;
rt_thread_mdelay(200);
if (rt_pin_read(SD_CHECK_PIN))
{
_sdcard_mount();
}
while (1)
{
rt_thread_mdelay(200);
if (!re_sd_check_pin && (re_sd_check_pin = rt_pin_read(SD_CHECK_PIN)) != 0)
{
_sdcard_mount();
}
if (re_sd_check_pin && (re_sd_check_pin = rt_pin_read(SD_CHECK_PIN)) == 0)
{
_sdcard_unmount();
}
}
}
#endif /
BSP_USING_SDCARD_FS */
int mnt_spi_flash_init(void)
{
struct rt_device flash_dev = RT_NULL;
#ifndef RT_USING_WIFI
fal_init();
#endif
flash_dev = fal_blk_device_create("filesystem");
if (flash_dev)
{
//mount filesystem
if (dfs_mount(flash_dev->parent.name, "/", "elm", 0, 0) != 0)
{
LOG_W("mount to '/' failed! try to mkfs %s", flash_dev->parent.name);
dfs_mkfs("elm", flash_dev->parent.name);
if (dfs_mount(flash_dev->parent.name, "/", "elm", 0, 0) == 0)
{
LOG_I("mount to '/' success!");
}
}
else
{
LOG_I("mount to '/' success!");
}
}
else
{
LOG_E("Can't create block device filesystem or bt_image partition.");
}
}
int mount_init(void)
{
#ifdef RT_USING_DFS_ROMFS /
默認(rèn)不使用ROMFS */
if (dfs_mount(RT_NULL, "/", "rom", 0, &(romfs_root)) != 0)
{
LOG_E("rom mount to '/' failed!");
}
#endif
#ifdef BSP_USING_SPI_FLASH_FS
mnt_spi_flash_init();
#if 0
struct rt_device flash_dev = RT_NULL;
#ifndef RT_USING_WIFI
fal_init();
#endif
flash_dev = fal_mtd_nor_device_create("filesystem");
if (flash_dev)
{
//mount filesystem
if (dfs_mount(flash_dev->parent.name, "/flash", "lfs", 0, 0) != 0)
{
LOG_W("mount to '/flash' failed! try to mkfs %s", flash_dev->parent.name);
dfs_mkfs("lfs", flash_dev->parent.name);
if (dfs_mount(flash_dev->parent.name, "/flash", "lfs", 0, 0) == 0)
{
LOG_I("mount to '/flash' success!");
}
}
else
{
LOG_I("mount to '/flash' success!");
}
}
else
{
LOG_E("Can't create block device filesystem or bt_image partition.");
}
#endif
#endif
#ifdef BSP_USING_SDCARD_FS
rt_thread_t tid;
rt_pin_mode(SD_CHECK_PIN, PIN_MODE_INPUT_PULLUP);
tid = rt_thread_create("sd_mount", sd_mount, RT_NULL,
2048, RT_THREAD_PRIORITY_MAX - 2, 20);
if (tid != RT_NULL)
{
rt_thread_startup(tid);
}
else
{
LOG_E("create sd_mount thread err!");
}
#endif
return RT_EOK;
}
INIT_APP_EXPORT(mount_init);
#endif /
BSP_USING_FS */

重新生成、編譯、下載,運(yùn)行結(jié)果如下:

1.jpg

大功告成!

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

    關(guān)注

    17

    文章

    1742

    瀏覽量

    93775
  • RT-Thread
    +關(guān)注

    關(guān)注

    31

    文章

    1337

    瀏覽量

    41305
  • FatFS文件系統(tǒng)
    +關(guān)注

    關(guān)注

    0

    文章

    12

    瀏覽量

    7648
  • DFS
    DFS
    +關(guān)注

    關(guān)注

    0

    文章

    26

    瀏覽量

    9282
  • ART-Pi
    +關(guān)注

    關(guān)注

    0

    文章

    23

    瀏覽量

    1411
收藏 0人收藏

    評論

    相關(guān)推薦

    ART-Pi Smart開發(fā)板開箱及愛之初次體驗(yàn)

    ART-Pi Smart 開發(fā)板初次嘗鮮,ART-Pi Smart開箱及初次體驗(yàn)內(nèi)置應(yīng)用.
    的頭像 發(fā)表于 05-03 16:25 ?5298次閱讀
    <b class='flag-5'>ART-Pi</b> Smart開發(fā)板開箱及愛之初次體驗(yàn)

    ART-Pi Studio工程下NimBLE軟件包的使用

    本文主要介紹 ART-Pi Studio 工程下 NimBLE 軟件包的使用
    的頭像 發(fā)表于 08-26 10:31 ?1904次閱讀

    怎樣在ART-Pi H750上移植TouchGFX呢

    QSPI-FLASH燒錄算法在ART-Pi H750上移植TouchGFX(三)——移植TouchGFX到RT-Thread系統(tǒng)ART-Pi H750上移植TouchGFX(四)——
    發(fā)表于 02-22 06:01

    Art_Pi學(xué)習(xí)筆記匯總

    1、Art-Pi學(xué)習(xí)筆記1:驅(qū)動SDIO和USB設(shè)備做TF讀卡器操作系統(tǒng):WIN10開發(fā)平臺:RT-Thread StudioOS版本:4.0.3之前在某寶入手了一片H743的開發(fā)板,賣家雖然提供了
    發(fā)表于 03-18 14:27

    基于ART-Pi Smart平臺的設(shè)計(jì)方案推薦

    ART-Pi Smart 平臺上實(shí)現(xiàn)視頻播放功能;由于ART-Pi Smart 沒有音頻模塊,所以沒有實(shí)現(xiàn)音頻的解碼播放。在上一篇分享中,我們在 ART-Pi Smart 平臺上實(shí)現(xiàn)了視頻解碼
    發(fā)表于 03-24 16:56

    ART-PI在MDK中使用SDIO設(shè)備的方法

    一、ENV使能SDIO1.1.在kconfig增加配置因?yàn)?b class='flag-5'>ART-PI的SDIO2連接的是wifi,所以這里我們使用SDIO1。1.2.ENV中使能SDIO1.3.使能文件系統(tǒng)1.4.使用SD設(shè)備
    發(fā)表于 04-11 10:07

    使用ART-Pi ST-LINK的步驟教程

    J-LINK下載Segger STLinkReflash小工具(ART-Pi 硬件交流群文件有,想了解更多ART-PI請加QQ群: 1016035998)。啟動STLinkReflash.exe,后
    發(fā)表于 04-11 10:10

    關(guān)于ART-PI的基本使用例程簡單描述

    ,Download選項(xiàng)部分表示,將生成的文件下載至外部QSPI Flash中。5.通過XShell Serial COM9連接ART-PI6.輸入ifconfig確認(rèn)網(wǎng)卡狀態(tài)7.確認(rèn)P
    發(fā)表于 06-01 15:06

    ART-PI文件系統(tǒng)SPI Flash上的使用

    1、文件系統(tǒng)SPI Flash上的使用  ENV使能SPI_Flash  添加Kconfig配置  menu “Onboard Peripheral Drivers”  config
    發(fā)表于 09-22 15:18

    ART-PI編譯報錯提示flash溢出如何解決

    ART-PI 芯片flash太小只有128k,編譯報錯,提示flash 溢出如何解決,工程是通過stm32cube mx生成的幫忙看看謝謝提示,H750.elf section .rodata
    發(fā)表于 12-29 14:57

    ART-PI掛載文件系統(tǒng),終端報錯怎么解決?

    ART-PI 掛載文件系統(tǒng),終端報錯,用list_device能夠顯示sd0
    發(fā)表于 08-20 15:59

    SPI外部FLASH文件系統(tǒng)

    本文檔使用 TAB = 4 對齊,使用keil5默認(rèn)配置打開閱讀比較方便。 【*】程序簡介 -工程名稱:SPI-外部文件系統(tǒng) -實(shí)驗(yàn)平臺: 秉火STM32 F429 開發(fā)板 -MDK版本:5.16
    發(fā)表于 12-13 15:16 ?5次下載
    <b class='flag-5'>SPI</b>—<b class='flag-5'>外部</b><b class='flag-5'>FLASH</b><b class='flag-5'>文件系統(tǒng)</b>

    【STM32H750】玩轉(zhuǎn)ART-Pi(一)——使用STM32CUBMX生成TouchGFX工程

    QSPI-FLASH燒錄算法在ART-Pi H750上移植TouchGFX(三)——移植TouchGFX到RT-Thread系統(tǒng)ART-Pi H750上移植TouchGFX(四)——
    發(fā)表于 12-28 19:20 ?11次下載
    【STM32H750】玩轉(zhuǎn)<b class='flag-5'>ART-Pi</b>(一)——使用STM32CUBMX生成TouchGFX工程

    【技術(shù)三千問】之《玩轉(zhuǎn)ART-Pi》,看這篇就夠了!

    2.在 ART-Pi 平臺有沒有人成功使用 openocd 可以直接燒寫到外部 Quad spi flash 的?[鏈接]
    發(fā)表于 01-25 18:44 ?2次下載
    【技術(shù)三千問】之《玩轉(zhuǎn)<b class='flag-5'>ART-Pi</b>》,看這篇就夠了!

    RT-Thread外部SPI Flash分區(qū)掛載為U盤

    首先需要配置好ART-Pi 外部 16MB SPI Flash 掛載為FatFS 文件系統(tǒng)文件系統(tǒng)
    發(fā)表于 04-06 10:02 ?2221次閱讀
    RT-Thread<b class='flag-5'>外部</b><b class='flag-5'>SPI</b> <b class='flag-5'>Flash</b>分區(qū)掛載為U盤
    主站蜘蛛池模板: 99精品视频免费 | 小说老卫陈红张敏陈法蓉 | 国产高清视频在线播放www色 | 黄视频在线免费看 | 欧美猛交xxxx乱大交 | 欧美黄色一级网站 | 久久看精品 | 国产盗摄女子私密保健视频 | 操插干| 色婷丁香 | 久久网站免费 | 午夜精品久久久久久久四虎 | 亚洲福利视频一区二区 | 日韩在线视频一区 | 视频在线观看免费播放www | 久久福利网 | 久久狠狠色噜噜狠狠狠狠97 | seetube18日本第一次 | 国产精品李雅在线观看 | 奇米久草| 久操免费在线 | 婷婷丁香综合网 | 亚洲特黄大黄一级毛片 | 欧美城天堂网 | 国产精品视频久久久久 | 天天爽夜夜爽人人爽免费 | 夜夜夜爽 | 国产午夜爽爽窝窝在线观看 | 欧美色图日韩 | 精品日韩一区二区三区 | 国产 麻豆 欧美亚洲综合久久 | 伊人狼人综合 | 性欧美xxxxhd| 丁香婷婷综合五月综合色啪 | 美女三级网站 | xxxx大片| 毛片不卡一区二区三区 | 51影院在线观看成人免费 | 中文字幕卡二和卡三的视频 | 日韩爱爱 | 高清一级毛片一本到免费观看 |

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會員交流學(xué)習(xí)
    • 獲取您個性化的科技前沿技術(shù)信息
    • 參加活動獲取豐厚的禮品