Bootloader für Atmega328pb

Ich hab mir auf den 328PB den minicore bootloader drauf geknallt.

upload mache ich dann mit avrdude über serial

Ja also hab hier 2 chips liegen, den atmega 328p und den 328pb, den 328p kann ich ohne probleme flashen, also bootloader und sketch funktionieren einwandfrei, aber das pb model will nicht

avrdude: Version 6.3-20190619
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch

         System wide configuration file is "C:\Users\Medi Muriqi\Documents\Arduino\hardware\MiniCore-master\avr/avrdude.conf"

         Using Port                    : usb
         Using Programmer              : usbasp
         AVR Part                      : ATmega328PB
         Chip Erase delay              : 9000 us
         PAGEL                         : PD7
         BS2                           : PC2
         RESET disposition             : dedicated
         RETRY pulse                   : SCK
         serial program mode           : yes
         parallel program mode         : yes
         Timeout                       : 200
         StabDelay                     : 100
         CmdexeDelay                   : 25
         SyncLoops                     : 32
         ByteDelay                     : 0
         PollIndex                     : 3
         PollValue                     : 0x53
         Memory Detail                 :

                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           eeprom        65    20     4    0 no       1024    4      0  3600  3600 0xff 0xff
           flash         65     6   128    0 yes     32768  128    256  4500  4500 0xff 0xff
           lfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           hfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           lock           0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00
           efuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00

         Programmer Type : usbasp
         Description     : USBasp, http://www.fischl.de/usbasp/

avrdude: auto set sck period (because given equals null)
avrdude: error: program enable: target doesn't answer. 1 
avrdude: initialization failed, rc=-1
         Double check connections and try again, or use -F to override
         this check.


avrdude done.  Thank you.

Fehler beim Brennen des Bootloaders.

wenn man die signatur vom 328p auf die vom pb in der avrdude config ändert, kann man auch den ide nano bootloader auf den pb flashen.
sozusagen ein kleiner workaround.

ich glaub ich bleib beim 328p, das macht keine Probleme, obwohl der 328pb interessant ist

Jetzt hast Du Dich schon so weit vorgekämpft und sogar einen Programmer angeschafft...

Ich nutze Atmel Studio 7 und ebenfalls einen Programmer (aber anderes Modell, Amazon bzw. Reichelt) zum Brennen von Bootloadern.

Wäre vielleicht noch einen letzten Versuch wert...
Gruß Walter

ich hab so nen einfachen usbasp programmer:
https://www.ebay.de/itm/124165610935

Hallo,

ich blick leider nicht durch was nun mit dem 328PB funktioniert und was nicht, weil Zwischendurch immer mal wieder "funktioniert" auftaucht.
Mein avrdude Ordner hängt dran, damit funktioniert auf jeden Fall der ATmega328PB, weil in der .conf enthalten.
Ich habe einen orignalen AVRISPmkII. Mit dem Zadig Tool 2.5 habe ich den Treiber auf "libusb-win32 (v1.2.6.9)" umgestellt, https://zadig.akeo.ie/ mit Adminrechten, dann > Option > List all Devices

Wenn dein Programmer per COM Port angesprochen wird, dann musste den COM Port mit der -P Option angeben.
-P com3 (3 steht stellvertretend für die Comport Nummer)

In der Eingabeaufforderung mein Test mit

avrdude -c avrispmkII -p m328pb -v
oder
avrdude -c avrispmkII -p m328pb -P usb -v
bringt mir:

avrdude: Version 6.3, compiled on Feb 17 2016 at 09:25:53
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2014 Joerg Wunsch

System wide configuration file is "C:\avrToolchain\avrdude\avrdude.conf"

Using Port : usb
Using Programmer : avrispmkII
avrdude: usbdev_open(): Found AVRISP mkII, serno: 000200215972
AVR Part : ATmega328PB
Chip Erase delay : 9000 us
PAGEL : PD7
BS2 : PC2
RESET disposition : dedicated
RETRY pulse : SCK
serial program mode : yes
parallel program mode : yes
Timeout : 200
StabDelay : 100
CmdexeDelay : 25
SyncLoops : 32
ByteDelay : 0
PollIndex : 3
PollValue : 0x53
Memory Detail :

Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack


eeprom 65 20 4 0 no 1024 4 0 3600 3600 0xff 0xff
flash 65 6 128 0 yes 32768 128 256 4500 4500 0xff 0xff
lfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
hfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
efuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
lock 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
calibration 0 0 0 0 no 1 0 0 0 0 0x00 0x00
signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00

Programmer Type : STK500V2
Description : Atmel AVR ISP mkII
Programmer Model: AVRISP mkII
Hardware Version: 1
Firmware Version Master : 1.24
Vtarget : 5.0 V
SCK period : 8.00 us

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.02s

avrdude: Device signature = 0x1e9516 (probably m328pb)
avrdude: safemode: hfuse reads as D1
avrdude: safemode: efuse reads as FC

avrdude: safemode: hfuse reads as D1
avrdude: safemode: efuse reads as FC
avrdude: safemode: Fuses OK (E:FC, H:D1, L:FF)

avrdude.zip (463 KB)

wo bekommt man den Originalen AVRISPmkII noch, hab nix gefunden, bis auf jede menge China Clones, was funktioniert ist der 328p, jedoch nicht der 328pb, bei mir erscheint kein com port, nur usb

Hallo,

den gibts schon seit Jahren nicht mehr. Das war auch nur ein Hinweis darauf das du nicht meine avrdude Optionen für meinen Programmer verwendest, sondern den für deinen Programmer. Mehr nicht. Da du schon flashen konntest, musst du ja wissen welche Option bei dir funktioniert. Ich möchte nur wissen ob der einfache Test den ATmega328PB anzusprechen funktioniert. Sonst brauchst du nicht weitermachen.
Die Ausgabe muss dann wie bei mir aussehen. Und verwende meine avrdude.conf, sonst kennt avrdude den ATmega328PB nicht.
Am Besten entpackste das .zip in dein Userverzeichnis, dann sind die Pfade kurz für die Orgie.
Also C:\Users\Medolino\avrdude....
Dann gehste in die Windows Eingabeaufforderung (Windowstaste + R > cmd) und wechselst in den Ordner 'avrdude'
und gibts angepasst für deinen Programmer und deinen COM Port
Bsp.1: avrdude -c avrispmkII -p m328pb -v -P usb
Bsp.2: avrdude -c avrispmkII -p m328pb -v -P com9
ein. Also -c und -P änderst du für dich ab. Was du hier vorgeben musst weiß nicht, kann ich dir nicht sagen, solltest du jedoch schon wissen. Wenn du keinen COMport hast sondern USB, dann eben -P usb. Den Programmernamen musste aber anpassen. Was da auch immer zu was kompatibel ist.

Falls das klappt flashste die passende Bootloaderdatei. Da bin ich ehrlich gesagt überfragt was die Baudratenauswahl zu sagen hat. 115200 sind eigentlich normal dafür. Zumindestens nutzt das die IDE für andere Boards. Danach beschaltest du den ATmega328PB wie MCUdude das hier zeigt


und konfigurierst in der IDE das 328PB Menü vorm Blinksketch übertragen.

Hallo,

was ich noch testen konnte.

Bootloader flashen, habe mir mal die 16MHz Version mit Baudrate 115200 für USART0 rausgesucht. Mein 328PB hat einen 16MHz Quarz.
aus dem Verzeichnis
C:\Users\Doc\AppData\Local\Arduino15\packages\MiniCore\hardware\avr\2.0.5\bootloaders\optiboot_flash\bootloaders\atmega328pb\16000000L

die Datei: optiboot_flash_atmega328pb_UART0_115200_16000000L_B5.hex nach
C:\Users\Doc\avrdude
kopiert und eingekürzt auf optiboot328pb.hex
dann geflasht mit:
avrdude -c avrispmkII -p m328pb -v -P usb -e -U flash:w:"C:\avrToolchain\avrdude\optiboot328pb.hex":i

Mehr kann ich nicht testen, da ich keinen USB-Serial Wandler mit herausgeführten DTR Signal habe. Ab hier müßtest du wie im obigen Link den 328PB anders beschalten und solltest aus der IDE heraus Sketche programmieren können. Den ISP Programmer kannste dran lassen. Wird aber ab hier nicht benötigt. Wichtig ist die serielle Beschaltung inkl. Reset Pullup, 100nF und gekreuzte Tx/Rx. Eben so wie im Link.

Nochwas. Falls du soweit kommst den Bootloader zu flashen aber danach scheiterst, dann wäre es nur ein halber Beinbruch. Du kannst die fertig kompilierten Sketche auch ohne Bootloader direkt flashen. Ist nur etwas umständlicher immer die .hex Files rauszufischen. Also statt Bootloader flasht du die Programmfiles. Die avrdude Option -e lässte aber dann weg. Musst aber die Fuses einmalig richtig einstellen. Sonst taktet ein jungfräulicher ATmega in der Regel mit 1MHz ohne Quarz.

Nochwas. Vielleicht lags/liegst auch daran. Nach jeden Flashvorgang den Controller reseten. :wink:

werd ich ausprobieren, vielen dank für die ausführliche erklärung

Hallo,

habe heute meinen USB-Serial Wandler mit FTDI FT232RL modifiziert und das DTR Signal herausgeführt und den ganzen Spass durchexerziert.
Aber der Reihe nach.
Wenn man den Bootloader mittels separaten ISP Programmer flasht, muss man sich auch selbst um die Fuse Einstellungen kümmern.

avrdude -c avrispmkII -p m328pb -v -P usb -U hfuse:w:0xD6:m -U lfuse:w:0xFF:m
Das gilt für den üblichen 16MHz externen Quarz.

Man muss beim ATmega328PB übrigens keine Angst vorm Takteinstellung verfusen haben. Solange man das Fusebit 'CFD' in Ruhe lässt. Der schaltet automatisch in den Notbetrieb wenn er keinen Takt erkennt. Man benötigt keinen externen Hilfstakt für Rettungsmaßnahmen. Das am Rande.

Flasht man den Bootloader irgendwie über die Arduino IDE Bootloader Option sollten die Fuses automatisch richtig eingestellt werden.

Egal wie, sind die Fuse gesetzt flasht man den passenden Bootloader. Meine alte Vermutung war richtig.
Die optiboot Datei für 16Mhz, Baudrate 115200 und USART0 passt.

avrdude -c avrispmkII -p m328pb -v -P usb -U flash:w:"C:\avrToolchain\avrdude\optiboot_UART0_115200_16MHz.hex":i -e

Ab hier kann man den ISP Programmer abklemmen.

Jetzt klemmt man einen passenden USB-Serial Wandler mit verfügbaren DTR Signal an. Ohne DTR Signal gehts nicht. Das heißt die einfachen Kabel mit Prolific Chip u.ä. sind dafür nicht ausreichend.

Jetzt stellt man in der IDE noch alle Einstellung richtig und kann uploaden.
IDE Einstellung.png

Das wars. Meine Testblinkled mit Arduino Pinnummer 8 steckt an Controllerpin 'PB0'.
Der µC resetet automatisch nach Upload.

IDE Einstellung.png

Ich hatte glück die tage, hab tatsächlich noch ein Originales Avrisp mk2 durch zufall bei einem kollegen bekommen der sich das teil vor Jahren zugelegt hat um auch mit dem Progen zu starten, ist aber nie dazu gekommen, werd die Tage mal das ganze in angriff nehmen. besten Dank für die Hilfestellung

Hallo,

dann haste echt Glück, hoffentlich möchte dein Kollege den nicht zurück. :slight_smile:
Dann kann mit dem ATmega328PB nichts mehr schief gehen.

ne den bekommt er nicht mehr :smiley: , hat ja en fufi bekommen

Also, hab das ganze genau nach Anleitung gemacht, aber die PB will er immer noch nicht, die P Version jedoch ohne probleme

PB Version

C:\Users\Medi Muriqi>avrdude -c avrispmkII -p m328pb -v -P usb

avrdude: Version 6.3, compiled on Feb 17 2016 at 09:25:53
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch

         System wide configuration file is "C:\AVRDUDE\avrdude.conf"

         Using Port                    : usb
         Using Programmer              : avrispmkII
avrdude: usbdev_open(): Found AVRISP mkII, serno: 0000B0047920
         AVR Part                      : ATmega328PB
         Chip Erase delay              : 9000 us
         PAGEL                         : PD7
         BS2                           : PC2
         RESET disposition             : dedicated
         RETRY pulse                   : SCK
         serial program mode           : yes
         parallel program mode         : yes
         Timeout                       : 200
         StabDelay                     : 100
         CmdexeDelay                   : 25
         SyncLoops                     : 32
         ByteDelay                     : 0
         PollIndex                     : 3
         PollValue                     : 0x53
         Memory Detail                 :

                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           eeprom        65    20     4    0 no       1024    4      0  3600  3600 0xff 0xff
           flash         65     6   128    0 yes     32768  128    256  4500  4500 0xff 0xff
           lfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           hfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           efuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           lock           0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00

         Programmer Type : STK500V2
         Description     : Atmel AVR ISP mkII
         Programmer Model: AVRISP mkII
         Hardware Version: 1
         Firmware Version Master : 1.24
         Vtarget         : 5.0 V
         SCK period      : 8.00 us

avrdude: stk500v2_command(): command failed
avrdude: stk500v2_program_enable(): bad AVRISPmkII connection status: Unknown status 0x00
avrdude: initialization failed, rc=-1
         Double check connections and try again, or use -F to override
         this check.


avrdude done.  Thank you.

und die P Version

C:\Users\Medi Muriqi>avrdude -c avrispmkII -p m328p -v -P usb

avrdude: Version 6.3, compiled on Feb 17 2016 at 09:25:53
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch

         System wide configuration file is "C:\AVRDUDE\avrdude.conf"

         Using Port                    : usb
         Using Programmer              : avrispmkII
avrdude: usbdev_open(): Found AVRISP mkII, serno: 0000B0047920
         AVR Part                      : ATmega328P
         Chip Erase delay              : 9000 us
         PAGEL                         : PD7
         BS2                           : PC2
         RESET disposition             : dedicated
         RETRY pulse                   : SCK
         serial program mode           : yes
         parallel program mode         : yes
         Timeout                       : 200
         StabDelay                     : 100
         CmdexeDelay                   : 25
         SyncLoops                     : 32
         ByteDelay                     : 0
         PollIndex                     : 3
         PollValue                     : 0x53
         Memory Detail                 :

                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           eeprom        65    20     4    0 no       1024    4      0  3600  3600 0xff 0xff
           flash         65     6   128    0 yes     32768  128    256  4500  4500 0xff 0xff
           lfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           hfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           efuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           lock           0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00

         Programmer Type : STK500V2
         Description     : Atmel AVR ISP mkII
         Programmer Model: AVRISP mkII
         Hardware Version: 1
         Firmware Version Master : 1.24
         Vtarget         : 5.0 V
         SCK period      : 8.00 us

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.02s

avrdude: Device signature = 0x1e950f (probably m328p)
avrdude: safemode: hfuse reads as D6
avrdude: safemode: efuse reads as FD

avrdude: safemode: hfuse reads as D6
avrdude: safemode: efuse reads as FD
avrdude: safemode: Fuses OK (E:FD, H:D6, L:F7)

avrdude done.  Thank you.

EDIT: auch der PB funktioniert, hab scheinbar einen Defekten erwischt, bei einem anderen funktioniert es wie es soll, Vielen Dank nochmals

Moin,

sehr schön, haben sich die Anstrengungen gelohnt. :wink:

Medolino73:
EDIT: auch der PB funktioniert, hab scheinbar einen Defekten erwischt, bei einem anderen funktioniert es wie es soll, Vielen Dank nochmals

Ich weiß nicht wie euer ISP Adapter reagiert, aber bei meinen Fabrikneuen AVR muss ich den ISP Takt manchmal runter setzen.

Avrdude kennt dazu den -B Parameter.
Der USBasp hat dafür einen Jumper.

Hallo,

am ISP Takt habe ich noch nicht rumfummeln müssen. Bis jetzt.

Habe aber beim 328PB vielleicht noch eine Vermutung. Der hat ja das Clock Failure Detection Feature. Wenn der keinen Takt erkennt o.ä. schaltet der auf interne 1MHz um, dann benötigt er einen Reset extra falls er noch nicht ansprechbar ist.

Als ich den neu auf meinem Steckbrett hatte bin ich bald blöde gewurden. Am Ende war der Quarz falsch gesteckt gewesen bzw. hatte Kontaktprobleme, irgendwie sowas war das. Entweder reagierte er gar nicht oder der "Led Takt" war falsch. Hatte mich beinahe in den Wahnsinn getrieben, bis ich das Spiel mit dem CFD verstanden hatte. Das CFD ist ein geiles Feature, verfusen kann man den damit praktisch nicht mehr bzw. benötigt man keinen externen Takt zum wiederbeleben. Davor hatte ich einen Arduino Timer "programmiert" der mir 8MHz erzeugte als Behelfstaktquelle - nach dem die Taktquelle verfust war.