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
Hallo, wenn du im MSB von Eclipse die "SCLK Rate" meinst, die ist auf 2 eingestellt (96Mhz/2*SCLKRate = 24MHz). Vielen Dank Peter
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.
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
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
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
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"
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
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.
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
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.