Announcement: I2SD, A disk drive for Arduino

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:

  1. ATMEGA328 memory limitations.
  2. ATMEGA328 pin count.
  3. 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.

Details

Components:

  • ATMEGA328
  • SD card
  • 2 LEDs
  • ChronoDot or DS3231 (optional)

Interfaces:

  • 6-pin ISP
  • FTDI
  • 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[100];
 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);

C3SB (preview)

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:

  1. VCC — 5V min 100mA
  2. SCL — I2C Clock pin
  3. SDA — I2C Data pin
  4. 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)

A “buckler” is a small shield, 15 to 45 cm (6 in to 18 in) in diameter , gripped in the fist (From Wikipedia).  I2SD is a small shield so we thought this was a clever name for this form factor.

Leave a Reply