Problem mit dem Programmer

Christian8

Neues Mitglied
08. Dez. 2008
51
0
0
Sprachen
Ich brauche dringend Hilfe!

Immer wenn ich auf den Button "Program Flash File" klicke, kommt die Meldung "Can not start Bootloader". Was kann ich da machen?
 
Hallo Christian,

2 Dinge fallen mir ein:

- Bootloader ist nicht aktiviert. Siehe Kapitel B. Aktivierung des Bootloader durch einen Inputpin

- fehlende Betriebsspannung der Baugruppe über Pin Header oder USB VBUS (Pad Jumper, Lötbrücke)

Gruß
rangar
 
Hallo,

das mit der Aktivierung durch einen Input-Pin habe ich nicht ganz verstanden. Muss ich einfach diesen Pin mit GND verbinden? Oder mit einem Widerstand dazwischen?

Gruß, Christian
 
Hi,

es gibt 2 Möglichkeiten den Bootloader über den Bootpin zu aktivieren:

-- A --
1.) EB-Pin direkt auf Masse schalten (ohne Widerstand)
2.) Spgsversorgung ausschalten
3.) Spgsversorgung einschalten


-- B --
1.) EB-Pin direkt nach Masse schalten (ohne Widerstand)
2.) AtMega128 Reset-Leitung direkt nach Masse schalten (ohne Widerstand)
3.) AtMega128 Reset-Leitung wieder "loslassen"

Tip:
Jeweils einen einfachen Taster (nach Masse) an die Reset-Leitung und den EB-Pin anflanschen und fertig :)


Gruß
rangar
 
Hallo zusammen,

ich habe auch ein kleines Problem mit dem Bootloader. Es ist bislang nur bei wenigen Versuchen (6 mal) gelungen, ein Programm aufzuspielen, seit 3 Tagen klappt es jetzt gar nicht mehr. Stromversorgung über USB (Lötpad geschlossen) EB-Pin mit Steckkabel mit GND verbunden. Im Programmer wird Version des Bootloaders, Datum und Anzahl der letzten Programmierung angezeigt. Beim Versuch, ein Programm aufzuspielen kommt dann die Meldung, dass der Bootloader nicht gestartet werden kann.

Die Kommunikation sonst passt eigentlich. Es ist derzeit ein kleines Programm aufgespielt, welches in einer Schleife Ausgaben über die UART sendet. Ich kann sowohl mit VCP-Treiber über Hyperterm als auch mit USBExpress über ein selbst geschriebenes Terminalprogramm die Daten empfangen. Stecke ich das Modul mit EB-Pin auf Masse an, werden keine Daten übertragen. Das Anwendungsprogramm wird demnach nicht gestartet.

Pindeklaration sind im Anwendungsprogramm nicht drin. Nur die Deklaration der Schnittstelle und Print-Ausgaben.
 
Hallo Stevie,

ich habe gerade mal in der Software nachgesehen ... ist ja schon ein bisschen länger her.

Nachdem du das Modul ansteckst, wird es durch die Programmersoftware erkannt und es wird ein Info-Paket ausgelesen (das siehst du daran, dass zum Beispiel die Programmierzyklen oder das letzte Programmierdatum angezeigt wird), danach wird die Applikation gestartet, wenn eine vorhanden ist, unabhängig davon, oder PG4 auf GND liegt oder nicht.

Wenn du nun in deinem Programm nicht auf das über USART empfangene Kommando "StartBootloader" reagierst, wird ja der Bootloader nicht gestartet und es kommt nicht zur Kommunikation Programmer<->Bootloader.

Du kannst nun folgendes machen:
(1) Entweder du stellst den USART in deiner Applikation entsprechend ein, reagierst auf das Kommando StartBootloader und startest diesen dann (Beschreibung wie das geht ist hier im Supportbereich) oder
(2) wenn deine Applikation läuft, legst du PG4 nach GND und gibst einen RESET (nicht das Modul ab/anstecken, da ja sonst wieder das ModulInfo-Paket gelesen wird und die App gestartet wird)

Probiere am bestem erst map Punkt (2) aus. Eleganter ist Punkt (1), allerdings musst du dann auch den USART entsprechend in deiner Applikation eingestellt haben.

Grüße,
Dirk
 
Hallo Dirk,

ich wollte ja ein geändertes Programm aufspielen, welches auf dem Bootloader reagiert. Aber ich kriege das ja nicht aufgespielt :)

Die zweite Möglichkeit funktioniert auch nicht, das habe ich mehrfach versucht. Ich werde jetzt wohl den Bootloader nochmal per ISP flashen und probiere dann mein Glück noch mal.
 
Hallo Dirk,

irgendwie kriege ich das nicht hin. Wenn ich den Bootloader über ISP neu flashe, dann kann ich eine Applikation mit dem Programmer aufspielen. Aber das mit dem Aktivieren per EB-Pin will irgendwie nicht, wenn ein Programm von mir drauf ist.

Beim Anstecken des Moduls kommt im Programmer nur die Info in der Statuszeile, dass das Modul angeschlossen ist. Programmierzyklen und Programmierdatum wird nur angezeigt, wenn der EB-Pin beim Anstecken mit Masse verbunden ist. Über die Software komme ich auch noch nicht in den Bootloader rein. Das liegt am vielleicht an meinem Bascom-Programm. Mit der Programmierung der UART habe ich noch nicht so viel gearbeitet, da kann schon noch ein Fehler drin sein.
 
Hallo Dirk,

folgendes funktioniert: Bei laufendem Programmer EB-Pin auf Masse, Reset-Pin auf Masse und dann erst das Modul an USB anstecken. Jetzt Reset-Pin von Masse weg, dann kann ich ein neues Programm aufspielen.
Ebenso funktioniert: Modul einstecken, EB-Pin auf Masse, Reset-Pin auf Masse und dann erst den Programmer starten. Reset-Pin von Masse weg, dann kann ein Programm aufgespielt werden.

Es funktioniert nicht, wenn ein Programm auf dem Modul läuft, der Programmer gestartet wird und dann erst EB-Pin und/oder Reset auf Masse gezogen werden.
 
Hallo Stefan,
Beim Anstecken des Moduls kommt im Programmer nur die Info in der Statuszeile, dass das Modul angeschlossen ist. Programmierzyklen und Programmierdatum wird nur angezeigt, wenn der EB-Pin beim Anstecken mit Masse verbunden ist. Über die Software komme ich auch noch nicht in den Bootloader rein. Das liegt am vielleicht an meinem Bascom-Programm. Mit der Programmierung der UART habe ich noch nicht so viel gearbeitet, da kann schon noch ein Fehler drin sein.

in den Bootloader kommst du von deiner Software nur dann, wenn du richtig auf das Kommando "StartBootloader" reagierst und dann zur richtigen Adresse springst. Im Forum sind Beispiele in Assembler und C, wie es in Bascom geht weiß ich leider nicht, allerdings kann man ja in Bascom Assembler einbinden.

Ich könnte eventuell die Windows-Software un den Bootloader noch etwas abändern, so dass die Applikation nicht sofort gestartet wird, wenn sie im Flash ist, sondern erst dann, wenn du bei der Windows-Software einen Button drückst, bzw. einen Haken setzt, dass nach Programmierung gestartet werden soll. Nachteil wäre, dass der Bootloader nicht von alleine die Applikation starten würde, du müsstest also wenn deine Software fertig ist, diese über ISP Programmieren, ohne den Bootloader.

Es muss allerdings folgendes funktionieren: Modul anstecken, dann PG4 auf Masse und einen kurzen Reset geben. Dann ist der Bootloader "scharf". Die Windows-Software muss zuvor gestartet sein, da sie sonst das Modul erkennt, den Info-Block ausliest und einen Befehl sendet, der die Applikation startet, dann wäre nämlich wieder die Applikation aktiv, nicht der Bootloader. Indem Moment, wo du auf das Bootloaderkommando richtig reagierst, brauchst du den PG4 Pin nicht mehr bei Reset nach GND ziehen, das ist nur ein "Hintertürchen", was du nutzen kannst, wenn du einen groben Fehler in deiner Software hast, der dazu führt, dass das Kommando "StartBootloader" nicht merh richtig ausgeführt wird.

Gruß,
Dirk
 
Hallo Dirk,

Es muss allerdings folgendes funktionieren: Modul anstecken, dann PG4 auf Masse und einen kurzen Reset geben. Dann ist der Bootloader "scharf". Die Windows-Software muss zuvor gestartet sein,

Genau das funktioniert eben nicht. Nur auf die oben beschriebene Art komme ich derzeit rein. Ich habe es mittlerweile auch hinbekommen, dass meine Software auf den Bytewert &H98 reagiert und zur Flashadresse &HFC00 springt. Aber immer noch sagt mir dann der Programmer, dass er den Bootloader nicht starten kann :confused:

Ich habe das Gefühl, dass der Bootloader zwar korrekt angesprungen wird, der Programmer das aber aus irgendeinem Grund nicht mitbekommt.

PS: Es wird nach dem Anspringen der Bootloaderadresse "Cá" vom AVR über die UART gesendet.
 
Hallo Dirk,

mit dem Ausschalten der Interrupts funktioniert mein Programmer jetzt endlich mit meinem Programm. Hier ein Beispiel in Bascom:

Code:
$regfile = "m128def.dat"
$crystal = 16000000
$baud1 = 250000
$hwstack = 64
$swstack = 128
$framesize = 16

Config Com2 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Config Serialin1 = Buffered , Size = 2 , Bytematch = All
Open "COM2:" For Binary As #1

Dim B2 As Byte

Do
Print #1 , "Test"
Wait 1
Loop

End

Serial1bytereceived:
   B2 = Inkey(#1)
   If B2 = 98 Then
      Print #1 , "Bootloader gestartet"
      Disable Interrupts
      jmp &HFFF0
   End If
Return
 
Hallo Stefan,

ach, hatte ich vergessen zu erwähnen ... irgendwie nicht dran gedacht :rolleyes: Ich hatte mich da ganz woanders dran verbissen und den Fehler gesucht. Interrupts von der Applikation dürfen natürlich nicht aktiviert sein.

Ich werde da nocheinmal Beispiele in C und in Assemler in das Forum stellen, wie man auf das Bootloaderkommando reagiert und den Bootloader richtig anspringt.

Grüße,
Dirk
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)