Forum: Mikrocontroller und Digitale Elektronik Bootloader


von dirk rohrmoser (Gast)


Lesenswert?

Hallo zusammen, ich habe ein Board mit einem at89c51cc03 das nicht
läuft.
Das Problem ist, dass Flip mir beim download den Fehler "timeout
error" schreibt. Gut der Fehler kann natürchlich überall stecken, aber
ich möchte erstmal wissen, ob der Controller sich in den
Bootloader-Modus befindet. Wie kann ich das herrausfinden ? Muss sich
der Controller mit einem bestimmten Code melden, den ich mir mit
Hyperterminal anschauen kann (welche Bautrate)?
Vielleicht kann mir einer etwas genauer erklären, was im Boot-Modus
genau vorsich geht.
Danke

von Ralf (Gast)


Lesenswert?

Hm... Zum Bootloader gibts normalerweise eine Anleitung (=separates
PDF-File von Atmel). Hast du da schon mal reingeguckt?

CC03 hört sich für mich nach CAN an, ist das richtig? Wie genau sieht
denn deine Hardware aus?

Bei den seriellen Bootloadern von Atmel ist es so, dass man zuerst ein
'U' schickt. An diesem U erkennt der Controller automatisch die
Baudrate. Das U schickt er auch wieder zurück, so dass du daran
erkennen kannst, ob der Bootloader läuft.

Desweiteren steht auch beschrieben, wie der Controller PER HARDWARE in
den Bootloader-Modus zu setzen ist (Gut, wenn man ihn per Software
nicht mehr in den BL-Modus bekommt grins).
Hast du das befolgt bzw. wie realisierst du das?

Ralf

von dirk rohrmoser (Gast)


Lesenswert?

Hey Ralf, ja es gibt diesen Controller in zwei varianten. Ich habe den,
mit der seriellen Schnittstelle.
Leider muss ich den Boot-Modus manuell über zwei taster einstellen, was
aber auch geht.
Das Board, welches ich habe, ist das:TFH-ONE-BOARD. Kennst du dich ein
wenig mit dem Programm Flip von Atmel aus?
Es tritt nämlich auch schon ein fehler beim einstellen des BLJB, ein
fehler auf. Vielleicht weil das Programm da schon versucht auf den
Controller zu zugreifen.
Ich werde mal versuchen ein U mit Hyperterminal herunter zu laden.
Da ich die Platine selber gelötet habe, kann mir natürlich an
irgendeiner Stelle ein Fehler unterlaufen sein.

von Ralf (Gast)


Lesenswert?

Dann poste mal den Schaltplan.
Dann kann man Fehler schon mal ausschließen (oder erkennen grins).

Ich benutze den AT89C51ED2, mit dem habe ich bei FLIP keine Probleme.
Aber ich hab mal gehört, dass es mit einigen FLIP-Versionen Probleme
gibt. Welche Version hast du?

Ralf

von dirk rohrmoser (Gast)


Angehängte Dateien:

Lesenswert?

Hey,
ich benutze die Version 2.4.4
Da ich keine Pufferbatterie angeschlossen habe, sind diese anschlüsse
am Max 807 von mir gebrückt worden. Ich hoffe das, dass richtig war :)
Ich habe auch mit Hyperterminal geschaft ein U herunter zu laden und
habe es auch sofort wieder empfangen. So kann ich wohl davon ausgehen
das der Controller in sein BOOT-Menü ist.
Trotzdem bekomme ich mit FLIP, immer diese ...Meldung "Timeout
error"
Ich habe auch nur die nötigsten Jumper auf dem Board gesteckt, so das
es keine Spannungsüberwachung des Max 807 gibt.
Bis dann
Dirk

von dirk rohrmoser (Gast)


Lesenswert?

Jawohl, es läuft !!!
Der Fehler war der Jumper 19, den ich gesteckt hatte.
Nachdem ich ihn entfernt habe, läuft alles wunderbar.
Ich bedanke mich bei dir, für die freundliche Unterstützung dieses
Problem's.
Was genau machst du eigentlich mit deinem Controller?

von Ralf (Gast)


Lesenswert?

Dann ist es wahrscheinlich eine Einstellung bei FLIP, die du übersehen
hast.
Wenn ich heut abend zuhause bin, guck ich mir deine Schaltung und meine
FLIP-Einstellungen an, und sag dir dann Bescheid...

Gruß Ralf

von Ralf (Gast)


Lesenswert?

Ups, sehe gerade, dass du gepostet hattest, als ich noch am Schreiben
war grins
Freut mich, wenn ich helfen konnte.

> Was genau machst du eigentlich mit deinem Controller?
Ich benutze den ED2, weil er sich selber programmieren kann, um meine
Software auszutesten. Danach kommt normalerweise ein S52/S53/S8252 zum
Einsatz, es sei denn, ich brauche mehr als die bieten, dann bleibts
beim ED2.

Konkret arbeite ich gerade an einer allgemein verwendbaren
Basis-Programmierung für die serielle Schnittstelle,
interrupt-gesteuert, Ringspeicher, Handshake.

Danach wird ein ISP-Programmer für eben die S52/S53/S8252 programmiert
(daher auch die serielle Basisfunktionalität, die brauch ich da
nämlich).
Und dann habe ich vor, Funktionen für Grafikdisplays mit
T6963C-Controller zu schreiben.

Warum fragst du? Hast Interesse mitzumachen? grins

Ralf

von norad (Gast)


Lesenswert?

@Ralf

ich hätte interesse am Ringspeicher!
Da mir das Konzept nicht bekannt ist bzw. richtig was vorstellen kann
wie es funktionieren soll.

Wäre nett wenn Du da ein paar infos hättest speziell der Umsetzung auf
einem ED2 in C oder Assembler egal.
Also bitte keinen kompletten Code nur etwas, dass das Prinip erklärt.

Dank im voraus.

norad

von Ralf (Gast)


Lesenswert?

Hi Norad,

das mit dem Ringspeicher ist eigentlich easy zu verstehen.
Ich mach das jetzt mal Prozessor-unabhängig und mit einigen
C-Code-Fetzen.

Meine Lösung sieht aus wie folgt:

Als Beispiel gehe ich von einem Ringspeicher aus, der maximal 255 Bytes
speichern kann:

unsigned char ucBuffer[255];

Ich verwende jeweils eine Byte-Variable zum Schreiben (ucWrite), und
eine zum Lesen (ucRead). Eine dritte Byte-Variable enthält die Menge
der gültigen Daten im Buffer (ucCount), diese Variable erleichtert die
Verwaltung. So kann man mit ihr Überläufe feststellen, oder
kontrollieren, ob gültige Daten da sind.

Alle drei Variablen sind initial auf 0 zu setzen.

Wenn ich eine Variable in den Buffer schreiben möchte, sieht das so
aus:

ucBuffer[ucWrite] = ucData;   schreiben
ucWrite++;                    auf nächste Bufferstelle indizieren
ucCount++;                    Datenzähler inkrementieren

if(ucWrite == X) ucWrite = 0; Bufferende erreicht, von vorne beginnen

Zum Lesen genau das Gegenteil:

ucData = ucBuffer[ucRead];    lesen
ucRead++;                     auf nächste Bufferstelle indizieren
ucCount--;                    Datenzähler dekrementieren

if(ucRead == X) ucRead = 0;   Bufferende erreicht, von vorne beginnen

So, jetzt noch mal in der Übersicht:

Alle drei Verwaltungsvariablen sind zu Beginn 0. Der Buffer selbst kann
irgendwelchen Kruscht enthalten, da ucCount anzeigt, dass keine gültigen
Daten drin sind, ist das egal.

Möchte ich aus dem Buffer lesen, prüfe ich zuerst ucCount.

Ist ucCount = 0, so ist nix drin.

Ist 0 < ucCount <= BUFFERGRÖßE, so ist alles okay.

Ist ucCount > BUFFERGRÖße, so gab es einen Überlauf, die Daten sind
futsch (Schwer erkennbar, wenn Buffergröße im Bereich von 256 liegt, in
dem Fall besser INTEGER für ucCount verwenden)

Beim Schreiben prüfe ich ucCount ebenfalls, so kann ich verhindern,
dass ich den Buffer überschreibe.

So, halben Roman geschrieben, hoffentlich keine Fehler drin grins
Hoffentlich ist das verständlich :-)

Wenn nicht, ruhig noch mal nachfragen.

Ralf

von dernixwois (Gast)


Lesenswert?

@Ralf

Danke für deine Unterstützung muss des erstmal verarbeiten.

Gruss

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.