Skocz do zawartości

Adresacja pamięci EEPROM I2C - kilka chipów


DeadGeneratio

Pomocna odpowiedź

Dzień dobry. Potrzebuję rozszerzyć pamięć eeprom w arduino uno o kilka scalaków z pamięcią 1kB. Mam 24AA01, który faktycznie dodaje 1kB, ale zauważyłem, że niezależnie czy wybiorę adres 0x50, 0x51, 0x52 czy 0x53, komunikacja z scalakiem następuje. W przyszłości chcę dodać więcej takich układów, jak zatem ustawić im konkretny adres w magistrali I2C? Poniżej dodaję przykładowy kod czyszczenia pamięci scalaka bądź wypełnienia go losowymi wartościami, gdzie adresacja jak wyżej działa w pełni poprawnie.

 

#include <Wire.h>
#define device_address 0x50 // Adres urządzenia działającego na I2C
#define quantity 1 // Rozmiar odczytanej komórki - 8 bitów = 1 bajt, 16 bitów = 2 bajty
#define eeprom_size 128 // Liczba komórek - do odczytania z datasheetu układu scalonego
int zero = 0;
int FF = 255;
void eraseEEPROM(){
  for(int i=0;i<=eeprom_size;i++){
    Wire.beginTransmission(device_address);
    Wire.write(i);
    Wire.write(zero);
    Wire.endTransmission();
    delay(5);
  }
  Serial.println("Memory fully cleared");
}

void fillRandomEEPROM(){
  int randNumer;
  for(int i=0;i<=eeprom_size;i++){
    randNumer = random(0, 256);
    Wire.beginTransmission(device_address);
    Wire.write(i);
    Wire.write(randNumer);
    Wire.endTransmission();
    delay(5);
  }
  Serial.println("Memory fully filed with random data");
}

void setup(){
  Serial.begin(9600);
  Wire.begin();
  randomSeed(analogRead(0));
  eraseEEPROM();
  fillRandomEEPROM();
  //fillFFEEPROM();
}


void loop(){
  
}

 

Edytowano przez DeadGeneratio
Link do komentarza
Share on other sites

24AA01 nie używa pinów A0, A1 i A2. Jest to napisane w nocie scalaka.

Jak chcesz więcej niż 1k to użyj innego scalaka. Np.

 

https://ww1.microchip.com/downloads/en/DeviceDoc/AT24C01C-AT24C02C-I2C-Compatible-Two-Wire-Serial-EEPROM-1Kbit-2Kbit-20006111A.pdf

https://ww1.microchip.com/downloads/en/DeviceDoc/AT24C32D-I2C-Compatible-Serial-EEPROM-Data-Sheet-20006047A.pdf

 

Edytowano przez Nefarious19
Link do komentarza
Share on other sites

38 minut temu, DeadGeneratio napisał:

W przyszłości chcę dodać więcej takich układów, jak zatem ustawić im konkretny adres w magistrali I2C?

Wiele układów EEPROM ma tylko jeden zakres adresów, co jest niestety uciążliwe. Osobiście wolę FLASH w NOR po SPI. Mogę mieć ich na ile starczy mi MUXów. W I2C też można zastosować MUX, ale to trochę zabawy i może wpłynąć na jakość / prędkość / błędy w transmisji. Ogólnie polecam, wychodzi drożej, ale za to bez problemu możesz mieć do 128Mb pojemności 😉 Jedyny problem to konieczność czyszczenia całej strony / sekcji / bloku przed nadpisaniem danych 😞 

Edytowano przez H1M4W4R1
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.