Hi Alan, Yes, I would be using the MCU's own on-package flash. Thanks for the helpful blog link! I was also planning to use SmartFS so this revealed a new challenge: converting from SmartFS to FAT so that users have an easy experience. This sounds like it might be more of a challenge than I originally thought. I hadn't heard of MTP before, so maybe I'll take a look at that. If it can circumvent this filesystem compatibility thing, that would be awesome.
Thanks for the help! Matteo On Tue, Apr 28, 2026 at 3:24 PM Alan C. Assis <[email protected]> wrote: > Hi Matteo, > > If by "its own flash memory" you mean the internal MCU flash memory, then I > never tried it. > > But, for external SPI Flash you can just use the flash device as USB MSC > LUN as I did here: > > https://acassis.wordpress.com/2016/01/03/using-the-nuttxs-usb-mass-storage-to-copy-spi-nor-flash-content/ > > In my case I was using SmartFS and downloading the raw content and then > mounting it later on the computer using FUSE SmarFS driver that Ken Pettit > created. > > If you are using FAT FS you don't need this step, but of course if some > application is writing in the flash while you copy it, the Mass Storage > could get corrupted. > > I think it is possible to force the USB MSC to be exported as RDONLY, but I > didn't see this option in the NuttX menuconfig, it could be a good > addition. > > BTW, I think the best alternative should be using MTP instead of MSC. Seems > like Xiaomi contributed a USB MTP to drivers/usbdev/ but looking at the > source code I noticed it is only a wrapper, maybe for some userspace > implementation. > > This is the problem with hidden features: someone submits a contribution > without any documentation or board config, so people will have difficulty > understanding and making it work. > > BR, > > Alan > > > > On Tue, Apr 28, 2026 at 2:56 PM Matteo Golin <[email protected]> > wrote: > > > Hello, > > > > I am currently working on a project for a device which logs some data to > > its own flash memory. I then want to be able to extract this data to a > host > > device (laptop, desktop, etc.) over a USB connection. For this, my aim > was > > to use USB mass storage. > > > > Looking at the docs for it ( > > > https://nuttx.apache.org/docs/latest/applications/system/usbmsc/index.html > > ), > > it appears that in order to allow the files to be downloadable over USB, > I > > need to first unmount the file system that the files were stored in so > that > > the USB interaction doesn't corrupt them. Is there any way around this, > or > > is there a way to make the USB mass storage read only to avoid potential > > corruption? Not the biggest deal if not. > > > > I also see that the default commands for this feature are msconn/msdis. I > > would be connecting/disconnecting via my own application, which I suppose > > means I would perform this via ioctls/something. My device will also be > > using a shell over USB. Is it possible to have the shell functionality > > suspended by a similar command to `msconn` and then restored when the > host > > driver "ejects" the USB mass storage device? This way the user can toggle > > between doing other things in the shell and extracting files. > > > > If anyone has used this feature and has tips, let me know! > > > > Best, > > Matteo > > >
