Forum: Mikrocontroller und Digitale Elektronik 93CXX - Memory Organization


von Oliver J. (skriptkiddy)


Lesenswert?

Hi Leute,

nach so langer Zeit muss ich mich auch mal wieder zu Wort melden. Bin 
gerade dabei ein altes Projekt aus Spaß an der Freude zu redesignen. :) 
Es geht dabei um einen USB-EEPROM-Programmer (24Cxx / 93Cxx). Der alte 
mit V-USB war mir einfach zu langsam bei großen 24C-EEPROMs. 
Mittlerweile hab ich das auf nem ATMEGA32u4. Das Projekt wird noch 
OpenSource.

Der 24C-Part ist nun schon umgesetzt und jetzt ist der 93C-Teil dran. 
Dabei hat sich mir die Frage gestellt, wie man ein byte-orientiertes 
Hexfile in die EEProms schreiben soll. Genauer gefragt: Welche Byteorder 
herrscht bei 16Bit-Organization (Man kann ja leider nicht alle 93C-ICs 
byte-weise schreiben)? Da hab ich einfach mal pragmatisch ein 16Bit Wort 
in ein 93Cxx geschrieben und 2x 8Bit ausgelesen, um die Endianess zu 
bestimmen. Das hab ich, um auf Nummer sicher zu gehen für alle 
93C-EEProms mit ORG-Pin, die ich hier hab gemacht und habe sowohl Big- 
als auch Little-Endian beobachten können. Da muss die 
Programmer-Software also einen Schalter für bekommen, was sehr unschön 
ist. Eine einheitliche Lösung hätte ich hier durchaus bevorzugt.

Mir stellt sich nun die Frage, wie z.B. Hersteller von 
Programmiergeräten damit umgehen bzw. wie ihr damit umgegeht? Wie sind 
da eure Erfahrungen diesbezüglich?

PS. Mir ist es durchaus bewusst, dass diese Teile uralt sind und es 
vernünftig betrachtet keinen wirklichen Sinn macht, den 93Cxx-Support 
auch nur ansatzweise in Betracht zu ziehen. ;)

Grüße Oliver

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Oliver J. schrieb:
> Da muss die Programmer-Software also einen Schalter für bekommen, was
> sehr unschön ist.

Das ist nur bei komplett gelöschten EEPROMs nötig, sonst genügt ein 
Lesen mehrerer Bytes im 8- und im 16-Bit-Modus, um die Organisation zu 
erkennen.

Bei einem leeren EEPROM genügt es, im Byte-Modus z.B. 01 02 zu schreiben 
und mit einem 16-Bit-Zugriff auszulesen. Ist natürlich ein 
Schreibzugriff mehr, und daher nicht ganz elegant, aber da die Dinger 
ein paar hunderttausend Schreibzyklen durchhalten, wohl auch kein Drama.

von Oliver J. (skriptkiddy)


Lesenswert?

Rufus Τ. F. schrieb:
> Das ist nur bei komplett gelöschten EEPROMs nötig, sonst genügt ein
> Lesen mehrerer Bytes im 8- und im 16-Bit-Modus, um die Organisation zu
> erkennen.
>
> Bei einem leeren EEPROM genügt es, im Byte-Modus z.B. 01 02 zu schreiben
> und mit einem 16-Bit-Zugriff auszulesen. Ist natürlich ein
> Schreibzugriff mehr, und daher nicht ganz elegant, aber da die Dinger
> ein paar hunderttausend Schreibzyklen durchhalten, wohl auch kein Drama.

danke für die schnelle Antwort. Die Idee ist grundsätzlich gut. Werd ich 
so mit einbauen. Leider deckt das aber nur die Fälle für EEProms mit 
ORG-Pin an. 93C06 zb. Habe auch einige 93C46 ohne ORG. Diese lassen sich 
nicht im 8-Bit Modus betreiben.

Weiß zufällig jemand von welcher Byteorder im 16-Bit Modus im Normalfall 
beim Kommunizieren ausgegangen wird? Also ich meine die standardmäßige 
Abbildung von 2 Bytes eines Bytestroms auf die 16-Bit Worte für die 
EEPROMs.

Die Frage die mich aktuell eigentlich quält ist: Wie stelle ich sicher, 
dass ein fremdes Hexfile/Binfile richtig geschrieben wird bzw. wie 
werden die Files beim Auslesen richtig erzeugt für andere Tools?

Grüße Oliver

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Oliver J. schrieb:
> Diese lassen sich nicht im 8-Bit Modus betreiben.

Dann musst Du dem Anwender die Möglichkeit lassen, selbst über die 
Byteorder zu entscheiden. Da kann es keinen "Standard" geben, denn so 
ein EEPROM kann sowohl von "little endian" als auch "big 
endian"-Systemen angesteuert werden, und von 8-Bit-Systemen, bei denen 
es rein willkürlich festgelegt wird.

von Oliver J. (skriptkiddy)


Lesenswert?

Rufus Τ. F. schrieb:
> Dann musst Du dem Anwender die Möglichkeit lassen, selbst über die
> Byteorder zu entscheiden. Da kann es keinen "Standard" geben, denn so
> ein EEPROM kann sowohl von "little endian" als auch "big
> endian"-Systemen angesteuert werden, und von 8-Bit-Systemen, bei denen
> es rein willkürlich festgelegt wird.

Werde dann den 8-Bit und den 16-Bit Modus unterstützen. Bei 16-Bit muss 
die Endianess mit angegeben werden. Denke damit sollten alle Fälle zu 
erschlagen sein.

"-o <ORG>"
ORG: {8, 16L, 16B}

Danke und Grüße
Oliver

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.