Externer Speicher ATMega128 Problem

Gast #432956
Hallo zusammen,

ich versuche schon seit Tagen vergebens den Fehler in meiner Schaltung 
zu finden. Das Problem liegt beim externen Speicherinterface. Ich 
Schalte mit der höchsten Adressleitung das Chip Enable Signal für das 
SRAM und die Restlichen anschlüsse sind im Schaltbild zu sehen.

Nach der initialiserung des Speichers mit:

MCUCR =   ( ( 1 << SRE ) | (1 << SRW10)  );

kann ich sogar auf diesen ab adresse 0x1100 zugreifen.

Ab Adresse 0x2000 jedoch ist der Speicher immer wieder in 8 KBlöcken 
gespiegelt. D.H. der Speicherinhalt wiederhohlt sich bei Adresse 
0x6000.Jedoch sind die Adressen 0x1100 bis 0x1fff nicht gespiegelt.
Ab adresse 0x8000 besteht kein zugriff mehr, da dieser Bereich durch 
eine Externe Logik und der höchsten Adressleitung ausgeblendet ist.

Was ist an dieser Schaltung nicht Korreckt (siehe schaltbild)
Macht es was aus die Adressleitungen (so wie im Schaltplan) wild 
durcheinander zu würfeln und beliebig am RAM anzuschließen?

ich weis einfach nicht mehr weiter

Danke
Angehängte Dateien:
Gast
Hallo,

die Adress- und Datenleitungen kannst Du durcheinanderwürfeln, das ist 
einem statischen Ram egal.

Ram zu langsam? Mal Waitstates eingeschaltet?

100n an AVR, Ram, Latch?

Ansonsten such den Kurzschluß in der Verdrahtung wäre meine Vermutung...

Daß der 62256 ein 6264 ist, will ich jetzt nicht vermuten. ;)

Mehr fällt mir gerade nicht ein.

Gruß aus Berlin
Michael
Gast
Hallo,

nach Kurzschlüssen hab ich schon gesucht, und alles nochmal nachgelötet.

auf dem RAM steht: BS62LV256SC-70
auf dem LATCH: 74HC573D

Waitstates habe ich auch schon probiert, aber schreiben im Memorywindow 
klappt ja. Nur es wird eben gespiegelt.
Gast
Die ganze konfiguration steht oben:

MCUCR =   ( ( 1 << SRE ) | (1 << SRW10)  );

mehr mache ich nicht bei der initialisierung

es werdenstandartmäßig alle Adressleitungen benutzt.
Wenn man dass nicht will muss man was am XMCRB Register drehen
Gast
Hallo,

Datenblatt vom Ram sieht wie üblich aus, das sollte also gehen.

Bei Rams weiß man ja leider nicht, wo er wirklich hinschreibt, da 
könntest Du höchtes komplett mit der jeweiligen Adresse in H/L 
aufeinanderfolgend beschreiben und dann auslesen, was wirklich drin 
ankam.
Mit üblichen Mustern über ein paar Byte merkst Du unter Umständen 
nichtmal, wenn Du woanders liest als Du schreibst.

Wie schnell ist Dein AVR getaktet? Wenn langsamer was ändert, würde es 
auf Timingprobleme beim Zugriff hindeuten. Sonst lasß das 
Memoryinterface aus, setze die Ports per Programm und schau, ob die 
Signale wirklich am Ram ankommen...

Gruß aus Berlin
Michael
Gast
Das mit dem ausgeschaltenen Memoryinterface ist eine gute Idee. werd ich 
mal nachmessen ob HIGH und LOW sowohl bei Daten als auch bei Adressen 
ankommt ;)

Grüße nach Berlin von Stuttgart

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 20 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.