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!