@ifantus
An I2C SD card reader would be pretty neat and useful, don't think I've ever seen anyone do that. The bus isn't really meant for data like that, but if it were a logging only thing... I might play with that using my reader and a pair of Atoms.
It would be important to minimized how much data is getting transmitted over I2C though; maybe limit file name length (8.3?) and character set (base ASCII?) possibly excluding anything in folders too (root only), may have to limit what sort of data can be written as well (or send start/stop bytes to encapsulate strings)
Functions could be something similar to this:
- Standard stuff dealing with card
- bool hasCard() # If a card is present
- type getType() # SD, SDHC, SDXC, etc
- void formatCard(format) # format the card using "format" (fat32)
- format getFormat() # get the current format of the card (fat32)
- uint32_t getCapacity() # get the capacity of the card in bytes
- uint32_t getSpace() # get the free space of the card in bytes
- Timestamps (no need for a battery or RTC, just use the internal clock)
- datetime getDTM() # get current datetime if set
- void setDTM(datetime) # set the datatime
- datetime getCreated(str path) # file/folder created date
- datetime getModified(str path) # file/folder modified date
- File/Folder Operations
- bool fileExists(str path) # if file exists
- bool folderExists(str path) # if folder exists
- bool createFolder(str path) # create new folder(s) from path
- bool createFile(str path) # create new file (& parent folder(s)) from path
- bool move(str path, str path) # move folder/file
- bool rename(str path, str name) # rename folder/file
- bool delete(str path) # delete folder/file
- bool deleteBefore(str path, datetime) # delete any folder/file at path before certain date
- bool deleteWildcard(str path, str pattern) # delete any folder/file at path matching a simple pattern
- Data (two ways, just pushing data, might be problematic due to length, or chunking into columns with smaller data)
- bool append(str path, str/int/float data) # append data to file
- bool newline(str path) # start a new data line in the specified file
- bool column(str path, int column, str/int/float data) # write data to new line (columns must be in order)
- bool return(str path) # end writing to new data line (set modified date)
- bool truncate(str path) # clear file
- Other
- void setAddress(int address) # set I2C address
- uint16_t getFirmware() # get current firmware version