WyoLum is proud to announce I2SD which provides disk drive storage to your Arduino based project.
I2SD is an I2C interface for an SD card compatible with ClockTHREE and ClockTHREEjr. The idea behind I2SD is to allow easy read/write access to files stored on an SD card. If the I2C bus is already part of a circuit, I2SD does not require any extra pins, therefore optimizing pin usage on the micro.
Thanks to AdaFruit and SparkFun for sharing there SD designs!
Why I2SD? Good question! After all there are a few boards that allow you to connect an SD card to your project: AdaFruit’s data logging shield, and SparkFun’s MicroSD shield are two stand outs in this category.
There are three reasons you should consider I2SD:
- ATMEGA328 memory limitations.
- ATMEGA328 pin count.
- You want a small form factor stand alone data logger.
On ClockTHREE we are both pin count and memory limited and we wanted to be able to store lots of cool animations. We designed for the stand alone data logger as a target of opportunity.
The next rev will sport optional locations for an RTC chip and battery back up.
- SD card
- 2 LEDs
- ChronoDot or DS3231 (optional)
- 6-pin ISP
- 2x C3SB (see below)
- Buckler (see below)
Using I2SD from an Arduino Master (Buckler interface see below)
Currently there are five methods implemented for simple file reading and writing.
ping(uint8_t* ping_data, uint8_t n_byte); seek(unsigned long addr); open(char* filename, uint8_t mode); read(uint8_t *data, uint8_t n_byte); write(uint8_t *data, uint8_t n_byte);
Which can be used to read and write a small file: //Write a file i2sd.open("NEW_FILE.TXT", FILE_WRITE); char* msg="Hello from I2SD_Client.pde. " "Please note this is longer than 32 chararters."; i2sd.write((uint8_t*)msg, strlen(msg) + 1); //Read it back i2sd.open("NEW_FILE.TXT", FILE_READ); uint8_t msg_back; unsigned long n_byte = i2sd.read(msg_back, 100); msg_back[n_byte] = NULL; Serial.println((char*)msg_back); write(uint8_t *data, uint8_t n_byte);
This is the first peripheral to implement the ClockTHREE Serial Bus interface which deserves a post of its own (coming). Its like USB for Arduino which allows the connection of many peripherals without increasing pin usage. C3SB is build on I2C
C3SB physical interface, 4 pins with 0.1″ spacing:
- VCC — 5V min 100mA
- SCL — I2C Clock pin
- SDA — I2C Data pin
- GND — +0V
C3SB software Master interface:
I2C transfers are limited to 32 bytes. The C3SB allows up to 255 bytes by breaking them up to 32-byte I2C packets for you. Two read/write functions.
uint8_t read_from(uint8_t device_id, uint8_t* dest, uint8_t n_byte); boolean write_to(uint8_t device_id, uint8_t *payload, uint8_t n_byte);
Buckler form factor (preview)