Forum: FPGA, VHDL & Co. Lattice ECP2-20 bootet sporadisch nicht


von Peter (Gast)


Lesenswert?

Hallo,

ich habe leider wieder ein Problem mit meinem FPGA Projekt, verwendet 
wird ein ECP2-20 mit Mico32 Core und einem SPI Flash M25P80.
Booten an sich funktioniert, allerdings kommt es sporadisch vor, dass 
der FPGA nicht mehr bootet (nach mehrmaligem Aus/Einschalten der 
Stromversorgung, mit einigen Sekunden Pause dazwischen). Sobald der FPGA 
neu programmiert wird funktioniert es wieder.

Wenn das Booten nicht funktioniert hat sehe ich am Oszi am Datenausgang 
des Flash einige Daten und dann geht der Pin auf Low.
Klingt eigentlich nach Konfiguration im Flash zerschossen, oder?

Hat jemand eine Idee was da schief laufen könnte?

Vielen Dank
Peter

von Lattice User (Gast)


Lesenswert?

Konfugurierter SPI Takt zu hoch?

von Peter (Gast)


Lesenswert?

Hallo,

wenn du im MSB von Eclipse die "SCLK Rate" meinst, die ist auf 2 
eingestellt (96Mhz/2*SCLKRate = 24MHz).

Vielen Dank
Peter

von Lattice User (Gast)


Lesenswert?

Ich meine die Configuration Clock (CCLK)
Wenn diese zu hoch für den Flash ist wäre es eine mögliche Ursache, dass 
es gelegentlich nicht geht.

von Lupinus Digitalus (Gast)


Lesenswert?

Hallo Peter
Hast Du mal probiert mit ispVM den Inhalt des SPI Flash auszulesen?
Dann kannst Du vergleichen, ob etwas geschossen ist oder nicht.

Du schreibst auch, dass Du vorher mehrmal aus und einschaltest. Geht in 
der Zeit die Spannungsversorgung auf dem Board nahe Null oder bewegst Du
dich ein einen Graubereich?


Viele Grüße

Lupi

von Peter (Gast)


Lesenswert?

Hallo,
Lupinus Digitalus schrieb:
> Hast Du mal probiert mit ispVM den Inhalt des SPI Flash auszulesen?
>
> Dann kannst Du vergleichen, ob etwas geschossen ist oder nicht.

Wie kann ich das mit ispVM machen?

Lupinus Digitalus schrieb:
> Du schreibst auch, dass Du vorher mehrmal aus und einschaltest. Geht in
>
> der Zeit die Spannungsversorgung auf dem Board nahe Null oder bewegst Du
>
> dich ein einen Graubereich?

Die Spannungsversorgung geht auf Null.

Vielen Dank
Peter

von Peter (Gast)


Lesenswert?

Lattice User schrieb:
> Ich meine die Configuration Clock (CCLK)
>
> Wenn diese zu hoch für den Flash ist wäre es eine mögliche Ursache, dass
>
> es gelegentlich nicht geht.

CCLK ist auf 10MHz eingestellt, habe es auf 5Mhz probiert, war keine 
Veränderung.

Vielen Dank
Peter

von Stefan W. (wswbln)


Lesenswert?

Peter schrieb:
>> Dann kannst Du vergleichen, ob etwas geschossen ist oder nicht.
>
> Wie kann ich das mit ispVM machen?
>

Doppelklick in das Feld wo per Default "Erase, Program, Verify" steht 
und dann auswählen von "Verify only"

von Peter (Gast)


Lesenswert?

Hallo,

Stefan Wimmer schrieb:
> Doppelklick in das Feld wo per Default "Erase, Program, Verify" steht
>
> und dann auswählen von "Verify only"

vielen Dank, habe es ausprobiert, wenn das Booten nicht funktioniert hat 
bekomme ich einen Verifying Error.
Sobald ich neu programmiert habe funktioniert es wieder bis zum nächsten 
Bootfehler.
Ich schreibe/lese nicht ins/aus SPI Flash, was kann dieses Problem 
verursachen?

Vielen Dank
Peter

von Karlo (Gast)


Lesenswert?

Du hast doch bestimmt einen netten FAE ...

von Lattice User (Gast)


Lesenswert?

Peter schrieb:
> Sobald ich neu programmiert habe funktioniert es wieder bis zum nächsten
> Bootfehler.
> Ich schreibe/lese nicht ins/aus SPI Flash, was kann dieses Problem
> verursachen?

Deutet schwer auf einen kaputte Flashzelle die den Inhalt nicht mehr 
lange halten kann.

von Peter (Gast)


Lesenswert?

Hallo,

Lattice User schrieb:
> Deutet schwer auf einen kaputte Flashzelle die den Inhalt nicht mehr
>
> lange halten kann.

Habe das Flash schon getauscht --> gleiches Fehlerbild.

Vielen Dank
Peter

von Peter (Gast)


Lesenswert?

Hallo,

unabhängig von den oben genannten Problemen wollte ich mal mit dem SPI 
Flash etwas experimentieren, da ich in das SPI Flash auch 
Konfigurationsdaten (ca. 40 Bytes) abspeichern möchte, habe ich im MSB 
ein "SPI Flash (3.3)" mit dem Namen "SPIFlash" angelegt, Basisadresse = 
0x05000000, Control Port ist enabled, Control Basisadresse = 0x80001000.

Im main folgendes:
1
const char *Spiflash_INSTANCE = "SPIFlash";
2
MicoSPIFlashCtx_t *spi_flash = (MicoSPIFlashCtx_t *)MicoGetDevice(Spiflash_INSTANCE);
3
int id_spi_flash;
4
5
id_spi_flash= MicoSPIFlash_ReadID(spi_flash);
id_spi_flash lasse ich mir auf einem LCD anzeigen, der Wert ist 
allerdings immer 255.


Habe mal gefunden, dass man so ins SPI Flash reinschreiben, bzw. 
auslesen kann:
1
reinschreiben:
2
volatile unsigned long *Spi_Flash;
3
Spi_Flash = 0x05000000 + 0xF0000;   // 0xF0000 ist die letzte Page im Flash
4
*Spi_Flash = 112;   // den Wert 112 an der ersten Stelle der letzten Page ins Spi Flash speichern
5
6
auslesen:
7
volatile unsigned long *Spi_Flash;
8
Spi_Flash = 0x05000000 + 0xF0000;   // 0xF0000 ist die letzte Page im Flash
9
variable = *Spi_Flash;   // den Wert 112 aus dem Spi Flash lesen und in variable speichern

wenn ich allerdings ins Spi Flash reinschreiben/auslesen möchte bleibt 
das Programm einfach stehen.

Vielen Dank
Peter

von Lattice User (Gast)


Lesenswert?

Wie ist das Flash angeschlossen?
Beim ECP2 ist es nicht möglich über die Configpins auf das Flash 
zuzugreifen. Falls man das möchte muss man das Flash parallel auch an 
normale IO's anschliessen und natürlich dafür sorgen dass dadurch der 
Bootvorgang nicht gestört wird.

von Peter (Gast)


Lesenswert?

Hallo,

Lattice User schrieb:
> Beim ECP2 ist es nicht möglich über die Configpins auf das Flash
>
> zuzugreifen.

laut Lattice AppNote (habs nur leider gerade nicht zur Hand) ist es 
möglich, nur der CLK Pin muss parallel geführt werden.
In einem früheren Projekt hat es auch schon funktioniert (andere 
Hardware, aber diese Beschaltung ist gleich), allerdings wurde dort im 
MSB ein SPI Flash (3.1) verwendet. Durch ein update von Eclipse ist 
jetzt nur SPI Flash (3.3) verfügbar.


Vielen Dank
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.