Probleme mit Microblaze und parallelem Flash

Gast #1595553
Hallo zusammen!
Ich habe da ein Problem. Ich benutze ein Spartan 3ADSP Starter Kit von 
Avnet. Auf dem Board ist neben einem SPI-Flash auch ein paralleles Flash 
von Intel drauf (28F128J3). Ich habe mir einen Microblaze mit Hilfe des 
Wizards in EDK 10.1 erstellt und mir einen kleinen Bootloader 
geschrieben, welcher über die serielle Schnittstelle ein SREC empfängt. 
Funktioniert eigentlich alles so weit ganz gut. Nun würde ich jedoch das 
parralle Flash beschreiben (genau genommen das im Ram liegende, 
decodierte SREC im Flash speichern).
Die Treiber für das Flash von Intel und Xilinx sind zu groß für das BRAM 
(wo der Bootloader liegt). Ich habe nun also versucht den Flash gemäß 
den Befehlen aus seinem Datenblatt anzusprechen.
Das Wizard "erzuegt" ja einen xps_emc und die hoffentlich passenden 
Constraints (das Flash mapped er ab Adress 0x87000000).
Wenn ich nun im C-Code folgendes mache
volatile unsigned char x;
*(unsigned char*)0x87000000 = 0x90;
x = *(unsigned char*)0x87000000;
liefert er mir die Manufacture ID. Soweit so gut. Das stimmt ja auch. 
Aber egal von welcher Adresse ich dann lese bekomm ich nur die 
Manufacture IS zurück. Gleiches passiert beim schreiben. Angenommen ich 
schreibe mit Hilfe der Befehle aus dem Flash-Datenblatt 4 Character an 4 
Stellen im Flash (0x87020000, 0x87020001, 0x87020002, 0x87020003) und 
lese diese 4 Stellen dann aus, bekomm ich 4 mal den zuletzt 
geschriebenen Character geliefert.
Kann mir jemand sagen, was ich falsch mache?
Vielen Dank schon mal im Voraus!
Gast #1653396
Hallo,
Du mußt das Flash immer Blockweise beschreiben. Ausserdem solltest du 
den zu beschreibenen Block zunächst löschen, da nur NULLEN geschrieben 
werden können. Schau mal ins Datenblatt. Wieso benutzt du nicht die 
XFlash Lib?
Gast #1653405
Das Schlüsselwort "volatile" bei allen Zugriffen (Lesen und besser auch 
beim Schreiben) könnte helfen...

Sonst könnte es noch ein Problem mit dem Mapping der Adress-LSBs geben. 
Ist das Flash 8 oder 16 Bit breit?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 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]
  • [vhdl]VHDL-Code[/vhdl]
  • [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.