Forum: Mikrocontroller und Digitale Elektronik SST25VF010A Flash


von User (Gast)


Angehängte Dateien:

Lesenswert?

Ich versuche gerade einen SST25VF010A Flash zu schreiben. Die Hersteller 
ID erhalte ich Korrekt also SPI funktioniert perfekt. Auch das auslesen 
des Status Register funktioniert (0x0C). Zum Schreiben in den Speicher 
müssen die Protect BP0 + BP1  auf 0 gesetzt werden, das erledige ich mit 
SPI_Erase_Block_Prot(); lese ich danach das Status register erhalte ich 
nach wie vor 0xC0.  Über SPI_Write_Data(0x0000,10); werden nun versucht 
den Speicher (10 Zeichen) aus TxBuffer in den Flash zu Speichern. Leider 
ohne erfolg. Auch Google hilft in diesem Fall eider nicht.

Hat jemand Erfahrung mit dem Baustein.
Im Anhang der Programmcode.
Microcontroller Atmega64, Quarz 8 MHZ

grüssle

von User (Gast)


Lesenswert?

PS: AM Baustein liegen WP + HOLD an VCC

von holger (Gast)


Lesenswert?

Versuchs mal so:
1
//=================================================
2
// Block Protection Aus
3
//=================================================
4
void SPI_Erase_Block_Prot()
5
{
6
7
SPI_Write_Enable();
8
9
CHIP_SELECT // _S Low
10
DELAY
11
SPI_Write_Byte(WRITE_EWSR);
12
CHIP_UNSELECT // _S High
13
DELAY
14
15
SPI_Write_Enable(); //<-------------------------
16
17
//Entferne BlogProtection
18
CHIP_SELECT // _S Low
19
DELAY
20
SPI_Write_Byte(WRITE_WRSR);
21
SPI_Write_Byte(0x00);
22
CHIP_UNSELECT // _S High
23
DELAY
24
25
SPI_Write_Disable();
26
27
WaitUntilDone();
28
29
}

von Christian R. (supachris)


Lesenswert?

Vor dem Schreiben des Status Registers muss das WriteEnable Bit gesetzt 
werden. Dafür gibts ein extra Kommando. Achtung, wird beim Schreiben des 
SR wieder zurück gesetzt.

von User (Gast)


Lesenswert?

Mache ich doch SPI_Write_Enable();

von holger (Gast)


Lesenswert?

>Mache ich doch SPI_Write_Enable();

Du machst es aber nur einmal.

von User (Gast)


Lesenswert?

Ich habe es 2x gemacht und geht auch nicht wenn ich den status nach dem 
ersten mal lese steht 0x0E also ist es gesetzt auch wenn ich es vor 
SPI_Write_Disable(); lese ist es 0x0E

von holger (Gast)


Lesenswert?

>>Mache ich doch SPI_Write_Enable();
>
>Du machst es aber nur einmal.

Hmm, das zweite ist laut der Sequenz im Datenblatt nicht
notwendig bzw. sogar komplett falsch. Lass das erste doch mal weg.
Das braucht man wohl auch nicht. Vieleicht stört das ja sogar.

von holger (Gast)


Lesenswert?

Und das SPI_Write_Disable(); am Ende am besten auch gleich weglassen.

von A. B. (Gast)


Lesenswert?

User schrieb:
> Ich habe es 2x gemacht und geht auch nicht wenn ich den status nach dem
> ersten mal lese steht 0x0E also ist es gesetzt auch wenn ich es vor
> SPI_Write_Disable(); lese ist es 0x0E

Das WREN ist fürs Schreiben ins Status-Register überflüssig, da reicht 
das EWSR. Und das WRDI ist eigentlich immer überflüssig, da es nach 
einer Schreiboperation automatisch zurückgesetzt wird.

Hm, wenn es immer 0x0E bzw. 0x0C bleibt, und WP und HOLD sicher auf VCC 
liegen, bleibt eigentlich nur ein Hardware-Problem. Takt zu hoch wird es 
ja wohl auch nicht sein. Kaputt?!

Ähm, nur zur Sicherheit: VCC ist durchgehend sauber im Bereich 2,7 bis 
3,6V? Keine kurzen Einbrüche oder so???

von Florian H. (Firma: h.a.l.m.) (flomann)


Lesenswert?

Du musst vor jedem Daten schreiben in das flash zuvor das write enable 
senden.
Beim Byte Programm wird der WREN zurückgesetzt.

: Bearbeitet durch User
von User (Gast)


Lesenswert?

Ich hab den Fehler gefunden.
Hier falls jemand das gleiche Problem hat.

Der CE gemessen mit Osz ging auf GND, das reicht aber nicht aus 
vermutlich zu langsam. ein 100K Wiederstand von CE auf Masse und alles 
läuft perfekt.

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.