Arduino ohne Bootlader flashen

Hi, ich will einen 328 ohne Bootloader flashen und allen Speicher zur Verfügung haben.

Das Flashen per USBasp klappt auch einwandfrei aus der IDE, jedoch kommt die Meldung, das "Maximum sind 30.720 Bytes", und keine 32768. Was belegt da die 2k? Der nicht mehr verwendete Bootloader?

Wie kriege ich das him, dass ich alle 32k Flash zur Verfügung habe. Mein alter Kumpel Google hat Tausende Ergebnisse ausgespuckt, bin aber nicht wirklich fündig geworden.

Die Begrenzung müsste aus der board.txt kommen. Die vollen 32KB wirst du aber auch nicht erreichen, da auch kein Bootloader 256 Byte belegt. Um erst einmal überhaupt den 2KB Bootloader Bereich auf 256Byte zu beschränken muss du die Fuses verändern.

Wie sschultewolter bereits schrieb, kann man den für einen Bootloader reservierten Speicher zwar verringern, jedoch nicht komplett freigeben.
Unter http://www.engbedded.com/fusecalc findest du einen Fuse-Calculator. Wenn du zuerst deinen Atmega328P einstellst, kannst du als nächstes im Bereich "Boot Flash section size" den geringsmöglichen Wert (256 words, nicht Bytes ;)) wählen, ein Klick auf "Apply" berechnet dann die gewünschten Fusebits, mit denen dein Mikrocontroller geflsht werden muss.

Erstmal danke für die Info. Werde die Links lesen, mal sehen, ob ich weiterkomme.

Ist eigentlich Instabilität nur bei zuwenig freiem RAM oder auch wenn das Flash voll ist?

Der Bootloader befindet sich im Flash, nicht im RAM! Knapper Flash ist nicht vorteilhaft, aber deutlich harmloser als knapper RAM! Beim RAM musst du aufpassen, denn dieser verändert sich mit der Laufzeit des Programmes. Ein größer Punkt, wieso viele Anfänger oder auch Fortgeschritten Projekte für eine gewissen Zeit problemlos laufen und erst nach eingen Stunden / Tage zu problemen führen, bei denen nichts mehr vom MCU erledigt wird.

sth77:
Wie sschultewolter bereits schrieb, kann man den für einen Bootloader reservierten Speicher zwar verringern, jedoch nicht komplett freigeben.

Hallo,

wenn BOOTRST auf Null gesetzt wird und das komplette Lock-Byte auf 0xFF sollte der komplette Flash frei sein und kein Bootloader verwendet werden. Die Einstellungen von BOOTSZ0 und BOOTSZ1 haben dann keine Wirkung.

Gruß,
Ralf

Ist ja doch komplizierter als gedacht. Der Fuse bit Rechner scheint ja ganz gut zu sein, aber da sehe ich, was mir noch alles an Grundlagen fehlt.

Gibt's irgendwo ein Schritt für Schritt TUT für sowas auf deutsch?

auf Deutsch nicht bekannt, aber schau mal ins Datenblatt des Atmega

Hab mich jetzt etwas eingelesen und mit Avrdude rumgespielt.

Die Fuses habe ich ausgelesen, waren FF DA 05

Mit http://www.engbedded.com/fusecalc kalkulert, kleinster Bootloader, kein Brownout, auf FF DE FF

Mit C:\WinAVR-20100110\bin\avrdude -c usbasp -P usb -p m328p -U lfuse:w:0xff:m -U hfuse:w:0xde:m -U efuse:w:0xff:m
geschrieben, Fehler:

avrdude: safemode: efuse changed! Was ff, and is now 7
Would you like this fuse to be changed back? [y/n] n
avrdude: safemode: Fuses OK

gelesen, sind tatsächlich geschrieben worden.

Blink draufgehauen per ISP, 30720 Bytes Speicher,

Dann Boards.txt geändert auf

## Arduino Pro or Pro Mini (5V, 16 MHz) w/ ATmega328 fuses changed FF DE 07
## -------------------------------------------------
pro.menu.cpu.16MHzatmega328=ATmega328 fuses changed FF DE 07(5V, 16 MHz)

pro.menu.cpu.16MHzatmega328.upload.maximum_size=30720
pro.menu.cpu.16MHzatmega328.upload.maximum_data_size=2048
pro.menu.cpu.16MHzatmega328.upload.speed=57600

pro.menu.cpu.16MHzatmega328.bootloader.low_fuses=0xFF
pro.menu.cpu.16MHzatmega328.bootloader.high_fuses=0xDE
pro.menu.cpu.16MHzatmega328.bootloader.extended_fuses=0x07
##pro.menu.cpu.16MHzatmega328.bootloader.file=atmega/ATmegaBOOT_168_atmega328.hex

pro.menu.cpu.16MHzatmega328.build.mcu=atmega328p
pro.menu.cpu.16MHzatmega328.build.f_cpu=16000000L

IDE frisch gestartet, Blink drauf, immer noch 30720 Bytes Speicher.

:confused: Was mache ich falsch, oder was fehlt mir noch? Ich will jetzt schon aus Prinzip die paar Bytes haben, wo ich schon soweit gekommen bin.

Wer lesen kann, ....

bin grad schon selber draufgekommen:

pro.menu.cpu.16MHzatmega328.upload.maximum_size=30720

Test abgeschlossen, läuft.

mit
pro.menu.cpu.16MHzatmega328.upload.maximum_size=32256

in der boards.txt habe ich nun ein Programm hochgeladen, das nur aus vielen Zeilen

Serial.println(F("hjagsdhjdgahjvdcmsdfghseafsdbcdsmhfadhsvfdasb csdbfdhsbcfdsabjkb czbcsdbfs"));

Besteht und 32.222.Bytes braucht, siehe hier:

Der Sketch verwendet 32.222 Bytes (99%) des Programmspeicherplatzes. Das Maximum sind 32.256 Bytes.
Globale Variablen verwenden 182 Bytes (8%) des dynamischen Speichers, 1.866 Bytes für lokale Variablen verbleiben. Das Maximum sind 2.048 Bytes.

Der Pro Mini hats gefressen, und auf der seriellen kommt Text raus, bis sich es dann irgendwann mal aufhängt. Da dies ja kein RAM brauchen sollte, dürfte es daran nicht liegen, eher an den 99% Flash.

So wie es aussieht, ist es doch nicht der 328, der abschmiert, sondern mein PC. Das Fenster der seriellen Schnittstelle hat Zeichen verschluckt, das schrieb ich dem AVR zu.

Mit Putty probiert, nach kurzer Zeit PC ganz abgestürzt. Mehrmals probiert, immer wenn Putty kurze Zeit Daten mit 115200 bekommt, friert der PC ein. Mist!

Hab mal delays und blink mit reingemacht und überwache das ganze mal.

Sicher das der Atmega dann noch arbeitet? Las eine Led einfach im Sekundentakt aufblinken. Zeichen verschlucken liegt vermutlich an falschen Einstellungen bzw. Genauigkeiten.

Der Pro Mini hat nur einen Resonator. Diese sind nicht so genau wie Quarze. 1-5% Sollte für UART meist unproblematisch sein. Jedoch kommen da noch je nach Einstellung 2.1 - 3.5% an Fehlern hinzu!

http://www.gjlay.de/helferlein/avr-uart-rechner.html

Teste mal 76800

Mit etwas blink und delay zwischen den seriellen Ausgaben hat er schön die Nacht durchgemacht.

Hab auch nur GND und TX angeschlossen, dass er beim Öffnen von Putty nicht resettet.

Also AVR komplett freigesprochen.

freu

Schachmann:
wenn BOOTRST auf Null gesetzt wird und das komplette Lock-Byte auf 0xFF sollte der komplette Flash frei sein und kein Bootloader verwendet werden. Die Einstellungen von BOOTSZ0 und BOOTSZ1 haben dann keine Wirkung.

Das ist des Pudels Kern !
In einem anderen Thread von mir hatte ich auch die Behauptung aufgestellt das man die Bootloadersektion nicht ganz auf null setzen kann.
Da keiner wiedersprochen hat war ich der Meinung dies sei richtig - bis gerade eben :slight_smile: