Problème bootloader atmega328PB

Bonjour à tous.
Sur un PCB maison, à base d'atmega328PB-AU, je bloque depuis 2 jours sur le pourquoi je n'arrive pas du tout à téléverser le bootloader pour pouvoir programmer le PCB avec l'ide arduino.

J'obtiens systématiquement cette erreur :

avrdude: Version 7.1-arduino.1
         Copyright the AVRDUDE authors;
         see https://github.com/avrdudes/avrdude/blob/main/AUTHORS

         System wide configuration file is C:\Users\PC\AppData\Local\Arduino15\packages\MiniCore\hardware\avr\2.2.2\avrdude.conf

         Using Port                    : COM3
         Using Programmer              : stk500v1
         Overriding Baud Rate          : 19200
         AVR Part                      : ATmega328PB
         Chip Erase delay              : 10500 us
         PAGEL                         : PD7
         BS2                           : PC2
         RESET disposition             : possible i/o
         RETRY pulse                   : SCK
         Serial program mode           : yes
         Parallel program mode         : yes
         Timeout                       : 200
         StabDelay                     : 100
         CmdexeDelay                   : 25
         SyncLoops                     : 32
         PollIndex                     : 3
         PollValue                     : 0x53
         Memory Detail                 :

                                           Block Poll               Page                       Polled
           Memory Type Alias    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    1      0  4500  4500 0x00 0x00
           hfuse                   0     0     0    0 no          1    1      0  4500  4500 0x00 0x00
           efuse                   0     0     0    0 no          1    1      0  4500  4500 0x00 0x00
           lock                    0     0     0    0 no          1    1      0  4500  4500 0x00 0x00
           signature               0     0     0    0 no          3    1      0     0     0 0x00 0x00
           calibration             0     0     0    0 no          1    1      0     0     0 0x00 0x00

         Programmer Type : STK500
         Description     : Atmel STK500 version 1.x firmware
         Hardware Version: 2
         Firmware Version: 1.18
         Topcard         : Unknown
         Vtarget         : 0.0 V
         Varef           : 0.0 V
         Oscillator      : Off
         SCK period      : 0.1 us

avrdude: AVR device initialized and ready to accept instructions
avrdude: device signature = 0x000000 (retrying)
avrdude: device signature = 0x000000 (retrying)
avrdude: device signature = 0x000000
avrdude main() error: Yikes!  Invalid device signature.
avrdude main() error: expected signature for ATmega328PB is 1E 95 16
        Double check connections and try again, or use -F to override
        this check.


avrdude done.  Thank you.

Failed chip erase: uploading error: exit status 1

J'utilise un arduino UNO R3 en temps que ISP avec la configuration suivante :

Le cablage entre arduino uno et le pcb maison que j'ai effectué est le suivant :

pin 13 uno (SCK) -> pin 17 du 328pb (PB5)
pin 12 uno (MISO) -> pin 16 du 328pb (PB4)
pin 11 uno (MOSI) -> pin 15 du 328pb (PB3)
pin 10 uno (SS) -> pin 29 du 328pb (PC6_reset)

En observant a l'oscillo la chute de tension sur la pin reset du 328pb au demarrage du téléversement, la tension chute systématiquement de 4.9V à 4.5V uniquement.

J'ai pensé que cela était anormal, peut être dû au condo placé sur le pin reset du 328Pb, j'ai donc déssoudé le condo et re-essayé, mais rien n'y fait, la tension chute toujours de la même façon.

Est-ce un simple problème de mauvaise config de l'arduino IDE avant televersement ?

Merci d'avance pour votre aide

Il vient d'y avoir un sujet sur ce problème.

Quand je dis il vient, la dernière réponse date de ce matin, tu n'as pas cherché beaucoup.

Je ne suis pas un grand spécialiste, mais Arduino mélange configuration du microcontroleur et bootloader.

Pour utiliser un microcontroleur avr il faut configurer les "fuses" qui ne sont plus des fusibles mais de l'eeprom très particulière.

Ensuite, si on veut, mais ce n'est pas obligatoire , on peut charger un bootloader pour pouvoir programmer au travers d'une interface USB/série.

Si on n'a pas de bootloader il faut programmer en mode ISCP, le même mode qui sert à charger le bootloader.

Ces opérations se font en utilisant le programme fourni par Atmel : avrdude.
La documentation d'avrdude est publique, il suffit de la chercher et de la télécharger.

Les choix pour les fuses : il suffit de regarder la datasheet. Il semble que ce soit les mêmes que pour la version 328p.

Le bootloader, ben il faut en trouver un qui soit compatible avec le 328PB.
Et cela ne court pas les rues, Arduino ne s'étant pas interessé au 328PB, n'ayant visiblement aucune intention de continuer dans les micro 8 bits.

Bonjour,

un peu de lecture qui pourra peut-être vous aider ?

C'est ici : Avrdude issues: Programming the ATMEGA328PB with the Arduino ISP on Arduino 1.18.3

Déjà dit sur l'autre post sur le même sujet :
L'ATMega328P est entré en phase de fin de vie et coute plus cher que le 328PB.
Donc plus aucune possibilité de voir des façonniers passer des commandes de 328P.

Bonjour @68tjs , je n'avais effectivement pas vu ce post, en cherchant sur gogole...
Neanmoins, ce post rejoins pas mal d'autres post que j'ai lu, càd que plusieurs solutions existent. J'ai essayé plusieurs artifices lues, mais ne marche pas dans mon cas.

C'est bien cela que je voulais eviter, mais je commence à comprendre que je n'aurai d'autres choix.

J'ai donc choisi d'utiliser avrdude, mais je n'y comprends pas encore grand chose du fonctionnement :

J'ai essayé de lire l'état du registre des fuses de mon 328pb avec cette commande (même branchement avec arduino uno du post 1)

avrdude -c arduinoisp -p m328pb -P com3 -b 19200 -U lfuse:r:-:i -v

Ce qui me donne comme résultats

J'ai aussi essayé de brancher directement mon pcb par USB (convertisseur FT232R) et j'obiens avec la commande

avrdude -c ft232r -p m328pb -P com8 -b 19200 -U lfuse:r:-:i -v

J'aimerais donc verifier que les fuses sont bien configurés que tenir compte de l'oscillateur externe (16Mhz), je bloque donc pour le moment

Bonjour @JMe87
Merci pour lien.
J'ai déjà installé le package minicore (on peut le voir sur la 1ère image du 1er post.

Il y a vraissemblablement un problème de communication avec le uno et le 328PB. C'est pourquoi je souhaite donc vérifier en 1er l'état des fuses d'horloge.

Bonjour,

J'ai eu des problèmes pour pour programmer le boot loader avec minicore (avec un usbasp ou un usbtinyisp).
J'ai remplacé le avrdude et anrdude.conf qui se trouve sous minicore\tools par avrdude version 7.0 et la plus de problème.

Si tu es sous windows, je te conseille d'utiliser avrdudess (version 2.14) qui est une interface graphique pour avrdude.

Bonsoir @kamill
Ton message me redonne de l'espoir...
Je vais essayer avrdudess

Merci, je vais essayer cette manip

D'après @kamill , si tu suis l'autre fil de discussion, les fuses sont identiques et il n'a pas de problème avec les 328PB en les utilisant comme des classiques 328P.

Il faut juste sélectionner "old bootloader".

Historique pour comprendre cette histoire d'old bootloader et optiboot
Il existe deux versions du bootloader.
Quand la nano est sortie la première version du bootloader était en service, il oocupait 1 koctets de mémoire.
La UNO est sortie avec la deuxieme version (optiboot) qui occupait 500 octets de moins.
Plusieurs années après, Arduino a décidé de passer "SA" nano avec le nouveau bootloader.
Les fabricants de clones chinois ont refusé de modifier leurs chaines de fabrication pour gagner 500 octets et livrent toujours avec l'ancien bootloader.

Et donc avec clone dans l'IDE il faut choisir "Old bootloader".

Sur l'autre post @jfs59 indique un site où télécharger les bibliothèques complémentaires pour utiliser totalement les 328PB (2 UART, 2 I2C, etc.....).

Important :
Deux fils simultanés pour le même sujet c'est un de trop.
C'est des informations perdues.

Je ne sais pas fusionner deux fils de discussions, peut être que quelqu'un le fera,
en attendant je te demande de continuer sur le premier qui a été ouvert sachant que la solution sera la même pour vous deux.

Merci.

@68tjs je vais m'occuper de poster un résumé (si solution trouvé) sur le post cité alors, pour résumé cela

Merci.
L'important est de garder en tête que ce forum est un site de partage.
Les solutions trouvées doivent servir au plus grand nombre.

1 Like

je me suis mis serieusement à avrdudess, mais qqch m'échappe :

Je selectionne tout d'abord le programmer arduino pour voir si le logiciel detecte bien :

Sur la 1ère ligne de commande, je suis censé detecter l'arduino uno 1 connecté au PORT 6 (un arduino uno sans isp) -> la commande fonctionne, elle detecte bien

Sur la 2ème ligne, je connecte cette fois ci l'arduino uno 2 (avec programme ISP à l'intérieur), pareil, avrdudess le reconnais.

Je branche ensuite le arduino 1 (esclave) sur le arduino 2 (en tant que maitre) comme si je voulais uploader le bootloader (cables miso, mosi etc).

Je selectionne donc sur le logiciel avrdudess le programmer Arduino ISP Programmer (d'ailleurs au passage, il y a au choix 2 qui portent exactement le meme nom, étrange...) et la, erreur...

La même erreur se produit lorsque je connecte à l'arduino maitre, mon pcb perso 328pb.

J'ai donc tendance à croire que je ne dois pas du tout savoir utilisé avrdudess ou alors il y en une configuration à faire ?

Merci de m'aider car là, c'est le flou total ^^

(PS, ne pas tenir compte des hfuse... c'était pour essayer l'upload de optiboot)

Je me demande aussi si au final, un uno en tant qu'ISP fonctionne vraiment dans la problèmatique que j'ai ?
Ne faudrait-il pas obligatoirement utiliser un programmer comme USBTinyISP pour success ?

Ca fait longtemps que je ne l'ai pas utilisé avec une carte arduino, mais ça fonctionne bien avec un arduino comme isp.
Il faut que tu sélectionnes 'Arduino' comme programmateur. Mets un baudrate de 19200.

idem, quand j'essai de detecter le 328pb

Non la ce n'est pas idem.
Il a bien détecté le programmeur, mais le programmeur n'arrive pas à se connecter au processeur.
Vérifie la connexion au processeur. Il est bien alimenté? Horloge interne?

Il est bien alimenté, j'ai du 5V sur les broches.
Pour l'horloge interne, comment faire pour le savoir ? sachant que je ne peux acceder au processeur...

Si le processeur est neuf, normalement les fuses sont configurés en horloge interne 8 mega divisé par 8.
Il y a un quartz sur ta carte?

Il y a quelquechose qui me chagrine sur le schéma de ton premier post. A quoi sert la zener sur le reset?

oui, il y a un quartz 16mhz
image

c'est une schottky. C'est ce que j'ai trouvé en général sur les schémas d'atmega. J'imagine pour proteger le Uc de toute accumulation de surtension