Forum: Mikrocontroller und Digitale Elektronik AT89S8252 In System Programmierung


von Jens (Gast)


Lesenswert?

Hallo Leutens,

im Rahmen eines Schulprojektes arbeiten wir gerade an einer Lösung zur
In - System Programmierung eines AT89S8252 durch einen zweiten
AT89S8252 auf zwei getrennten Controllerboards.

Wir verwenden einen zweiten Controller, der aus einer PC - Applikation,
die wir mit Delphi programmiert haben, die notwendigen Adressen und
Datenbytes (bereits mit Write-Instruction versehen)  über V24 empfängt
und über seinen Port 0 auf die  Pins  MOSI, SCK und RST des
Zielcontrollers überträgt.

 Mittlereiweile sehen die übertragenen Informationen und der Takt am
Oszilloskop genau so aus, wie sie in den Unterlagen von Atmel
beschrieben sind, mit dem kleinen Unterschied, dass das Taktsignal
schon vorzeitig auf Low geht. Unser Ablauf sieht so aus:


1. RST anlegen

2. ca. 90ms warten

3. das "Programm Enable" Bit für Bit senden

4. die Programmdaten aus dem Hex-file geparst mit dem "Write Enable"
(aaaaa010) versehen senden

5. RST auf low


Die Bitfolge beim Übertragen ist beispielsweise:



Instruction Input Bit (MSB zuerst) anlegen

50us warten

SCK au HI

50us warten

SCK auf LO

50us waren

Nächstes Instruction Input Bit anlegen

usw.


Wir können teilweise auch schon in laufenden Programmen einzelne
Programmstellen umschreiben. Leider funktioniert das nur bei ca. 80%
aller Versuche und wir können auch noch keine kompletten Programme
übertragen. Eigentlich müsste mit unserem Timing alles in Ordnung sein.
Die Signale, die am Zielcontroller anliegen haben wir mittlerweile mit
einem TTL-Gatter verstärkt, weil wir dachten, der RST-Pegel wäre zu
schwach, aber dadurch ist unsere Fehlerhäufigkeit noch gestiegen.

Gibt es etwas, was wir da übersehen haben?

Jens

von thkaiser (Gast)


Lesenswert?

Nur so ne Idee: Schon daran gedacht, daß bei Flash-Speichern die Bits
nur gelöscht, aber nicht gesetzt werden können? Um ein auf "0"
geflashtes Bit auf "1" zu setzen, muß der Flash-Speicher mit dem
"erase"-Command gelöscht werden.

von Jens (Gast)


Lesenswert?

Hi,

@thkaiser:

zum Probieren haben wir in den Zielcontroller ein Zielprogramm geflasht
(mit 'ner Flash-Software am PC-Paralellport!), was eine LED an P1.0
eine bestimte Häufigkeit blinken lässt. Wir haben die Speicherstelle
mit diesem Byte in der Hex-Datei ausfindig gemacht, und schreiben
einzelne Werte an diese Stelle. Und das klappt. Allerdings mit 10-20%
Fehlerquote. Wenn es nicht klappt, steht an dieser Stelle noch der alte
Wert, das sieht man ja am blinken!

Trotzdem Danke

von Jens (Gast)


Lesenswert?

Hi,

@thkaiser:

zum Probieren haben wir in den Zielcontroller ein Zielprogramm
geflasht
(mit 'ner Flash-Software am PC-Paralellport!), was eine LED an P1.0
eine bestimte Häufigkeit blinken lässt. Wir haben die Speicherstelle
mit diesem Byte in der Hex-Datei ausfindig gemacht und die Stelle
gefunden, an der das Byte steht, und schreiben einzelne Werte an diese
Stelle. Und das klappt. Allerdings mit 10-20% Fehlerquote. Wenn es
nicht klappt, steht an dieser Stelle noch der alte Wert, das sieht man
ja am blinken!

Trotzdem Danke

von Jens (Gast)


Lesenswert?

Huch, wenn mal der Forenchef vorbeikommt:

Bitte diesen und den vorletzten Beitrag löschen! :-)

Jens

von thkaiser (Gast)


Lesenswert?

Ja nun, diese Fehlerquote könnte eben genau damit zusammenhängen. Ich
kenne es so von der 90er-Serie der Atmels, ob allerdings bei der
89er-Serie der Flash-Speicher so anders organisiert ist, weiß ich nicht
100%-ig. Die bisherigen Flash-Speicher, die mir untergekommen sind,
ließen sich entweder komplett, oder bestenfalls Seitenweise löschen.
Einzelne Speicherstellen lassen sich üblicherweise nicht ändern, zwar
kann man ein "1" -Bit mit einem "0"-Bit überschreiben, aber nicht
umgekehrt. Das würde das Phänomen der Fehlerquote evtl. erklären. Es
bleibt also nichts übrig, als die Applikation nach dem Löschen des
Flash komplett neu zu übertragen. Soweit mein Wissensstand, vielleicht
weiß ja noch wer etwas (das Datenblatt des 89S8252 müßte in der
"Flash-ROM"-Sektion aber auch Klarheit bringen).

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.