您尚未登录。

楼主 # 2024-05-22 16:25:04

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,380
积分: 1345.5

d133如何通过usb读写nor flash里的文件系统的数据?

比如有些图片,想传到板子上。不想把这些文件打包进烧录镜像里的话,能不能通过usb传到板子上?

使能了usb device,然后选了usb msc device,然后里面有个两个选项,ram template和storage template。
选了ram template后,win10上弹出个500k的盘符,提示要格式化,格式化后,做个修改,再重启,还提示要格式化...

选storage template模式,默认挂载路径是/sdcard,我没接sd接口,而且,想存到spi nor flash里。我看/rodata目录也是fat格式,就设置了这个目录,结果烧录后运行,提示:
[E/FAL] (blk_dev_write:106) This config only supports read!


请教,有什么办法,通过usb口,直接读写板子上spi nor flash的数据?

离线

#1 2024-05-25 07:43:41

tomas
会员
注册时间: 2024-03-26
已发帖子: 39
积分: 124

Re: d133如何通过usb读写nor flash里的文件系统的数据?

烧录镜像选择分区就可以了,rodata属于只读分区,如果是需要读写的文件,放在data分区就可以了

离线

楼主 #2 2024-05-25 09:02:00

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,380
积分: 1345.5

Re: d133如何通过usb读写nor flash里的文件系统的数据?

tomas 说:

烧录镜像选择分区就可以了,rodata属于只读分区,如果是需要读写的文件,放在data分区就可以了

靠群里朋友的帮助解决了。

menuconfig里,file system image0,设置的fatfs文件系统,名字是rodata.fatfs,挂载到了/rodata分区。但还有个额外选项 FATFS enable write func in spinor 需要选中,fatfs文件系统才能可写。

----------------------------------------------------------

物理分区、文件系统分区,我还是有点晕乎。
partition_tab.h里应该定义的是物理分区吧,分成了4个部分。spl分区应该是存放boot程序。os分区应该是存放编译的可执行程序。另两个应该是存放资源文件。

#define FAL_PART_TABLE \
{ \
    {FAL_PART_MAGIC_WORD, "spl",FAL_USING_NOR_FLASH_DEV_NAME, 0,262144,0}, \
    {FAL_PART_MAGIC_WORD, "os",FAL_USING_NOR_FLASH_DEV_NAME, 262144,2097152,0}, \
    {FAL_PART_MAGIC_WORD, "rodata",FAL_USING_NOR_FLASH_DEV_NAME, 2359296,6291456,0}, \
    {FAL_PART_MAGIC_WORD, "data",FAL_USING_NOR_FLASH_DEV_NAME, 8650752,7340032,0}, \
}
#endif

board.c里是文件系统分区,其中有名为/data和/rodata的文件系统分区,/rodata分区挂载的是fatfs格式的blk_rodata类型的设备,/data分区挂载的是littlefs格式的data类型的设备。
这里最糊涂了,blk_rodata怎么来的?物理分区是如何挂载到/rodata的?

#ifdef RT_USING_DFS_ROMFS
#include "dfs_romfs.h"
static const struct romfs_dirent _mountpoint_root[] =
{
    {ROMFS_DIRENT_DIR, "ram", RT_NULL, 0},
    {ROMFS_DIRENT_DIR, "data", RT_NULL, 0},
    {ROMFS_DIRENT_DIR, "rodata", RT_NULL, 0},
    {ROMFS_DIRENT_DIR, "sdcard", RT_NULL, 0},
    {ROMFS_DIRENT_DIR, "udisk", RT_NULL, 0},
};
const struct romfs_dirent romfs_root =
{
    ROMFS_DIRENT_DIR, "/", (rt_uint8_t *)_mountpoint_root, ARRAY_SIZE(_mountpoint_root)
};
#endif
const struct dfs_mount_tbl mount_table[] = {
#ifdef RT_USING_DFS_ROMFS
    {RT_NULL, "/", "rom", 0, &romfs_root, 0},
#endif
#ifdef LPKG_RAMDISK_TYPE_INITDATA
    {"ramdisk0", "/ram", "elm", 0, 0, 0},
#endif
#if (defined(AIC_USING_FS_IMAGE_TYPE_FATFS_FOR_0) || defined(AIC_USING_FS_IMAGE_TYPE_FATFS_FOR_1))
    {"blk_rodata", "/rodata", "elm", 0, 0, 0},
#endif
#ifdef LPKG_USING_LITTLEFS
    {"data", "/data", "lfs", 0, 0, 0},
#endif
#ifdef LPKG_USING_DFS_UFFS
    {"data", "/data", "uffs", 0, 0, 1},
#endif
#ifdef AIC_USING_SDMC1
    {"sd0", "/sdcard", "elm", 0, 0, 0},
#endif
#if (defined(AIC_USING_USB0_HOST) || defined(AIC_USING_USB1_HOST))
    {"udisk", "/udisk", "elm", 0, 0, 0xFF},
#endif
    {0}
};
#endif

望清楚的朋友帮解惑。

最近编辑记录 Gentlepig (2024-05-25 09:03:03)

离线

页脚

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

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