Ich bin wirklich neu in der Elektronik und Embeds und kämpfe mit einigen wahrscheinlich grundlegenden Begriffen. (Ich habe einen Softwarehintergrund.)
Ich habe ein EEPROM ( 24LC256 ), das an einen MBED-Mikrocontroller angeschlossen ist , und ich möchte darauf schreiben. Das EEPROM-Gerät verwendet das I2C-Protokoll. Ich habe ein funktionierendes Beispiel, das ich hier bekommen habe .
Ich bin jedoch über viele Dinge verwirrt und das erste betrifft Register / Speicher und die Mindestbytes, die zum Senden für eine Operation erforderlich sind.
Meine Begründung
Dieses Gerät ist 256K == 256000 Bit. Dies impliziert, dass wir für den Zugriff auf ein einzelnes Register im Speicher 18 Bit benötigen, da das erste Register 00000000 00000000 00000000
und das letzte 11111111 11111111 11111111
.
Meine Fragen
Nein, deine Argumentation ist nicht richtig.
Schauen wir uns zunächst Ihre Mathematik an.
Das Gerät hat 256kbit. Das bedeutet, dass es ein Array von 32 KB enthält, was 32768 Bytes entspricht.
32768 ist 2 15 , sodass eine Adresse mit 15 Bit oder aufgerundet mit nur 2 Byte dargestellt werden kann.
Das heißt, Sie haben die Adressen 00000000 00000000 bis 01111111 11111111.
Sie können das alles erkennen, indem Sie sich Abbildung 5-2 in dem Datenblatt ansehen, auf das Sie verlinkt haben:
Nach dem Senden des Kontrollbytes senden Sie also 2 Adressbytes. Alle Datenbytes folgen dieser Sequenz. Also ja, das sind insgesamt drei Bytes, aber nur zwei davon sind die Adresse.
Das Einstellen dieser Adresse muss nur einmal pro Schreibsequenz durchgeführt werden. Sie sind nicht darauf beschränkt, nur ein Byte zu schreiben.
Sobald Sie die Adresse eingestellt haben, können Sie bis zu 64 Bytes (oder bis zum Ende der aktuellen 64-Byte-Seite) schreiben, ohne eine neue Adresse senden zu müssen. Sie könnten also die Adresse auf 23 setzen und dann die Bytes 23, 24, 25, 26, 27 schreiben. Das wären insgesamt 3 Bytes für die Steuerung + Adresse, dann 5 Bytes für die Daten, also insgesamt 8 Bytes. Wenn Sie 8/5 berechnen, erhalten Sie 1,6, was als Transaktions-"Effizienz" bezeichnet werden könnte. Für jedes Byte EEPROM, das Sie so schreiben, benötigen Sie 1,6 Bytes, um dies zu tun. Das gleichzeitige Schreiben von mehr Bytes verbessert diese Effizienz.
Die beste Effizienz besteht darin, eine ganze Seite auf einmal zu schreiben, was wäre .
Beim Lesen sieht es etwas anders aus. Dies liegt daran, dass der Chip seinen eigenen internen Adresszeiger zum Lesen beibehält. Sobald Sie die Adresse eingestellt haben, wird nach dem Lesen automatisch auf die nächste Adresse hochgezählt.
Das Einstellen der Adresse dauert wie bisher 3 Bytes - das Steuerbyte plus die beiden Adressbytes. Aber um tatsächlich zu lesen, müssen Sie eine weitere Transaktion mit einem anderen Steuerbyte durchführen. Um also ein Byte zu lesen, braucht man 1+2+1+1 Bytes. Das wäre ein Wirkungsgrad von was gar nicht so effizient ist. Die Dinge werden jedoch viel effizienter, wenn Sie diesen internen Adresszeiger verwenden und mehrere Bytes lesen. Um die Beispieladressen zu nehmen, die wir zum Schreiben verwendet haben, wäre die Effizienz beim Lesen - eine enorme Effizienzsteigerung.
Es gibt also andere kleine Tricks, die Sie anwenden können. Wenn Sie zwei Bytes lesen möchten, die im EEPROM nahe beieinander liegen, kann es tatsächlich effizienter sein, den gesamten Speicher zwischen den beiden interessierenden Bytes sequentiell zu lesen und die Bytes zu verwerfen, an denen Sie nicht interessiert sind.
Und ja, das ist so ziemlich typisch für alle EEPROM-Bausteine dieser Klasse. Aber besonders schnell sollen sie dann auch nicht sein - sie sollen kleine Mengen an Konfigurationsinformationen für ein System enthalten, die beim Start einmal gelesen und von da an nicht mehr so oft referenziert werden. Für einen schnelleren und höheren Durchsatz würden Sie normalerweise ein serielles Flash-Gerät anstelle von EEPROM verwenden. Sie haben eine größere Kapazität und einen effizienteren Zugriff, aber das Schreiben auf sie ist komplizierter, da Sie eine ganze Seite löschen müssen, bevor Sie sie schreiben können. Sie werden heutzutage oft als BIOS-Chips in Computern – insbesondere Laptops – verwendet, wo viel gelesen und wenig geschrieben wird.
user_1818839
PlasmaHH
Fizz
PlasmaHH