The On-Board Flash File System API uses the on-board W25Q128 flash chip that is (almost) always connected to the P2.
It turns the unused 15.5MB (after the initial 512KB boot area) into a solid-state drive for up to almost 4,000 files.
– Low-level features include wear leveling, format, read/write, stats.
– The driver is multi-cog compatible.
– CS is set high-on for compatibility with the built-in microSD card socket.
Follow and join in with the development progress at our forums: https://forums.parallax.com/discussion/175470/on-board-flash-file-system#latest
Simple code snippet for any P2 Edge module:
CON _CLKFREQ = 320_000_000
OBJ Flash : "FlashFileSystem_16MB"
PUB gox()
debug("Abort", sdec(go()))
PUB go()
' Flash.Format() 'Comment out this line to not erase all files
Flash.Mount()
ShowStats() 'Do a bunch of file stuff while reporting status, along the way
ShowFiles()
WriteFile(@"file1", @file1)
WriteFile(@"file2", @file2)
WriteFile(@"file3", @file3)
ShowStats()
ShowFiles()
if Flash.Exists(@"file3") and not Flash.Exists(@"Apples")
Flash.Rename(@"file3",@"Apples")
Flash.Delete(@"file1")
ShowStats()
ShowFiles()
PRI ShowStats() | BlocksUsed, BlocksFree, Files
BlocksUsed, BlocksFree, Files := Flash.Stats()
debug(udec(BlocksUsed, BlocksFree, Files))
PRI ShowFiles() | ID, Bytes, Handle, Ptr, x, byte Filename[60], byte Buff[30]
repeat
Flash.Directory(@ID, @Filename, @Bytes) 'get next file
if Filename[0] 'is there a filename?
ReadFile(@Filename, @Buff) 'read file
debug(zstr(@Filename), udec(Bytes, ID), zstr(@Buff)) 'show filename, bytes, ID, and file contents
else
quit 'no more files, quit
PRI ReadFile(pFilename, pBuff) | Handle, x
Handle := Flash.OpenRead(pFilename) 'open file for reading
repeat Flash.SizeOf(pFilename)
byte[pBuff++] := Flash.ByteRead(Handle) 'read bytes
Flash.Close(Handle) 'close file
PRI WriteFile(pFilename, pBuff) | Handle
debug("Writing: ", zstr_(pFilename))
Handle := Flash.OpenWrite(pFilename) 'open file for writing
repeat 'write bytes until 0 written
Flash.ByteWrite(Handle, byte[pBuff])
while byte[pBuff++]
Flash.Close(Handle) 'close file
DAT
file1 byte "The car goes.",0
file2 byte "His cat meows.",0
file3 byte "My boat floats.",0