it mayn't work as you expect. FatFS updates some fixed location very
frequently, your flash device may stop working after you make ten thousand
changes.

On Fri, Nov 1, 2024 at 8:06 PM Tim hardisty <timhardist...@gmail.com> wrote:

> I am successfully creating a FAT FS on a QSPI NOR flash - the problem
> was an error in the flash driver when 512 byte sector emulation was
> being used. I do this in my bringup code:
> struct qspi_dev_s *qspi_flashmem;
>
> qspi_flashmem = sam_qspi_initialize(0);
> ...
> mtd_qspi = gd55_initialize(qspi_flashmem, 0);
> ...
> mtd_qspi0 = mtd_partition(mtd_qspi, 0, QSPI0_SIZE);...
> ...
> ret = register_mtddriver("/dev/qspi0", mtd_qspi0, 0744, NULL);
> ...
> mtd_qspi1 = mtd_partition(mtd_qspi, QSPI0_SIZE, QSPI1_SIZE);
> ...
> ret = register_mtddriver("/dev/qspi1", mtd_qspi1, 0755, NULL);
> ret = nx_mount("/dev/qspi1", "/mnt/qspi1lfs", "littlefs", 0, "autoformat");
> etc.
>
> The GD55 driver is using 512 byte simulation, but s512_initialize()
> works just as well.
>
> I can then use mkfatfs to create a FAT FS and mount it and all is good.
>
> mkfats fs is not available to use in bringup code as I understand it
> otherwise I would mount the FS in my bringup too.
>
> On 01/11/2024 02:07, Xiang Xiao wrote:
> > On Wed, Oct 30, 2024 at 2:00 AM Tim Hardisty <timhardist...@gmail.com>
> > wrote:
> >
> >> Whilst FAT on a NOR flash may generally be seen a not such a great
> >> idea...please ignore that and confirm if...
> >>
> >> ...I am right in deducing that I can't simply make a FAT file system on
> >> (say) the third mtd partition (with 512 byte sector emulation)
> >> (partitions 0, 1 and 2 are "raw" data) since FAT will treat the entire
> >> flash devices as a "volume" and so fail to find a partition table at the
> >> bottom end of the flash device?
> >
> > The partition is different from the file system. A file system can mount
> on
> > either a block/mtd device, or a partition. FAT can work only with the
> block
> > device, so you can't mount FAT on a flash(mtd) device, only the special
> > designed file system(e.g. littlefs, smartfs, spiffs) can work with mtd
> > device directly. The traditional block based file system need FTL(flash
> > translation layer) to work with mtd device, so you can try dhara if you
> > really want to use FAT on flash device:
> > https://github.com/apache/nuttx/blob/master/drivers/mtd/dhara.c
> >
> > If so, it no doubt explains why I can
> >> format a FAT FS but not mount it.
> >>
> >>
> > Which command do you use to format the device or partition?
> >
> > I could - perhaps should -  re-jig my partitions so partition 0 is used
> >> for FAT, rather than partition 3, but before I do that are there any FAT
> >> FA/NuttX gurus who can let me know if there is a way to do this (and
> >> save me the hassle of reworking my bootstrap and MCUboot locations etc.
> >> for now)?
> >
> > You can format the device with GPT/MBR partition by:
> > https://github.com/apache/nuttx-apps/tree/master/fsutils/mkgpt
> > https://github.com/apache/nuttx-apps/tree/master/fsutils/mkmbr
> > But, the raw flash device normally doesn't use GPT/MBR partition, instead
> > hardcode the  partition in the code directly since CPU normally could run
> > firmware directly on flash devices which normally define a proprietary
> > partition scheme. For this case, you can use PTABLE/TXTABLE:
> > https://github.com/apache/nuttx/blob/master/fs/partition/fs_ptable.c
> > https://github.com/apache/nuttx/blob/master/fs/partition/fs_txtable.c
> >
>

Reply via email to