Forum: Mikrocontroller und Digitale Elektronik SRAM Interfacing (mikrocontroller.net Artikel)


von beavis (Gast)


Lesenswert?

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

von spess53 (Gast)


Lesenswert?

Hi

>Trifft dies auch zu wenn der Speicher an den Speicher eines µC gemappt
>wird?

Ja.

MfG Spess

von Micha (Gast)


Lesenswert?

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.

von Hans (Gast)


Lesenswert?

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

von Peter (Gast)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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

von Falk B. (falk)


Lesenswert?

@  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

von (prx) A. K. (prx)


Lesenswert?

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. ;-)

von Axel S. (a-za-z0-9)


Lesenswert?

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:
1
#!/usr/bin/perl -w                                                              
2
# permute bits in a binary EPROM image                                          
3
4
my @bit = ( 1, 2, 4, 8, 16, 32, 64, 128 );                                      
5
                                                                                
6
my $pattern= shift or die "usage: $0 pattern <infile >outfile
7
pattern must be a permutation of (0..7)\n";                                                      
8
my @pattern= split '', $pattern;                                                
9
                                                                                
10
my $c;                                                                          
11
while (defined($c= getc)) {                                                     
12
    my $input  = ord $c;                                                        
13
    my $output = 0;                                                             
14
    for (my $i= 0; $i < 8; ++$i) {                                              
15
        if ($input & $bit[$i]) {                                                
16
            $output |= $bit[$pattern[$i]];                                      
17
        }                                                                       
18
    }                                                                           
19
    printf "%c", $output;                                                       
20
}                                                                               
21
exit 0;

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

von Peter D. (peda)


Lesenswert?

Bei Flash oder EEPROM sollten aber die unteren Adreßbits stimmen, sonst 
geht Page-Write nicht mehr.
Auch müssen alle Kommandos umkodiert werden.


Peter

von Falk B. (falk)


Lesenswert?

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. "

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.