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!
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?
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.