Hi Robo
To use the SPI FLASH for data storage, outside of the file system, you can use the low level commands as you have already noted.
To use them, you define the file system as normal - entirely in internal FLASH memory area.
SPI FLASH is then 'pseudo'-memory mapped. It should always start at an address higher than the internal FLASH end address. It is defined by SPI_FLASH_START, where it often is simply defined to start after the internal FLASH as follows:
#define SPI_FLASH_START (FLASH_START_ADDRESS + SIZE_OF_FLASH)
The actual size of the SPI FLASH depends on the size of the SPI FLASH chip itself, and how many there are (if multiple chips are used).:SPI_DATA_FLASH_SIZE
When using the low level commands (like fnWriteBytesFlash()), the routine will automatically program the FLASH memory (either internal FLASH or SPI FLASH) depending on the address written to.
Therefore, if you write data to locations referenced to SPI_FLASH_START (up to SPI_FLASH_START + SPI_DATA_FLASH_SIZE) you will automatically be writing to the SPI FLASH. The same is valid for erase and read operations. Since the locations are outside of the file system the data content is not defined in any way so can be used by the application in the manor the application wants to use it. The only restrictions are due to the FLASH sector size since your application must be aware that it can only delete block sizes defined by the FLASH chips capabilities (granularity). Although it is usually possible to program individual bits from '1' to '0' the application must be aware that programming from '0' to '1' is only possible by first performing a delete of the section that the byte is in...some SPI FLASH chips offer methods for operating like 'pseudo-EEPROM' but these require more low level commands (fnSPI_command() - static function in the driver) and detailed knowledge fo the chip being used.
Regards
Mark