I will only be making a few 100 changes over the life of the product. It’s a holding area for a new firmware image to be written via USBMSD by the user and used by MCUboot to write out (raw) to the main boot flash. Ideally I would like a “FAT translator” that allows (say) a LittleFS partition to be seen as FAT via USB but I don’t think such a thing exists.
Obviously FAT is useless on flash for more “normal” things, which is why I have a 32MByte NOR flash running LittleFS for syslog and userlogs. In the limit I may just use a FAT formatted RAMdisk for the upgrade staging, but it depends on how much RAM my app ends up needing. > On 1 Nov 2024, at 15:12, Xiang Xiao <xiaoxiang781...@gmail.com> wrote: > > 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 >>> >>