PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : IC2 EEprom größer 16K ansprechen?



MrQu
30.05.2006, 09:03
Morgen,

habe eine Frage zu den IC2 EEproms.

Ich habe mit den Dingern schon ein bischen gearbeitet, allerdings nur nur in der 16K Version.

Jetzt möchte ich aber ein EEprom mit 512K oder 1M ansprechen.

Wie mache ich das???
Habe doch eigendlich nur 4 Bit für die Daten, 3 Bit für die Adresse und 1 Bit R/W.

Selbst wenn ich die 8 Bit zu verfügung hätte würde ich ja auch nur 256K ansprechen können.

Wie kommt man jetzt auf die 512K bzw. 1M???


Gruß MrQu

uwegw
30.05.2006, 10:55
Habe doch eigendlich nur 4 Bit für die Daten, 3 Bit für die Adresse und 1 Bit R/W.
Selbst wenn ich die 8 Bit zu verfügung hätte würde ich ja auch nur 256K ansprechen können.

Das ist ja nur die Adresse des EEPROMs am Bus. Die interne Speicheradresse wird separat übertragen. Die größeren haben dann 16bit-Speicheradressen, du musst also vor ein Zugriff erst zwei Bits mit der gewünschten Speiherzelle übertragen.

EdeC
30.05.2006, 11:37
Hallo MrQu
hier erst mal zwei Datenblätter, damit wir über die gleichen EEPROMs
sprechen.

1/2/4/8/16K
http://www.atmel.com/dyn/resources/prod_documents/doc5092.pdf
512K
http://www.atmel.com/dyn/resources/prod_documents/doc5112.pdf

Du schreibst:
>Habe doch eigendlich nur 4 Bit für die Daten, 3 Bit für die Adresse und 1 Bit R/W.

Ich denke mal, du meinst damit die ersten Signale, die du zum EEPROM schreibst? Es sind nicht wirklich 4 Datenbits und mehr als 3 Adressbits brauchst du natürlich auch. Ich erklär einfach mal drauf los und du ignorierst einfach, was du schon weißt.

Der I2C-Bus hat zwei Signale, SDA und SCL.
Im Ruhezustand des Busses sind beide Signale high.

Wenn ich jetzt mit irgendeinem IC reden will, das an diesem Bus hängt, dann muß ich erst einmal eine Vorschrift verletzen, nämlich die Vorschrift, daß sich SDA nur ändern darf, während SCL low ist. Ich bewege also als erstes SDA auf low, während SCL noch high ist. Diese Verletzung (SDA geht auf low, während SCL high ist) nennt sich START. Abgekürzt S

Das merken alle angeschlossenen ICs und horchen jetzt auf die folgenden 8 Bits. Aus den ersten 7 Bits leitet jedes ICs ab, ob es gemeint ist.
Das achte Bit sagt dem IC ob es weiter Daten empfangen soll (write) oder selbst Daten ausgeben soll (read).

Die ersten 7 Bit sind nun folgendermaßen gemeint:

Die ersten 4 Bits sind ein sogenannter familiy code. Der Erfinder des I2C-Busses, Philips Semiconductor hat eine Tabelle gemacht, in der er zum Beispiel festgelegt hat, daß memory devices (z.B. EEPROMs) den familiy code 1010 haben sollen.

Die nächsten 3 Bit sind von IC zu IC unterschiedlich genutzt, haben aber wohl meistens die Bedeutung einer Adresse. Das kann man im ersten Datenblatt (1k/../16K) recht gut sehen. Die 1K EEPROMs z.B. vergleichen die drei Bits, genannt A0..A2, mit den Pegeln an ihren gleichnamigen Pins.
Sie fühlen sich nur dann angesprochen, wenn Bits und Pins gleich sind.

Beispiel:

Am I2C-Bus hängen zwei 1K-EEPROMs. IC1 hat A2..A0 mit GND verbunden, IC2 hat A2 und A1 mit GND verbunden aber A0 mit VCC.

Wenn ich jetzt folgendes schicke: (S = START)

S 1010 000 1

dann wird sich IC1 angesprochen fühlen und in den Lesemodus gehen (Lesemodus, da achtes Bit = 1)

Wenn ich statt dessen folgendes schicke

S 1010 001 1

dann wird sich IC2 angesprochen fühlen.

Damit kann ich bis zu acht gleiche ICs an den Bus hängen und sie trotzdem gezielt ansprechen.

Nun zu den Adressen des EEPROM.
Die EEPROMs sind 8 Bit breit organisiert. Das bedeutet: von einer Adresse die ich verwende, sind immer 8 Bits betroffen. Bei einem 1k-EEPROM brauche ich also 128 Adressen (128*8=1024), was ich mit einem 7 Bit Adresswort erledigen kann.

Beispiel:

Wenn ich die 8 Bit an der Adresse 8 beschreiben will, dann muß ich zuerst das IC zum Schreiben adressieren (S 1010 000 0), dann die 7 Bit Adresse übertragen (*000 1000) und danach die gewünschten 8 Datenbits. Wenn ich jetzt ein STOP erzeuge, dann werden die Datenbits in das EEPROM gebrannt.

Ein STOP (abgekürzt P) ist eine zweite Verletzung, der Vorschrift, daß sich SDA nur ändern darf, während SCL low ist. Ich bewege dazu SDA auf high, während SCL high ist.

Noch drei Anmerkungen zum Beispiel:
1. Nur ein IC hängt am Bus, Pins A2..A0 auf GND
2. bei der Adresse (*000 0010) bedeutet * beliebig 1 oder 0.
3. Die Datenbits werden im EEPROM zuerst in einem RAM gesammelt
und erst beim STOP wirklich gebrannt. Man kann bis zu 8 Wörter mit je 8 Bits in einem Rutsch schreiben und sie gleichzeitig brennen lassen. Bei größeren EEPROMs noch mehr.

Bis zu einer EEPROM-Größe von 2KBit kam man mit einer 8 Bit Adresse hin. Nun mußte man sich entscheiden, wie man bei 4KBit die nächsten Adressbits überträgt.
Entweder man muß prinzipiell 2x 8-Bit als Adresse übertragen, wovon dann bei 4KBit 7 Bits nicht benutzt werden oder man beschränkt die Anzahl der anzuschließenden EEPROMs auf die Hälfte (nur noch 4 statt 8 Stück) und nutzt nur noch A2 und A1 zum Dekodieren des ICs und nutzt A0 als weiteres Adressbit. Für Letzteres hat man sich entschieden. Im Datenblatt wird das als Page-Bit bezeichnet. Das 4KBit EEPROM ist also sozusagen in zwei Pages mit je 2KBit geteilt.

Das ging natürlich nur bis 16KBit gut, von denen man nur ein einziges an den Bus hängen durfte. (Damit sind wir übrigens bei den 3 Adressbits, von denen du gesprochen hast, es sind nämlich die Pagebits P2..P0.)

Danach mußte man zwangsläufig auf 16 Bit Adressen umsteigen. Es gibt aber auch weiterhin ein lustiges Mischmasch von unterschiedlich genutzten A2..A0, sodaß man in jedem Fall genau das Datenblatt studieren muß.

Überhaupt muß man sich die Datenblätter gründlich anschauen, da sie oft nicht besonders verständlich geschrieben sind und man oft erst
beim x-ten Mal lesen versteht, was da überhaupt gemeint ist.

Am wichtigsten sind m.E. dabei die Logikdiagramme auf den Seiten 10 und 11, da hier der genaue Ablauf beim Lesen und Schreiben zu sehen ist.
Blöd ist nur, daß nicht farblich markiert ist, wer denn nun die Daten oder die Acknowledge-Bits auf den Bus legt. Wenn du dich da mal durchbeißt, indem du dir die beiden Seiten ausdruckst und mit zwei Farben reinmalst, wer gerade dran ist, dann wirst du sicher durchblicken.

Viel Erfolg dabei O:)

Ich hoffe, ich konnte helfen.

MrQu
01.06.2006, 02:54
Morgen @EdeC

danke für die schnelle Hilfe.

Werde ich am Wochenende gleich mal testen.

Noch eine kleine Frage.
Ich finde bei manchen EEproms diesen Anschluß "WP".

Wenn ich das richtig verstanden habe ist das so eine Art schreibschutz.
Ist das koreckt?

Gruß MrQu

MrQu
01.06.2006, 03:06
Nochmal morgen *Sorry*

bin n "Doff" ja klar habe ich ja eh schon angeschlossen.

Bin glaube ich noch nicht ganz wach um die Uhrzeit.


Gruß MrQu