AVR ATmega ICSP Algorithmus

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 0000200020002001000108012001280120013001300104011020183a08251420

Auslesen 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

--
>> Wo hattest Du das Beben nochmal GENAU vorhergesagt? 
> Zumindest nicht öffentlich! 
 Click to see the full signature
Reply to
Johannes Bauer
Loading thread data ...

Hast Du das Flash vorher gelöscht? Beim Programmieren kann man nur Bits von

1 auf 0 schreiben, nicht zurück.

cu Michael

Reply to
Michael Schwingen

Oh Mann, tatsächlich. Das war es. Die vielen Nullen hätten mir komisch vorkommen müssen, aber ich hab das gar nicht mehr gesehen.

Ich habe das nicht gemacht, weil ich davon ausgegangen bin, dass das beim Initiieren des Page Write via ICSP das automatisch gemacht wird. Beim Self-Programming gibts da nämlich zwei unterschiedliche Befehle ("Page Erase" und "Page Write"), aber "Page Erase" fehlt beim ICSP. Und in der Step-by-Step Anleitung auf Seite 238 taucht der auch nicht auf, hrmpf. Das heißt ich kann per ICSP garnicht pageweise löschen?

Da sind halt u.A. Config-Daten drinnen, die ich gern behalten möchte, darum wollte ich den Chip Erase vermeiden :-/

Tausend Dank für deine Hilfe!

Viele Grüße, Johannes

--
>> Wo hattest Du das Beben nochmal GENAU vorhergesagt? 
> Zumindest nicht öffentlich! 
 Click to see the full signature
Reply to
Johannes Bauer

Passen die denn nicht ins EEPROM? Das kann man byteweise schreiben und funktioniert bestens für Config-Daten.

Reply to
Edzard Egberts

Edzard Egberts (ed snipped-for-privacy@tantec.de):

Wäre auch mein Vorschlag. Außerdem kann man die vor dem Flashen noch sichern und wiederherstellen.

73 de Tom
--
DL7BJ * DL-QRP-AG #1186 * DARC  OV I19 * FISTS #15933 * ARRL 
http://www.dl7bj.de                https://twitter.com/dl7bj
Reply to
Thomas 'Tom' Malkus

Naja, das habe ich vereinfacht ausgedrückt: Es handelt sich um Config- und Logdaten. Das EEPROM wird natürlich benutzt, aber wenn das voll ist, gibts einen Fallback auf den FLASH. Und den kann ich weglassen, aber dann verkürzt sich die maximale Logdauer natürlich. Momentan benutze ich etwa 4k Flash fürs Programm und 4k sind für Logdaten da plus 512 Byte EEPROM. Würde also die Kapazität fast zehnteln, wenn ich nur EEPROM nähme.

Sichern und wiederherstellen geht natürlich, aber das geht beim FLASH auch. Ich hatte nur gehofft, dass ich darum rumkomme, weil das Programmierende Device ist auch ein AVR (und da passen halt 4k nicht ins RAM rein, wird also nervig).

Frage mich schon, warum sie "Page Erase" nicht per ICSP verfügbar machen. Seltsam.

Viele Grüße, Johannes

--
>> Wo hattest Du das Beben nochmal GENAU vorhergesagt? 
> Zumindest nicht öffentlich! 
 Click to see the full signature
Reply to
Johannes Bauer

z.B. Atmel AT24C512C-SSHD-B mit 64kByte (65535x8bit) kostet 75 Cent und zwei Pins.

Reply to
Edzard Egberts

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.