27.01.2009

Arduino и Serial Flash

На днях прикрутил к Arduino флешку (микросхема AT24C512 от все того же ATMEL - емкость 65 Кбайт или 512Кбит). В принципе, с аппаратной библиотекой I2C получилось более чем тривиально.

Выводы микросхемы : A0,A1 сажаем на GND, за компанию с WP. SCL и SDA подключаем к аналоговым выводам Arduino (a4,a5) и притягиваем каждый через 5,1К к VCC.

Скетч:

/* 
   Подключение AT2424C15 по I2C
*/ 

#define ADDR  0x50

void setup() {
  Wire.begin();
  Serial.begin(38400);
  randomSeed(analogRead(0));  
}

void readByte(unsigned int addr) {
  Wire.beginTransmission(ADDR);
  Wire.send( (byte) addr >> 8 );
  Wire.send( (byte) addr & 0xff );
  Wire.endTransmission();
  Wire.requestFrom(ADDR, 1);
}

void writeByte(unsigned int addr, byte b) {
  Wire.beginTransmission(ADDR);
  Wire.send( (byte) addr >> 8 );
  Wire.send( (byte) addr & 0xff );
  Wire.send ( b );
  Wire.endTransmission();
}

void loop() {
  if (Wire.available()) {
    Serial.println(Wire.receive(),HEX);
  }
  int cmd = Serial.read();
  if (cmd != -1) {
    if (cmd == 'R') {
      readByte(0);
    }
    if (cmd == 'W') {
      long b = random(0,255);
      writeByte(0,b);
      Serial.println(b,HEX);
    }
  }  
}


Запускаем консольку на 38400, по команде W пишется случайное значение в нулевой адрес, по команде R его можно оттуда же прочитать. Адрес чипа - 0x50, если A0 и A1 притянуты к GND. Если подать на них одну из четырех комбинаций адреса, можно общаться с четырьмя разными чипами, "сидящими" на одной I2C, только надо правильно учитывать адрес (50,51,52,53).

Комментариев нет:

Отправить комментарий