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
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.
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
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
Huch, wenn mal der Forenchef vorbeikommt: Bitte diesen und den vorletzten Beitrag löschen! :-) Jens
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.