Arduino Bootloader - welcher ist für uns optimal?

Geni

User
Hallo Sven,
Ich kenne mich mit den Fuse gar nicht aus. Ich habe einfach den Bootloader 328p_19200_PD1.hex von Holger genommen und gemäss dem Threade 2 und 3.
Als Programmer habe ich einen "Pololu USB AVR Programmer v2.1".
Der Bootloader ist ja irgendwie drauf und ich kann mit dem AVRootloader lesen oder sogar ins EEPROM schreiben nur keine hex datei Flashen.
Als 1-Wire Adapter habe ich einen NANO gemäss BLHeli.
Wo muss ich schrauben?
Gruss Geni
deviceinfo.jpg
Prot2.jpg
 

mha1

User
Hast Du Avrdudess installiert? Dann starten und rechts oben auf read fuses klicken.

Was wird angezeigt? Sollte so für die Pro Minis 8 und 16 MHz aussehen:
lfuses=0xFF
hfuses=0xDA
efuses=0xFD

Wenn nicht unten rechts die fuses so setzen und schreiben.
 

mha1

User
Hallo Geni,

dann sind es die Fuses schon mal nicht, was aber auch zu erwarten war. Ich habe bei mir einen Arduino Pro Mini 5V/16Mhz laufen und habe Dir mein Setup als Testpaket angehängt. Wie immer, .zip.txt in .zip umbenennen und entpacken. Im Ordener Doc findest Du Bilder:

1. Verdrahtung: Ich nutze einen USBTinyISP zum Bootloader Flashen und einen selbstgebastelten Jeti Adapter (FTDI, Widerstand und Diode). Probiert habe ich auch den Graupner HoTT Adapter. Auch der funktioniert, obwohl der 3.3V VCC und Pegel macht. Der Bootloader ist so gebaut, dass über Pin 8 kommuniziert wird.
2. Flash des Bootloaders
3. AVRootloader Setup zum Flashen eines kleinen Testprogramms (Blink)
4. Log vom Flashen

So gehst Du vor:
- ISP (6 Verbindungen) nach Bild 1 verdrahten. Ich verdrahte den ISP so, dass die Spannungsversorgung an RAW ist. Das Servokabel sicherheitshalber noch nicht verdrahten oder wenn, dann nur GND und Daten (an PIN8).
- ins Verzeichnis AVRootloader wechseln
- die FLASH_Bootloader.bat editieren, um Deinen ISP Programmer einzutragen. Statt "-c usbtiny" "-c wasimmerduhast"
- doppelklicken auf FLASH_Bootloader.bat
- Output sollte wie in Bild 2 aussehen
- ISP Verdrahtung abziehen oder wenigstens VCC und RST (im Bild 1 das rote und gelbe Kabel) abziehen
- Das Servokabel anschliessen (siehe Bild 1) und wenn vorher schon verdrahtet jetzt auch die Spannungsversorgung über das FTDI an RAW anschliessen
- AVRootloader starten
- COM4 auf den Comport Deines USB/seriell Adapters ändern
- Program! klicken
- der erste Programmierversuch sollte durchlaufen und die LED anfangen zu blinken
- für folgende Programmierversuche Reset Taster drücken nicht vergessen

Viel Erfolg

Michael

Anhang anzeigen MiniPro16.zip.txt
 
Hi,

der angesprochene Bootlader ist 512B Bytes lang. Im Hex-Fiele sieht man auch die Startadresse 0x7E00. Für die Fuse bedeutet das 256 Words. Bootstart ist 0x7E00 durch 2 gleich 0x3F00. Damit ergibt sich die richtige High-Fuse = 0xDE
Die anderen Werte gehen auch, solange die fehlenden 256 Words mit 0xFFFF beschrieben sind. Also nach einem Erase.
Ich benutze als AVRootlader 1-Wire-Adapter einen "China-FTDI" mit 2,7k zwischen RX/TX. 1Wire an RX.

Gruß Sven
 

mha1

User
Hi,

der angesprochene Bootlader ist 512B Bytes lang. Im Hex-Fiele sieht man auch die Startadresse 0x7E00. Für die Fuse bedeutet das 256 Words. Bootstart ist 0x7E00 durch 2 gleich 0x3F00. Damit ergibt sich die richtige High-Fuse = 0xDE
Die anderen Werte gehen auch, solange die fehlenden 256 Words mit 0xFFFF beschrieben sind. Also nach einem Erase.
Ich benutze als AVRootlader 1-Wire-Adapter einen "China-FTDI" mit 2,7k zwischen RX/TX. 1Wire an RX.

Gruß Sven

Hallo Sven,

da hast Du Recht. Da programmiert einer einen schönen und schlanken Bootloader und dann nutzt man den gewonnen Speicher gar nicht. In meinem geposteten Beispiel ist die Bootloadergröße knapp über 512 Byte, d.h. passt nicht mehr in 4 pages. Deshalb wäre die korrekte high fuse 0xDC. Die low fuse wie in der Original Arduino boards.txt für die Pro Minis angegeben 0xFF. Und auch die extended fuse mit den originalen 2.7V BOD Level 0xFD.

Die aus der boards.txt abgeschriebene high fuse 0xDA ist dem original Arduino bootloader mit üppigen 2k geschuldet. Die high fuse so zu setzen schadet aber nichts, solange man kleinere Bootloader verwendet. Der Atmel wurstelt sich schon durch den mit 0xFFFF initialisierten Speicher. Nicht schön und man verschwendet natürlich wertvollen Flashspeicher.

Viele Grüße

Michael
 

mha1

User
... wie muss ich die Meldung der Zeile AVRootloader.inc(113) verstehen?
Anhang anzeigen 2267776

Das ist der kryptische Hinweis auf das notwendige Setzen der Bootloadergröße in der high fuse. Der Atmega328 erlaubt vier Bootloadergrößen mit den entsprechenden Einsprungadressen, siehe auch Post von Sven. Mögliche Bootloadergrößen sind bis 512 Byte, bis 1024 Byte, bis 2048 Byte und bis 4096 Byte. Wenn Du das genauer verstehen möchtest, musst Du das Atmega328 datasheet durcharbeiten.

Für die Praxis mit Arduino Mini Pro (8Mhz und 16Mhz sind da gleich):
HFUSE =0xDE für max. 512 Byte (= in Hagen lingo first boot start)
HFUSE = 0xDC für max. 1024 Byte (= in Hagen lingo second boot start)
HFUSE = 0xDA für max. 2048 Byte (= in Hagen lingo third boot start. Das ist der Standard in der Arduino boots.txt für den Arduino Bootloader)
HFUSE = 0xD8 für max. 4096 Byte (= in Hagen lingo forth boot start)

Mit dem Arduino boards.txt Standard HFUSE = 0xDA macht man nichts falsch für Bootloader kleiner 2048 Byte, verschenkt aber Flashspeicher, der ansonsten für die Applikation (auf arduinoisch Sketch) zur Verfügung steht. Was Probleme macht, ist eine HFUSE für einen kleinen Bootloader zu setzen und dann einen größeren draufzupacken.

Auf jeden Fall aber immer sicherstellen, dass beim Programmieren chip erase (avrdude parameter -e) gesetzt ist. Ist aber für fast alle Atmegas und auch für den Atmega328 ohnehin notwendige Vorausssetzung zum Flashen und damit standardmäßig gegeben.
 

Geni

User
Hi,
dank eurer Hilfe habe ich es geschafft. Ich habe das HFUSE auf 0xDE gesetzt
Fuse1.jpg
und dann hat alles wie gewünscht funktioniert!
Als 1-Wire Adapter verwende ich einen Arduino Nano.
Unter welchen Umständen muss eventuel der Reset Taster gedrückt werden, wie wann in welcher Reihenfolge?

Gruss Geni
 

mha1

User
Hi,
dank eurer Hilfe habe ich es geschafft. Ich habe das HFUSE auf 0xDE gesetzt
Anhang anzeigen 2270162
und dann hat alles wie gewünscht funktioniert!
Als 1-Wire Adapter verwende ich einen Arduino Nano.
Unter welchen Umständen muss eventuel der Reset Taster gedrückt werden, wie wann in welcher Reihenfolge?

Gruss Geni

das PC Programm, der AVRootloader schickt beim Verbindungsversuch so ungefähr alle 150ms ein paar Nullen gefolgt vom Bootloader Sign zum Anklopfen. Wenn die Applikation läuft geht natürlich niemand ran. Deshalb muss man den Atmel per Reset in den Bootloader zwingen. Der hört auf das Anklopfen und geht ran, wenn das Bootloader Sign das gleiche wie im Bootloader hinterlegte ist. Das ist dann der Moment wo Du dann das connected siehst.

AVRootloader starten und connect oder program drücken. Dann Arduino am one wire Adapter anschliessen. Wenn Dein Adapter den Arduino mit Spannung versorgt, ist das schon der Reset (power on), sonst, wenn Du den Arduino irgendwie anders mit Spannung versorgst, die anschalten oder wenn er schon läuft, Reset Taste drücken, Spannungsversorgung kurz unterbrechen usw.

Sonderfall: beim ersten mal Flashen nach Bootloaderflash, wenn noch keine Applikation da ist, braucht's keine Reset. Den macht der Arduino dann zyklisch selbst, weil er im Kreis rum läuft und immer wieder im Bootloader landet.
 
Erase

Erase

Hi,

wie oben geschrieben funktioniert ein Bootlader mit falscher H-Fuse nur wenn alle "falschen" Adressen mit 0xffff = "NOP" beschrieben sind. Das ist im allgemeinen nach einem ERASE der Fall. Ein Erase ist ein nicht unbedingt notwendiger Schreibvorgang. Der kostet natürlich Zeit, Strom und früher mal kostbare Schreibzyklen. Er löscht aber z.B die den Leseschutz... Deshalb kann man das ERASE beim Programmieren aus/einschalten. Nachteil beim fehlenden ERASE ist, dass der alte ARDUINO-Bootlader nur teilweise überschrieben wird. Durch die falsch H-Fuse wird der Reste des alten Bootladers angesprungen. Das führt offensichtlich zu einigem Durcheinander :-)

Es freut mich das es jetzt geht.

Gruß Sven
 
Interface

Interface

Hi,
bin auf der Suche nach einem geeigneten Bootloader für orginal JETI HW Sensoren (e.g. MUI).
Die Interfaceschaltung sieht so aus. ICh bräuchte also einen One-Wire - Bootloader
jeti_if.jpg

Habt ihr einen Vorschlag für mich ?
Danke
Klaus
 

onki

User
Hallo Geni,

hast recht. Der Optiboot ist kleiner und schhneller aber kein OneWire Bootlaoder.
Asche über mein Haupt.
Läuft deiner nun geschmeidig nach den Anfangsproblemen?
Der wäre für mich auch interessant.

Gruß
Onki
 
wow, bin begeistert es geht mit dem Paket von #11 und JETI original adapter !!! DANKEEEE !

Ergänzungsfrage: Wie kann ich mir dieses Bootloaderfile selber erzeugen (z.B. für andere Prozessoren) ?

Klaus
 

Geni

User
Hallo Onki,

nachdem die Fuses passen funktioniert es einwandfrei. Ich bin momentan am Vario von nightflyer88 mit GPS und habe Probleme wenn ich den EX-Bus wähle. Warte auf Antwort von Michael.

Gruss Geni
 
Danke Sven,
hab probiert und Bootloader erzeugt jedoch läuft mein eigener leider nicht, der von Holger geht.
Interessant wäre nun die Konfig zu wissen wie diese erzeugt wurden. Hab Holger mal angeschrieben,
aber vielleicht hat jemand einen Hinweis.
Danke Klaus
 
Ansicht hell / dunkel umschalten
Oben Unten