Hallo schnuppel,
Asche aufs Haupt, du hast recht.
Ich zitiere aus dem Datenblatt:
For the IS24C16-2 and IS24C16-3, the bits(B2, B1 and B0)
are used for memory page addressing (the IS24C16-2 and
IS24C16-3 are organized as eight blocks of 256 bits).
Der 24C16 wird also als 2kBit-Speicher angesprochen.(256 Adressen * 8Bit) Die 8 Speicherbänke (2kBit*8= 16kBit) werden dann über die Slave- Adresse ausgewählt. Klar, damit spart man sich die 16Bit-Memory-Adresse, kann aber nur 1 Chip (bzw. max 16 KBit) am Bus anbringen.
Hier komme ich aber gleich auf ein Problem, über das pebisoft noch gestolpert sein könnte:
Wenn der 24C16 mit 8 bit Memory plus 3 bit Adresse am Limit der Adressierbarkeit ist, dann muß es für größere Speicher eine 16 bit Adresse geben.
Jetzt kann ich mich auch mal selber zitieren: (22.10.04)
Und lies dir den letzten Absatz im Programm durch. Du willst ja mehr als 256 Byte schreiben.
Gruß, Michael
Im letzten Absatz steht doch tatsächlich:
Zitat:
when you want to control a chip with a larger memory like the 24c64
Zitat Ende.
Dazu der Text aus dem Datenblatt des 24C65:
The next
three bits of the control byte are the device select bits
(A2, A1, A0). They are used by the master device to
select which of the eight devices are to be accessed.
Und siehe da: Die Adressbits werden wieder gebraucht
Und ein Stück weiter steht es:
This indicates to the addressed slave
receiver (24C65) that a byte with a word address will follow
after
Der (an A0-A2 eingestellten) Slave-Adresse folgt also ein Word für die Memory-Adresse. Das gepostete Programm funktioniert also nicht bei Chips größer 24C16. Nach dem Senden der (8bit) Adresse wartet der (24c65)Slave nämlich auf das 2.Byte der Adresse, während der Master seinerseits lesen will. Da der Slave nicht antwortet, liest der Master den High-Pegel des Busses, und der ist 255.
Gruß, Michael