Forum: Mikrocontroller und Digitale Elektronik I2C STM32F407IG EEPROM 24LC256


von Ma B. (drumstick)


Angehängte Dateien:

Lesenswert?

Hallo Zusammen

Ich arbeite mit dem STM32F407IG und möchte Daten in eine EEPROM 24LC256 
schreiben und lesen. Eine Bedienpanel mit LCD Display und dem EEPROM 
sind Vorgabe. Text soll ins EEPROM gespeichert werden und bei 
entsprechender Anwendung soll der Text vom EEPROM gelesen werden und am 
LCD angezeigt werden. Das Ansteuern des Displays habe ich hingekriegt. 
Die Kommunikation erfolgt über einen I2C Bus.

Das EEPROM hat laut Datenblatt 32k x 1 Byte. Ich mache ein PageWrite 
nach Figure 6-2.

Den Code habe ich im Anhang zusammengestellt.

Mein Problem ist jetzt, dass ich mit einem Sequential Read die Daten aus 
dem EEPROM lesen möchte und in mein Array mit 64 Feldern speichern 
möchte. Dies klappt nicht. Ich habe auch gelesen, dass man Arrays nicht 
als Pointer übergeben kann. Bei Arrays und Pointer habe ich 
Nachholbedarf.

Byte-weise lesen geht:
1
Display_Read(0x0, &Data);
1
bool Display_Read (uint8_t reg, uint8_t *val) 
2
{
3
  uint8_t data[1];
4
  int32_t n;
5
6
  data[0] = reg;
7
  n = ptrI2C->SendData(IO_EXPAND_I2C_ADDR, data, 1, true);
8
  if (n != 1) return false;
9
10
  n = ptrI2C->ReceiveData(IO_EXPAND_I2C_ADDR, val, 1, false);
11
  if (n != 1) return false;
12
13
  return true;
14
}

Ich habs noch nicht ganz begriffen, hat jemand einen Tipp oder einen 
Hinweis?

Vielen Dank!

Grüsse

M.B.

von Ma B. (drumstick)


Lesenswert?

Ich habe 2 Fehler entdeckt:

So stimmt auch die Adresse dür den EEPROM
1
n = ptrI2C->SendData(EEPROM_I2C_ADDR, data1, 2, true);
2
  if (n != 1) return false;
3
4
  n = ptrI2C->ReceiveData(EEPROM_I2C_ADDR, val, EEPROM_PAGE_WRITE, false);

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.