Forum: FPGA, VHDL & Co. Lattice ECP3 Versa Evaluation Board + SPI Flash


von Peter (Gast)


Lesenswert?

Hallo,

ich verwende das Lattice ECP3 Versa Evaluation Board, auf diesem Board 
ist auch ein SPI Flash vom Typ M25P64 drauf.
In diesem Flash wird der Programmcode für den FPGA abgelegt. Ich möchte 
nun auch einige eigene Daten mit in dieses Flash ablegen.

In der Eclipse Platform habe ich ein SPI Flash (3.3) eingebunden und im 
FPGA verdrahtet. Die Base Address lautet 0x00000000.
Meine eigenen Daten möchte ich im letzten Sektor (7F0000h) ablegen.

So sieht der Zugriff auf den Sektor aus:

Schreiben:
1
const unsigned int spi_base_addr =  0x00000000;
2
const unsigned int spi_sect_offset = 0x7F0000;
3
Spi_Flash = spi_base_addr + spi_sect_offset;
4
  for (spi_index_write = 0; spi_index_write < 40; spi_index_write++)
5
  {
6
    *Spi_Flash = eeprom[spi_index_write]; 
7
    Spi_Flash++;   
8
  }

Lesen:
1
  Spi_Flash = spi_base_addr + spi_sect_offset;
2
  
3
   for (spi_index = 0; spi_index < 40; spi_index++)  
4
  {  
5
    eeprom[spi_index] = *Spi_Flash;  
6
    Spi_Flash++;
7
  }

Das Reinschreiben funktioniert leider nur zweimal, sobald ich ein 
drittes Mal Daten reinschreiben möchte, bekomme ich den Wert 0 zurück 
beim auslesen.

Hat schon mal jemand das SPI Flash auf diesem Board benutzt und kann mir 
weiterhelfen?

Vielen Dank
Peter

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Das mit dem Write Enable hast du beachtet?
1
All instructions that modify data must be preceded by a Write Enable (WREN)
2
instruction to set the Write Enable Latch (WEL) bit. This bit is returned to 
3
its reset state by the following events:
4
– Power-up
5
– Write Disable (WRDI) instruction completion
6
– Write Status Register (WRSR) instruction completion
7
– Page Program (PP) instruction completion
8
– Sector Erase (SE) instruction completion
9
– Bulk Erase (BE) instruction completion

von Peter (Gast)


Lesenswert?

Hallo,

nein, aber wie habe ich vom Mico32 aus Zugriff auf das WriteEnable?
Wozu brauche ich dann eigentlich die Komponente SPI Flash(3.3), ich 
könnte ja genausogut die Leitungen einzeln in die Platform einbinden und 
mich um das Timing selbst kümmern, oder?

Danke
Peter

von Noname (Gast)


Lesenswert?

Musst Du vielleicht die Daten im Flash erst löschen,
bevor Du Daten reinschreiben kannst?

von Lattice User (Gast)


Lesenswert?

Peter schrieb:
> nein, aber wie habe ich vom Mico32 aus Zugriff auf das WriteEnable?

Lies nochmal Lothars Post durch: was WriteEnable ist eine Instruction 
(WREN) die vor schreiben löschen etc gesendet werden muss.

Ausserdem beachten:
Wenn du zu schnell nach dem Booten des FPGAs auf das Flash zugreifst 
klappt es auch nicht. Der ECP3 gibt den MCLK Pin erst ca 200-500 Takte 
nach laden des FPGAs frei, je nach eingestellter Configclock kann das 
mehrere Millisekunden dauern.

von Peter (Gast)


Lesenswert?

Hallo,

habe jetzt vor dem Schreiben den Befehl
1
MicoSPIFlash_WriteEnable (flash);
gesendet, hat leider nichts geändert.

Danke für die Info, habe nach dem Booten ein Delay von 200msec drin.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Noname schrieb:
> Musst Du vielleicht die Daten im Flash erst löschen,
> bevor Du Daten reinschreiben kannst?
Richtig: ein Flash muss vorher gelöscht werden. Dadurch werden die 
Speicherzellen auf '1' gesetzt. Nach dem Löschen können dann Bits auf 
'0' geschrieben werden. Und wenn nur noch Nullen zurückkommen, dann 
wurde alle Speicherzellen irgendwann mal mit '0' bschrieben.

Peter schrieb:
> nein, aber wie habe ich vom Mico32 aus Zugriff auf das WriteEnable?
Wie schreibst du Daten ins Flash? Über SPI!
Wie schreibst du Kommandos ins Flash? Über SPI.
Da hilft evtl. mal, das Datenblatt des Bausteins durchzulesen und 
versuchen zu verstehen, was da wie wann gemacht werden muss und was das 
Gemeinsame von bzw. der Unterschied zwischen Daten und Kommandos 
ist.....

von Peter (Gast)


Lesenswert?

Ok, danke, werde ich ausprobieren.

Peter

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.