On a USB device I am developing, I want to offer a USB Mass Storage endpoint for configuration updates.
The device is connected internally via a USB pin header, and to update the configuration, a user would only have to copy a file onto the "fake" flash drive, so no additional software would be required. This makes the solution portable between all kinds of operating systems and improves user experience.
Using LUFA, I have managed to implement a USB device with a Mass Storage endpoint that supports enough basic SCSI commands to be recognised as a storage device by Windows.
But, now that I'm trying to fully implement the SCSI Reduced Block Command set, I realise that there might be an issue. The MCU I'm using, an Atmega32u4, only has 2.5KB of SRAM. Part of that is taken up by global variables and buffers for the primary functionality, so I'd like to use only 1KB of that for the SCSI storage capabilities.
TL;DR from above: I only have about 1KB available for a storage buffer to implement the most basic USB Mass Storage functionality on an MCU.
From my knowledge, to properly function as a block device, a mass storage device needs to be formatted. I don't know what the leanest commonly (Windows and Linux) supported file system is. My assumption is FAT32, but in any case it needs to store all of the info associated with a partition and one file on it in addition to the file itself. Additionally, SCSI seems to work on a 512 byte block size, so the whole "flash drive" would be written to with just two block writes, which sounds like it would cause trouble.
My question(s) now is/are:
Is it possible to make/emulate a fully functioning USB Flash Disk with just 1KB of storage? What would prevent me from doing this? How much overhead space would an empty partition need? Could I maybe even implement this without partitioning the device by using a non-SCSI USB mode?