Forum: Mikrocontroller und Digitale Elektronik Bootloader ATmega328p


von Ralph S. (jjflash)


Lesenswert?

Auch wenn es dieses Thema wohl schon extrem oft hier gegeben hat:

Ich werde noch ganz kirre, ehrlich!

Ausgangssituation:

Ich habe einen Bootloader (nicht so wirklich klasse, weil nur 19200 
Baud) geschrieben. Dieser Funktioniert in einem ATmega168 fehlerfrei.

Jetzt möchte ich diesen Loader in einem 328p laufen lassen und jetzt 
wird es ganz und gar nicht lustig.

Mein Problem (welches viele hatten - und ich schäme mich sehr, weil ich 
nicht wirklich Anfänger bin) ist:

- Bootloader läßt sich (scheinbar ? ) ab Adresse 7000h installieren

Dann passiert das, was vielen schon passiert ist:

Nach einem ersten Application-Upload ist der Bootloader überschrieben !

Die gesetzten Fuses sind:

Lo: FF
Hi: D8
Ex: 05

Uuuuuund, damit der Loader nicht überschrieben werden SOLL die Lockbits:

Lock: CF

Bei einem Application Upload mittels AVRDUDE wurde die Option -D 
mitgegeben, damit kein Chip-Erase durchgeführt wird (und die Lockbits 
erhalten bleiben) ...

Bootloader wird dennoch überschrieben.

Was muß ich tun ?

(hrmpf ... ich geb bald auf, aber ich mache mich jetzt mal an das 
Hexfile des Loaders um das auseinander zu nehmen und zu überprüfen ob 
der Loader auch wirklich an der richtigen Stelle sitzt)

Netten Gruß,
Ralph

von Ralph S. (jjflash)


Lesenswert?

PS: Betriebssystem ist Slackware Linux (aber das tut ja glaub ich nix 
zur Sache)

von Ralph S. (jjflash)


Lesenswert?

so ... ich hab den ATmega328 direkt nach dem Flashen wieder ausgelesen 
und der Bootloader ist ab der Adresse 7000h vorhanden !!!

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Ralph S. schrieb:
> so ... ich hab den ATmega328 direkt nach dem Flashen wieder ausgelesen
> und der Bootloader ist ab der Adresse 7000h vorhanden !!!

Und wo ist jetzt Dein Problem?

von Ralph S. (jjflash)


Lesenswert?

das Problem ist, dass ich über den Bootloader ein Programm genau EIN mal 
uploaden kann, danach meldet sich der Loader nicht mehr (und ich habe 
keine Ahnung woran das liegt).

Der Bootloader ist (jetzt überprüft) nach dem Upload eines Programms 
immer noch an der selben Stelle (also nicht überschrieben), dennoch 
bekomme ich keinen Zugriff mehr auf diesen !

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Hm, eigentlich nicht wirklich vorstellbar. Schalte doch zu Anfang im 
Bootloader eine LED für eine Sekunde ein. Bestimmt beginnt diese auch 
beim zweiten Mal zu leuchten und Dein Problem ist ein ganz anderes.

von Thomas E. (thomase)


Lesenswert?

Frank M. schrieb:
> Und wo ist jetzt Dein Problem?

Da:

Ralph S. schrieb:
> Hi: D8

Ralph S. schrieb:
> das Problem ist, dass ich über den Bootloader ein Programm genau EIN mal
> uploaden kann, danach meldet sich der Loader nicht mehr (und ich habe
> keine Ahnung woran das liegt).

Dein Problem ist, dass du die BOOOTRST-Fuse nicht gesetzt hast. Dann 
läuft der Controller, wenn nur der Bootloader drauf ist, ab Adresse 0 
durch den leeren Speicher bis zum Bootloader und alles ist gut. Wenn 
dann aber die Applikation drauf ist, wird der Bootloader nie mehr 
erreicht.

Ein wahrer Klassiker.

mfg.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Thomas Eckmann schrieb:
> Ein wahrer Klassiker.

Oh, ja. Ich konnte mir einfach nicht vorstellen, dass der ATmega 
gänzlich jungfräulich war. Ist aber eine gute Erklärung für das 
Phänomen.

: Bearbeitet durch Moderator
von Ralph S. (jjflash)


Lesenswert?

Frank M. schrieb:
> Thomas Eckmann schrieb:
>> Ein wahrer Klassiker.
>
> Oh, ja. Ich konnte mir einfach nicht vorstellen, dass der ATmega
> gänzlich jungfräulich war. Ist aber eine gute Erklärung für das
> Phänomen.

nein, die Fuses waren nicht jungfräulich ... und auch

Hi: D8

ist nicht das Problem, denn (ich such ja schon wie gestört):

Führe ich über einen Taster gleich nach dem Start von AVRDUDE einen 
Hardreset aus, springt er in den Bootloader.

Von daher geh ich jetzt mal in der Hardware suchen (die serielle 
Schnittstelle sendet den Hardwarereset und der scheint dann wohl nicht 
zu funktionieren, beim ATmega168 dann wundersamerweise doch )

(war jetzt verwirrt, habe die BOOTRST-Fuse zig mal kontrolliert und bei 
D8 ist der Resetvector 7000h ... oder - wordmässig gezählt - bei 3800h

von Joachim B. (jar)


Lesenswert?

Thomas Eckmann schrieb:
> Dein Problem ist, dass du die BOOOTRST-Fuse nicht gesetzt hast. Dann
> läuft der Controller, wenn nur der Bootloader drauf ist, ab Adresse 0
> durch den leeren Speicher bis zum Bootloader und alles ist gut. Wenn
> dann aber die Applikation drauf ist, wird der Bootloader nie mehr
> erreicht.
>
> Ein wahrer Klassiker.

DANKE!

ich zweifelte schon an meinen Verdrahtungskünsten, damit funzt mein 
Protoyp Arduino mit m1284p

grrrr, sowas doofes, ich suche und suiche und lese Anleitungen, aber 
darauf wäre ich nie gekommen.

von Ralph S. (jjflash)


Lesenswert?

so ... und meinem Problem bin ich auch auf der Spur:

alle Fuses waren wie ich angegeben habe wohl richtig, denn (was ich 
vergessen habe zu sagen):

die serielle Schnittstelle wird über einen Logilink USB2UART Adapter 
hergestellt.

Laß ich meinen Bootloader über

/dev/ttyS0 laufen

funktioniert das.

über

/dev/ttyUSB0 (und natürlich dem eingesteckten Adapter) ... funktioniert 
der Loader nur mit einem ATmega168 aber mit dem 328 nicht.

Jetzt guck ich mal wie ich das Ansprechverhalten nach einem Reset 
hinbekomme oder ob ich die Parameter für den Adapter verändern kann !

von Thomas E. (thomase)


Lesenswert?

Joachim B. schrieb:
> grrrr, sowas doofes, ich suche und suiche und lese Anleitungen, aber
> darauf wäre ich nie gekommen.

Dann hat es ja wenigstens dir geholfen. Bei Ralph scheint es ja was 
anderes zu sein.

Ralph S. schrieb:
> Von daher geh ich jetzt mal in der Hardware suchen (die serielle
> Schnittstelle sendet den Hardwarereset und der scheint dann wohl nicht
> zu funktionieren, beim ATmega168 dann wundersamerweise doch )

Arduinomässig mit Kondensator?
Vielleich hast du es so knapp dimensioniert, dass es von 
Bauteiltoleranzen abhängig ist?

mfg.

von Joachim B. (jar)


Lesenswert?

Thomas Eckmann schrieb:
> Arduinomässig mit Kondensator?

ich hatte nach Anleitung mit 100nF aufgebaut, hatte nicht gereicht, der 
Reset kam über DTR nicht an, mit einem weitern 220nF parallel kam der 
Reset dann an, löste aber mein vergessenes BOOOTRST-Fuse Problem nicht

von Ralph S. (jjflash)


Lesenswert?

Thomas Eckmann schrieb:
> Arduinomässig mit Kondensator?
> Vielleich hast du es so knapp dimensioniert, dass es von
> Bauteiltoleranzen abhängig ist?

genau an der Stelle bin ich jetzt dran (am Kondensator). Leider hab ich 
hier kein Scope zur Hand (zu Hause) und von daher seh ich jetzt nicht, 
wie lange der Impuls ist. Für mich verwunderlich ist, dass ich über den 
Adapter den Controller "anrufen" kann und er sich auch meldet, aber 
nachdem ein Upload erfolgt ist, ein Reset von Hand erfolgen muss.

Der Ausgang eines Max232 Pins geht über einen 100nF auf den Reset des 
Controllers (der zudem über einen 100k an Versorgungsspannung liegt).

Es will mir einfach nicht runter.

10 Stck. ATmega168 ==> funktionieren alle
8 Stck. Atmega328 ==> nicht einer !

von Ralph S. (jjflash)


Lesenswert?

ich werde jetzt mal 220nF und 470nF versuchen !

von Thomas E. (thomase)


Lesenswert?

Ralph S. schrieb:
> Controllers (der zudem über einen 100k an Versorgungsspannung liegt).

Am Reset als zusätzlichem Pullup? Parallel dazu hängt noch der interne 
Reset-Pullup.

Welche 168er hast du?
Davon gibt es 3 Verschiedene. 168, 168P und 168A/PA. Vom 328 gibt es 
praktisch nur einen, den 328/328P. Der entspricht dem 168A/PA.

Möglicherweise ist der interne Pullup bei den neueren Typen kleiner 
geworden. Das wäre eine Erklärung.

mfg.

von Ralph S. (jjflash)


Lesenswert?

kein Scheiß jetzt: ich kann es nicht mehr lesen welcher Typ 168er das 
ist (Augen lassen zu wünschen übrig, auch mit Lupe nicht... smile, 
irgendwie zu abgegriffen).

Aber auf die Idee mit dem internen PullUp bin ich auch schon irgendwie.

Nur: das werde ich morgen mit dem Scope messen und sehen wie und ob der 
Impuls "zusammenbricht" ...

Grundsätzlich muß es etwas mit der Anstiegsdauer / Verweildauer des 
Impules des Adapters oder der Ansteuerung zu tun haben, denn:

Über denselben Adapter mit einem Win7 ... funktioniert es.

Deshalb: Messen und vergleichen und dann den Kondensator und den PullUp 
entsprechend anpassen !

(Prinzipiell bin ich allerdings geneigt, nun dann doch wirklich eine 
richtige Resetschaltung zu machen, damit das auch wirklich mit jedem 
Controller funktioniert der in den Sockel passt)

von Ralph S. (jjflash)


Lesenswert?

( schade um die bereits schöne geätzte Platine ... smile, oder sich vom 
Bootloader verabschieden und eben wieder über ISP Flashen )

von Joachim B. (jar)


Lesenswert?

ich hatte mich beim externen pullupp an 10k gehalten mit paralleler 
1N4148 Diode nach +Vcc

den 10nF von /RESET nach GND hatte ich wieder rausgeknipst wegen 
Fehlersuche

weiss einer ob Serial.print bei den ProMinis mit FTDI Adapter 
grundsätzlich nicht geht?

ich bekomme nie ein Serial.print raus, weder mit ProMini 328p noch mit 
meinem m1284p über den FTDI Adapter

erscheint mir unlogisch, warum soll das nicht gehen, ausser der 
Bootloader verhindert das Umprogrammieren der Schnitte

von Ralph S. (jjflash)


Lesenswert?

... ich glaube da mußt du die ARDUINO Leute fragen, ich mach hier nur 
das "pure C" (ohne ++).

smile und bei mir funktioniert ja auch nur der Bootloader unter Linux 
über einen Adapter nicht (und das bekomm ich schon noch raus woran das 
liegt).

Dein Problem hört sich eher nach Software an (das hat es sich bei mir 
zuerst allerdings auch nach einem soften Problem angehört gehabt)

von Ralph S. (jjflash)


Lesenswert?

so, unglaublich (aber wahr), eine einfache Monoflop-Schaltung mit 
(uralt) 555 hat das Problem gelöst, aber so wirklich glücklich bin ich 
mit dieser Lösung auch nicht, ich hätte es gerne (auch aus Platzgründen) 
ohne weiteren Baustein realisiert gehabt.

By the way (für mich auch so etwas "unglaubliches"): Bei der 
ursprünglichen Schaltung funktionierte das unter Windows XP und Windows 
7 (auf demselben Rechner mit demselben USB2RS232 Adapter) einwandfrei !

Die Wege der Elektronik sind manchmal unergründlich (zumindest für mich)

von Uwe (de0508)


Lesenswert?

Guten Morgen,

Joachim B. schrieb:
> ich hatte mich beim externen pullupp an 10k gehalten mit paralleler
> 1N4148 Diode nach +Vcc
>
> den 10nF von /RESET nach GND hatte ich wieder rausgeknipst wegen
> Fehlersuche

Ist der Reset-Pin wie auf Seite 5 im Bild 2.1 beschaltet ?

# 
http://www.atmel.com/Images/Atmel-2521-AVR-Hardware-Design-Considerations_ApplicationNote_AVR042.pdf

Kann es sein, dass die Diode mit ihrer Anode an Vcc ist ?

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.