Hallo Gruppe,
ich werde schier verrückt beim Implementieren des ICSP-Algorithmus für einen ATmega8. Keine Ahnung was ich falsch mache, aber ich frickel seid Stunden ergebnislos herum. Hier der Stand:
Ich will das Ding neu flashen. Dafür sende ich zuerst das Programming Enable:
SPI TX 4: ac 53 00 00
Das 0x53 echot zurück (also OK laut Datenblatt). Dann lese ich die Signatur aus:
SPI TX 4: 30 00 00 00 SPI TX 4: 30 00 01 00 SPI TX 4: 30 00 02 00
Funktioniert perfekt, 0x1e9307 kommt zurück (byteweise natürlich).
Dann programmiere ich die Shadow-Page (hier einfach nur ein Testpattern
00..3f):SPI TX 4: 40 00 00 00 SPI TX 4: 48 00 00 01 SPI TX 4: 40 00 01 02 SPI TX 4: 48 00 01 03 [...] SPI TX 4: 48 00 1e 3d SPI TX 4: 40 00 1f 3e SPI TX 4: 48 00 1f 3f
und sende dann das Programmier-Kommando (hier Page 0):
SPI TX 4: 4c 00 00 00
Und warte 5ms. Passieren tut folgendes: Die Page 0 wird offenbar programmiert (0x4c geht also), aber mit Müll. Also scheinbar steht in der Shadow-Page Müll. Also konkret:
00000000000000000000000000000c0000000002100100000000080008000400 0000200020002001000108012001280120013001300104011020183a08251420Auslesen kann ich den ganzen Chip einwandfrei (mit anderem Programmer Testpattern reingeschrieben und dann in meinem Zielsystem ausgelesen -- alles einwandfrei). Habe den SPI-Clock auf 125 kHz runtergedreht, ohne Veränderung der Situation. Spannung sind 5V (Labornetzteil), Blockkondensatoren 100nF überall dran. Ich hab keine Ahnung woran das noch liegen könnte.
Hat jemand eine Idee?
Viele Grüße, Johannes