Arduino UNO <-> NANO, unterschiedlich großer Flash-Speicher?

Hi,

habe eine Software auf einem UNO projektiert, und dann final auf einen NANO geladen (wegen der kleineren Baugröße)

Beim UNO sagt die IDE:

Binäre Sketchgröße: 25.392 Bytes (von einem Maximum von 32.256 Bytes)

Beim NANO:

Binäre Sketchgröße: 25.392 Bytes (von einem Maximum von 30.720 Bytes)

Da bei beiden ein ATMega328 drauf ist versteh ich das nicht.
Eigentlich sinds ja bei beiden 32K. Also 32768 Byte.
Dann noch den Bootloader weg…
Ist der beim NANO anders?

Edit: OK…die Werte hat er aus der “boards.txt” Aber wieso sind die unterschiedlich? Hat der NANO einen anderen Bootloader?

Laut board.txt ist auf dem Nano ein anderer Bootloader drauf.

nano328.name=Arduino Nano w/ ATmega328
[...]
nano328.bootloader.low_fuses=0xFF
nano328.bootloader.high_fuses=0xDA
nano328.bootloader.extended_fuses=0x05
nano328.bootloader.path=atmega
nano328.bootloader.file=ATmegaBOOT_168_atmega328.hex
[...]
nano328.build.variant=eightanaloginputs
uno.name=Arduino Uno
[...]
uno.bootloader.low_fuses=0xff
uno.bootloader.high_fuses=0xde
uno.bootloader.extended_fuses=0x05
uno.bootloader.path=optiboot
uno.bootloader.file=optiboot_atmega328.hex
[...]
uno.build.variant=standard

Jetzt die dumme Frage des Tages:

UND WARUM?

Chip ist gleich. Der einzige Unterschied der mir einfällt ist, dass der UNO einen kleinen ATMega als USB-seriell Wandler hat, und der Nano einen FTDI (oder auch schon mal eine CH340) Chip benutzt.

hk007: die Werte hat er aus der "boards.txt" Aber wieso sind die unterschiedlich? Hat der NANO einen anderen Bootloader?

Ja. Und nicht nur die unterschiedliche Größe, sondern auch der jeweilige Bootloader steht in der "boards.txt". Und unterschiedlich groß ist nicht der RAM-Speicher, sondern der für Sketche frei verfügbare Flash-Speicher.

Du kannst Dir sogar einen eigenen neuen Board-Eintrag in der "boards.txt" machen, für den Arduino Nano mit Optiboot und kannst dann über "Bootloader installieren" auch den Optiboot-Bootloader auf dem Nano verwenden.

jurs: Und nicht nur die unterschiedliche Größe, sondern auch der jeweilige Bootloader steht in der "boards.txt".

Du kannst Dir sogar einen eigenen neuen Board-Eintrag in der "boards.txt" machen, für den Arduino Nano mit Optiboot und kannst dann über "Bootloader installieren" auch den Optiboot-Bootloader auf dem Nano verwenden.

Und auch unterschiedliche Fuses stehen da drin :-( Obwohl der gleiche Chip. :astonished: Und den UNO kann ich mit 115200 und den NANO nur mit 57600 flashen. komisch....

Kann ich wirklich den Opti-Bootloader auf dem Nano verwenden? Wären ca. 1,5k mehr Platz für Code :-)

Wie könnte man eigentlich rausfinden, welcher Bootloader auf dem Chip drauf ist? Also jetzt nicht mit ISP-Programmierer drauf, den Bootloaderbereich runterladen, und dann mit dem HEX-Editor vergleichen. Habe mir mal die detaillierte Ausgabe beim Upload angeschaut. In der Hoffnung, dass sich der Bootloader da outet. Aber da find ich nichts.

Edit: Vergesst das mit den Fuses. Der Unterschied ist nur in der High-Fuse bei der Startadresse. Und die ist natürlich bei 2k Bootloader bei 3C00h und beim Optiboot mit 512 bei 3F00h

jurs: Und unterschiedlich groß ist nicht der RAM-Speicher, sondern der für Sketche frei verfügbare Flash-Speicher.

Ja sicher. Hab ich Esel "RAM" geschrieben. Sorry, sollte ins Bett gehen....

hk007: Jetzt die dumme Frage des Tages:

UND WARUM?

Chip ist gleich. Der einzige Unterschied der mir einfällt ist, dass der UNO einen kleinen ATMega als USB-seriell Wandler hat, und der Nano einen FTDI (oder auch schon mal eine CH340) Chip benutzt.

Wenn die Platine einen CH340 hat, dann ist es kein orginaler Arduino sondern ein Nachbau oder eine Fälschung..

Der Arduino Nano mit ATmega328 (war anfangs auch mit ATmega168 bestückt) ist die kleine Version des Arduino 2009. Dieser hatte als USB-Serial Adapter einen FT232RL und einen Bootlader der 2kByte groß war und mit 57600 uploadete. Mit dem Aruino UNO kam ein programmierter ATmega8U2 bzw später mit R3 ein Atmega16U2 als USB-Serial Adapter auf's Board. Gleichzeitig ein Bootloader mit 0,5Kbyte und 115200 Übertragunggeschwindigkeit. Das Resetieren beim Upload wurde nicht mehr durch die DTR-Leitung aktiviert sondern durch eine 1200 Baudrate. Der Arduino NANO der von Gravitech produziert wird, hat immernoch die Hardware-Konfiguration und Bootloader wie das Vorgängermodell des Arduino UNO.

Wenn Du Not an Flashspeicher hast, dann lösche den Bootloader und schreibe den Sketch mit einem ISP-Programmierer drauf. So hast Du den vollen Flashspeicher zur Verfügung.

Grüße Uwe

Mag ja sein dass er mit ISP brennt und mehr speicher hat, angezeigt wird aber nicht mehr! dazu muss man schon die board.txt ändern.

uwefed:
Wenn die Platine einen CH340 hat, dann ist es kein orginaler Arduino sondern ein Nachbau oder eine Fälschung…

Ja stimmt. Hab mir mal so einen China-Clone zum Vergleich geschossen.

uwefed:
Wenn Du Not an Flashspeicher hast, dann lösche den Bootloader und schreibe den Sketch mit einem ISP-Programmierer drauf. So hast Du den vollen Flashspeicher zur Verfügung.

OK, auch ne Möglichkeit.
USB ist aber irgendwie bequemer. V.a. während der Entwicklung.
Momentan reicht der Flash noch einigermassen. Geht mir aktuell um technische Hintergründe.

Aber noch mal meine Frage:
Kann ich den Opti-Bootloader auch auf den Nano verwenden? Dazu natürlich dann die boards.txt umändern.
Also den hier: optiboot_atmega328.hex
Wobei ich gerade gesehen habe, dass es noch einen anderen gibt: optiboot_atmega328-Mini.hex. Wohl eine abgespeckte Variante?

hk007: OK, auch ne Möglichkeit. USB ist aber irgendwie bequemer. V.a. während der Entwicklung. Momentan reicht der Flash noch einigermassen. Geht mir aktuell um technische Hintergründe.

Der USBasp wird ebenfalls per USB angeschlossen und seinerseits dann per ISP und er wird von der IDE ebenfalls unterstützt. Wo ist das Problem? Ich sehe darin nur Vorteile. Ich kann mir den Bootloader nicht zersägen, weil ich ihn garnicht brauche. Ich habe die serielle Schnittstelle, bzw. 2 Pins mehr zur Verfügung. Und wenn's eng wird, spare ich noch Platz. Da ich den Uno nur "zum Spielen" und für Testaufbauten nutze und für ernsthafte Projekte sowieso den ATMEGA standalone mit ein paar Bauelementen auf Lochraster verwende und dort eh einen ISP Header habe, macht das für mich keinen Unterschied.

Gruß Gerald

So, noch mal ein Feedback:

Original war beim Nano der 2K-Bootloader drauf. Hab das komplette Flash ausgelesen, und gesehen, dass er bei 7800h begann

Hab jetzt meine boards.txt ergänzt:

nanoOpti.name=Arduino Nano Opti-Bootloader
nanoOpti.upload.protocol=arduino
nanoOpti.upload.maximum_size=32256
nanoOpti.upload.speed=115200
nanoOpti.bootloader.low_fuses=0xff
nanoOpti.bootloader.high_fuses=0xde
nanoOpti.bootloader.extended_fuses=0x05
nanoOpti.bootloader.path=optiboot
nanoOpti.bootloader.file=optiboot_atmega328.hex
nanoOpti.bootloader.unlock_bits=0x3F
nanoOpti.bootloader.lock_bits=0x0F
nanoOpti.build.mcu=atmega328p
nanoOpti.build.f_cpu=16000000L
nanoOpti.build.core=arduino
nanoOpti.build.variant=eightanaloginputs

Den Bootloader mit meinem USBasp draufgenagelt. Nach Auslesen des Flash beginnt der Bootloader nun bei 7E00h. Konnte meinen Sketch ganz normal laden. Mit 32256 Bytes, und double-speed :-) Sieht gut aus.