Forum: Compiler & IDEs I2C EEPROM Adressierung


von Tobias G. (tobster)


Lesenswert?

Ich bin nicht ganz schlüssig, wie ich in eine I2C-EEPROM schreiben soll.
Hab mir die Routinen von P. Fleury dazu angesehen und da war auch ein
Beispiel dabei. Allerdings braucht das von mir verwendete EEProm zwei
Adressbytes. Ich bin mir jetzt nur nicht ganz sicher, ob man nun das
höherwertige Byte zuerst senden muss, oder das niederwertige...

void eeprom_writebyte(uint16_t addr, uint8_t value)
{
  i2c_start_wait(Dev24C256+I2C_WRITE);  // Device auswählen zum
Schreiben
  i2c_write(addr&0xFF);          // Adresse Lo-Byte
  i2c_write((addr&0xFF00)>>8);      // Adresse Hi-Byte

  i2c_write(value);
  i2c_stop();
}

von Peter Sager (Gast)


Lesenswert?

Ich weiss es auch nicht, aber ich würde einfach mal im Datenblatt
nachlesen...

von Tobias G. (tobster)


Lesenswert?

Danke für diesen hilfreichen Tipp. Da hab ich natürlich bereits
nachgesehen, leider reden die da aber nur von Bits, im speziellen von
MSB und LSB. Und zwar kommt das MSB zuerst.

von Matze K. (phytomed)


Angehängte Dateien:

Lesenswert?

Moin,

ich hatte das gleiche Problem und "glaube",
dass dies eine Lösung ist.
Dabei soll zuerst die ersten 8 Bits übertragen und
dann die letzten 8 Bits.
Die Routinen stammen von Fleury und sind nur
modifiziert.

Falls die "Aufteilung" der 16 Bits in
zwei mal 8 Bits nicht stimmt  bitte ich um Rückmeldeung.

Bis dann
Matthias

von Matze K. (phytomed)


Angehängte Dateien:

Lesenswert?

hoffentlich jetzt eine C-Source
Matthias

von Tobias G. (tobster)


Lesenswert?

Denke mir auch das das höherwertige Byte zuerst kommt, wie in deinem
Quelltext. Im Test funktioniert es auf jeden Fall. Hab dazu aber nicht
extra die Quelle umgeschrieben, sondern sende einfach zwei Bytes
nachein ander.

von A.K. (Gast)


Lesenswert?

"leider reden die da aber nur von Bits, im speziellen von
MSB und LSB. Und zwar kommt das MSB zuerst."

Da hast Du doch die Antwort: Das MSB einer 16-Bit Adresse ist nun
einmal im oberen Byte und das LSB im unteren.

von Tobias G. (tobster)


Lesenswert?

Wenn man significant mit Wertigkeit übersetzt kann man so drauf kommen.
Nur bin ich der Meinung, das es eher Bedeutungsvoll heisst...

von A.K. (Gast)


Lesenswert?

Standard-Wörterbuch benutzt?

Die sind in dieser Branche nur bedingt hilfreich. Die Bedeutung des
Begriffs MSB ist in der DV dankenswert eindeutig. Auch bei Prozessoren,
deren Bit 0 links und Bit 31/63 rechts liegt (z.B. PowerPC), ist MSB
links.

von Tobias G. (tobster)


Lesenswert?

Wenn Bit 0 das MSB ist, widerspricht das doch wiederum der Definition,
oder?

http://dict.leo.org/?search=most+significant+bit

von A.K. (Gast)


Lesenswert?

Wieso? Auf PowerPC hat das Bit 0 den höchsten Stellenwert, Bit 63 den
geringsten, die Bitnummer ist einfach nur eine Nummer, kein
Stellenwert. Die Arithmetik hat IBM ja nicht neu erfunden, nur die
Nummerierung ist anders.

Generell landet man leicht in Teufel's Küche, wenn man zwar das
oberste Byte aber das unterste Bit mit 0 numeriert (umgekehrt auch, das
ward aber noch nicht gesichtet). Motorola hatte das bei 68000 verbrochen
und durfte beim 68020 deshalb umnummerieren - alte Bit-Befehle rechts
nach links, neue Bitfeldbefehle links nach rechts.

von Tobias G. (tobster)


Lesenswert?

OK, kapiert... Ich bleibe dann doch lieber dabei, dass das MSB auch den
höhsten Zähler hat, das wirkt dann auch logischer... ;-)

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.