SRAM Interfacing (mikrocontroller.net Artikel)

Gast #2639863
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
Gast
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.
Gast
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
Gast
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.
@  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
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
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. "

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.