Forum: Mikrocontroller und Digitale Elektronik Atmega flash beschreiben via SPI


von Steffen (Gast)


Lesenswert?

Hallo Leute,

bin mit meiner software SPI nun soweit vorgedrungen, dass ich 
erfolgreich in den Programmiermodus eines zweiten Atmega8 wechseln kann, 
das Flash richtig auslesen kann, EEprom programmieren und lesen 
funktioniert ebenfalls.

Probleme bereitet mir allerdings das programmieren des Flashspeichers 
(was ja in Pages geschieht)...
Ich kann davon ausgehen, dass die Kommunikation passt (alle möglichen 
anderen Befehle kann ich wunderbar ausführen) und auch nicht aus der 
synchronisation kommt (nach dem Versuch der Programmierung des 
Flashsspeichers funktionieren alle anderen Befehle noch).

Die Methoden hab ich größtenteils analog zu den sourcen aus usbprog, 
irgendwas passt aber anscheinend nicht.

Vorgehensweise:

-> enable programming
-> Page im Atmega mit 32 Words füllen
-> Write page
-> 20ms warten, nächste Page
1
void softspi_loadFlashPage(char wordl, char wordh, char wordaddr)
2
{
3
4
    // write low
5
    softspi_rwb(0x40);
6
    softspi_rwb(0x00);
7
    softspi_rwb(wordaddr);
8
    softspi_rwb(wordl);
9
10
    // write high
11
    softspi_rwb(0x48);
12
    softspi_rwb(0x00);
13
    softspi_rwb(wordaddr);
14
    softspi_rwb(wordh);
15
16
}
1
void softspi_saveFlashPage(uint16_t pageAddress) {
2
      char addrh,addrl;
3
4
      addrh = (char)(pageAddress >> 8);
5
      addrl = (char)(pageAddress);
6
7
      softspi_rwb(0x4C);
8
      softspi_rwb(addrh);  //high-byte of page address
9
      softspi_rwb(addrl);  //low-byte  of page address
10
      softspi_rwb(0x00);
11
      _delay_ms(20);
12
}


Also laut Datenblatt ( 
http://www.atmel.com/dyn/resources/prod_documents/doc2486.pdf Seite 240) 
sollte das schon so funktionieren...


Achja, mit nem avrispmkII lässt sich der mega8 wunderbar beschreiben, 
die fehlerfreiheit der leseroutine für den flash hab ich damit auch 
geprüft.

Nach dem Versuch der Programmierung auf diesem Wege ist der Flash 
verändert. Allerdings egal nach welchem zu programmierenden Muster 
gleich.

Hab mir schon die einzelnen Bytes, die auf der SPI ausgegeben werden 
angesehen, ist alles richtig und laut Datenblatt (meiner Meinung nach).


Falls irgendjemand sowas ähnliches schonmal gemacht hat. Help! ;)


Danke euch!

von Steffen (Gast)


Lesenswert?

Korrektur, es sind natürlich 16 Words per Page!

von Steffen (Gast)


Lesenswert?

Ich wieder... (etwas glücklicher als vorhin ;) )

Wenn ich nen chipErase vor dem Programmieren mache, dann klappt's!


Ääääääääääääääh, das steht im Datenblatt nur unter Parallel 
Programming......

Naja, jetzt klappts :)

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Ohne Erase kannst du nur eine 1 auf eine 0 ändern aber nicht umgekehrt.

von Rik Langobar (Gast)


Lesenswert?

Hi, darf ich mal fragen, was du dir da baust?

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.