Hallo,
kann mir bitte jemand erklären wie die folgende Behaptung begründet ist?
"Die Reihenfolge der einzelnen Daten- und Adresspins am RAM kann nach
Belieben variiert werden, wenn dadurch das Layout der Platine vereinfach
wird."
Der Satz stammt von hier
http://www.mikrocontroller.net/articles/Speicher#SRAM
Trifft dies auch zu wenn der Speicher an den Speicher eines µC gemappt
wird?
Grüße
beavis schrieb:> nn mir bitte jemand erklären wie die folgende Behaptung begründet ist?>> "Die Reihenfolge der einzelnen Daten- und Adresspins am RAM kann nach> Belieben variiert werden, wenn dadurch das Layout der Platine vereinfach> wird."
Begründung: die veränderte Reihenfolge kannst du sehr einfach im
Programm per #define anpassen.
Tausche A15 mit A0 => Das Byte an 0x8000 stünde dann im Chip auf 0x0001.
Ist aber egal, weil wenn der Controller nach dem Byte an 0x8000 frage,
wird durch das Vertauschen das automatisch auf 0x0001 "übersetzt".
Selbiges gilt für das Byte, das der Controller auf 0x0001 erwarten würde
- durch das Vertauschen wird aus der Controller-Adresse 0x0001 die
Chip-Adresse 0x8000.
Das geht bei jedem Speicher.... Solange der Controller selber die Daten
reinschreibt, die er später liest, ists egal.
Willst du ein Programm in den Flash/EEPROM/... extern reinladen
(JTAG/...) und der Controller liests dann mit einem "durchmischten
Adressbus" aus gibts natürlich Probleme.
73
Micha schrieb:> beavis schrieb:>> nn mir bitte jemand erklären wie die folgende Behaptung begründet ist?>>>> "Die Reihenfolge der einzelnen Daten- und Adresspins am RAM kann nach>> Belieben variiert werden, wenn dadurch das Layout der Platine vereinfach>> wird.">> Begründung: die veränderte Reihenfolge kannst du sehr einfach im> Programm per #define anpassen.
Schwachsinn.
Jede Speicherzelle ist gleichwertig. Es ist also egal, wo Du ein Bit
hinschreibst, es wird auch immer von dort gelesen.
Es sei denn, Du verdrahtest zwischen Schreiben und Lesen um, ohne die
VCC abzuschalten.
Peter
@ beavis (Gast)
>kann mir bitte jemand erklären wie die folgende Behaptung begründet ist?>"Die Reihenfolge der einzelnen Daten- und Adresspins am RAM kann nach>Belieben variiert werden, wenn dadurch das Layout der Platine vereinfach>wird."
Ganz einfach. Einfacher SRAM hat keine sequentielle Logik im Inneren,
einfach Adresse und Daten anlgen, WR-Puls, fertig. Lesen dito.
Wenn man nun Datenleitungen vertauscht, landet z.B. D0 vom
Mikrocontroller auf D5 des SRAM beim Schreiben. So what! Denn beim Lesen
ladet eben dieses D5 wieder bei D0 vom Mikrocontroller.
Bei Adressen ist es ähnlich. Wenn man beispielsweise A0 mit A7
vertauscht, dann landet die Adresse 0x01 im SRAM auf 0x80. Beim Lesen
wird das aber wieder zurück"gedreht".
>Trifft dies auch zu wenn der Speicher an den Speicher eines µC gemappt>wird?
Sicher, woran soll er den sonst gemappt sein?
Das Ganze geht aber nicht mit IO-gemappten Chips wie CAN-Tranceiver
etc., denn dort muss alles 1:1 stimmen.
MFG
Falk
Falk Brunner schrieb:> Das Ganze geht aber nicht mit IO-gemappten Chips wie CAN-Tranceiver> etc., denn dort muss alles 1:1 stimmen.
Du musst nur die Software entsprechend anpassen. ;-)
Moin,
Man kann sogar auch EPROM/FLASH so anschließen, wenn man deren Inhalt
entsprechend vorbehandelt. Ich hab vor Jahren mal ein EPROM ausgelesen,
das mit vertauschen Datenleitungen angeschlossen war. Um das
rückzutauschen, hab ich folgendes kleine Skript geschrieben:
Beispiele:
bitpermute 01234567 <infile >outfile ... verändert nix
bitpermute 01534267 <infile >outfile ... tauscht Bits 5 und 2
bitpermute 45670123 <infile >outfile ... tauscht L- und H-Nibble
bitpermute 76543210 <infile >outfile ... reversed die Bits
etc.
Ein- und Ausgabe-File müssen binär sein (.bin, kann man mit
entsprechenden Tools von/nach .hex wandeln).
Eignet sich auch gut zur Obfuscation :)
XL
Aus dem Artikel
"ACHTUNG, das geht nur bei einfachen SRAMs. DRAM oder neuere Speicher
nehmen das fix übel, weil die Ansteuerung durcheinander kommt
(Adressmultiplexing, Pagemodus, Byteslanes bei DDR-RAM etc.). Bei diesen
ICs kann man bestenfalls Datenleitungen tauschen, bei DDR-RAMs nur
innerhalb einer Byte-Lane. Prinzipiell sollte man davon aber nur sparsam
Gebrauch machen, wenn es dem Layout wirklich hilft. "