您尚未登录。

楼主 # 2021-07-07 08:25:22

staunchheart
会员
注册时间: 2019-12-17
已发帖子: 221
积分: 183

F1C200S+RTT文件系统 及如何将电脑上的文件平写进去的方法

这段时间太忙,一直没有时间搞硬件,群里多次有朋友问RTT下DFS的使用问题。
这里做个说明,因为没有用硬件试,所有内容是记忆和QQ聊天记录中找回来的。
具体步骤可能有些出入,想用的朋友可能要稍爬一下坑。

一些说明:
如果文件以读为主,可以用FAT格式,rtthread\env_released_1.1.2\env\tools\fatdisk中有现成的工具。
如果经常要写入,建议用littlefs 有写均衡,性能上FAT比littlefs稍强。lfsdisk.zip
lfsdisk与fatdisk用法基本相同。

RTT上的处理
QQ图片20210707081250.png
勾上这个。
然后pkgs --update
然后根据模板建一个fal_cfg.h
QQ图片20210707081435.png
从第2M开始,后面是14M建一个分区,因为一般固件不会超过2M

将下面的代码放到需要初始化文件系统的地方,比如我就放在applications/main中
    /* 初始化 fal 功能 */
    fal_init();
    /* 在 spi flash 中名为 "filesystem" 的分区上创建一个块设备 */
    flash_res_dev = fal_blk_device_create("res");
    //  struct rt_device *flash_res_dev = fal_mtd_nor_device_create("res");
    if (flash_res_dev == NULL)
    {
        rt_kprintf("Can't create a block device on 'res' partition.");
        return 0;
    }
    /* 挂载 spi flash 中名为 "filesystem" 的分区上的文件系统  lfs  elm jffs2 */
    if (dfs_mount(flash_res_dev->parent.name, "/", "elm", 0, 0) != 0)
    {
        /* 格式化文件系统  lfs  elm jffs2 */
        dfs_mkfs("elm", flash_res_dev->parent.name);
        /* 挂载  lfs  elm jffs2 */
        if (dfs_mount(flash_res_dev->parent.name, "/", "elm", 0, 0) != 0)
        {
            rt_kprintf("Failed to initialize filesystem!");
        }
    }

然后在main里面。将res挂到/目录。
现在其实以可以在rtt的控制台中ls cd这些了。
上面的代码中可以看到,挂载不成功会mkfs,也就是说产生的是空的。

现实中我们往往需要将电脑上的文件夹拷到FLASH中去。
以FAT格式为例
在电脑上建一个文件夹 root 将要上传的文件放进去
建一个root.xml
<?xml version="1.0" encoding="UTF-8"?>
<fatdisk>
   <disk_size>14336</disk_size>
   <sector_size>4096</sector_size>
   <root_dir>root</root_dir>
   <output>root.bin</output>
   <strip>1</strip>
</fatdisk>

fatdisk.exe -f root.xml
会生成root.bin
实际上可以建多个分区,比如我建了一个root存放程序要的图片,再建一个data存用户数据。
将root.bin写到对应的位置,比如我上面定义的是从2M开始
sunxi-fel -p spiflash-write 0x00200000 root.bin
这样在RTT中cd sl就可以看到你上传的文件了。

littlefs基本上差不多,只是在RTT中要引入对应的文件系统。

至于LVGL中怎么使用这些文件,应该比较简单,请其它小伙伴补上。

离线

楼主 #1 2021-07-07 08:31:26

staunchheart
会员
注册时间: 2019-12-17
已发帖子: 221
积分: 183

Re: F1C200S+RTT文件系统 及如何将电脑上的文件平写进去的方法

补个效果图(从QQ聊天记录中找到的)
QQ图片20210707083052.png

离线

#2 2021-07-07 09:37:08

aozima
会员
所在地: 深圳
注册时间: 2019-05-25
已发帖子: 446
积分: 313.5
个人网站

Re: F1C200S+RTT文件系统 及如何将电脑上的文件平写进去的方法

lfsdisk要留意和LFS的版本相同才行,不同的大版本之间不兼容。
而且块设备扇区大小和总大小也要对应,不然也不能像FAT那样兼容。

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn