Sind 3 Bytes pro Minute erforderlich, um ein Register in einem 256-KB-EEPROM zu adressieren?

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 00000000und das letzte 11111111 11111111 11111111.

Meine Fragen

  • Zunächst einmal, ist meine Überlegung richtig?
  • Bedeutet das alles, dass ich jedes Mal, wenn ich lesen oder schreiben möchte, mindestens 3 Bytes senden muss?
  • Gilt das generell für alle Geräte?
Nicht unbedingt. Das Schreiben in ein EEPROM kann auf Seitenebene erfolgen, wo Sie nur 1 Byte benötigen, um die Stelle innerhalb einer Seite zu adressieren, dann geben Sie die anderen zwei Bytes nur einmal an, um auszuwählen, welche Seite programmiert werden soll.
Beachten Sie, dass Sie normalerweise auf Oktette zugreifen, also 16 Bits für die Adresse und ein Oktett für die Daten benötigen.
256 Kbit = 256 * 1024 = 262144 Bit. Nur HDD-Hersteller verwenden Dezimalmultiplikatoren.
@RespawnedFluff: Und diese Netzwerk-Typen

Antworten (1)

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:

Geben Sie hier die Bildbeschreibung ein

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 3 + 64 64 = 1.046875 .

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 1 + 2 + 1 + 1 1 = 5 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 1 + 2 + 1 + 5 5 = 1.8 - 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.

Danke schön! Eine sehr intuitive Erklärung, die die Wolke für mich ein wenig geräumt hat :)
Die Verwirrung zwischen 1024 und 1000 ist ein Grund, die SI-Präfixe für Binärzahlen zu verwenden : kibi (Ki), mebi (Mi), gibi (Gi) usw. (und sie haben die Abkürzung für kibi richtig geschrieben!☺) .
@Paul A. Clayton: Abgesehen davon, dass, wenn Sie jemals versuchen, die SI-Präfixe kibi/mebi/gibi in einem realen professionellen Ingenieurkontext zu verwenden, insbesondere in den USA, die Reaktion wahrscheinlich GTFO ist! (Echte Erfahrung von mir.)