Réinscrire un bootloader effacé à l'aide d'un autre SAMD21G M0

Bonjour,

Je dispose de deux cartes MKRZero, une fausse manip a écrasé le bootloader d'une d'entre elles, du moins, je suppose car elle n'est plus visible sur mon PC via l'USB, même après un double Reset qui donne d'habitude accès sur un autre port COM lorsque la carte est bloquée (Croquis qui boucle par exemple).

Après énormément de lecture, j'ai cru comprendre qu'il était possible de re-flasher le bootloader d'une carte à partir d'une autre (car le processeur est un SAMD21G M0).

Par contre, je n'arrive pas à trouver (ni comprendre) comment réinstaller le bootloader manquant.

Peut-être faut-il souder des fils sur les empreintes de J8, au dos du CI (+3V3, Gnd, Reset, SwdClk et SwdIO) ?
Si oui, où les connecter et comment sur la carte qui fonctionne ? (Le port SPI : MISO, MOSI, SCK, Reset, +3V3, Gnd) ?
Et comment procéder ensuite avec l'IDE Arduino (v 1.8.12 en ce qui me concerne) ?
Je sais dumper la flash et récupérer ainsi le boot de la carte qui fonctionne (Adresses 0000 à 1FFF)

Merci pour l'aide qui me sera apportée.
Agréable journée.
Eric

Donnes plus d'explication et surtout TOUS les messages d'erreurs.

Il y a une différence entre un bootloader effacé sur le microcontroleur SAMD21 (et comment cela c'est fait ?) et une carte non reconnue.
Dans le cas de la carte non reconnue le problème se situera plutôt dans le circuit qui fait l'interface USB/Série et le bootloader n'y sera pour rien.
Dans la série MKR l'interface USB/série est un autre microcontroleur et il se peut que ce soit celui là qui s'est déprogrammé.
Sur ce forum pendant plusieurs mois il y a eu sur des cartes Uno, nano, mega une épidémie de micro interface USB qui se déprogrammaient.

j'ai cru comprendre qu'il était possible de re-flasher le bootloader d'une carte à partir d'une autre (car le processeur est un SAMD21G M0).

C'est le cas avec la série basique des cartes arduino a base de microcontroleurs 8bits, et c'est probablement toujours vrai avec les cartes équipées de microcontroleur 32 bits Arm comme la série MKR. "L'astuce" consiste simplement à charger un programme particulier pour transformer une carte classique en carte programmeur.
Attention à ne pas mélanger des cartes 5V avec des cartes 3V.

As tu lu le message épinglé en tête de forum "Arduino problème de téléversement" ?
Il donne des solutions aux problèmes les plus fréquents.

Bonjour et merci de ta réponse.

Sur la carte défectueuse, je n'ai aucun message, aucune communication.

Dans la série MKR l'interface USB/série est un autre microcontroleur et il se peut que ce soit celui là qui s'est déprogrammé.

T'es sûr ? sur le schéma l'USB sort directement du SAMD21G, pattes 33, 34 et 27

J'ai relié, de la carte "programmateur" à la carte "défectueuse"
+5V => Vin
Gnd => Gnd
MOSI ( 8 ) => MOSI ( 8 )
SCK ( 9 ) => SCK ( 9 )
MISO ( 10 ) => MISO ( 10 )
D6 ( 6 ) => Reset

J'ai lu :

On MKR family of boards, you can't use D10 for reset; we suggest D6 and you must remember to change the line 73 of the ArduinoISP sketch - #define RESET 10 - putting "6" insteat of 10.

J'ai bien sélectionné "Outils > Type de carte > Arduino MKRZERO"

J'ai chargé l'application "Fichiers > Exemples > 11.ArduinoISP > ArduinoISP"

J'ai modifié la ligne 73 (Celle de la génération du reset pour mettre la patte 6 au lieu de la 10) comme indiqué précédemment.

#define RESET     6 // pour MKRZero sinon 10 // Use pin 10 to reset the target rather than SS

J'ai branché la prise USB de la carte Programmateur à mon PC, les LED Power de chaque carte s'allument

J'ai téléversé l'application

Le croquis utilise 13768 octets (5%) de l'espace de stockage de programmes. Le maximum est de 262144 octets.
Atmel SMART device 0x10010005 found
Device       : ATSAMD21G18A
Chip ID      : 10010005
Version      : v2.0 [Arduino:XYZ] Oct 20 2016 15:20:47
Address      : 8192
Pages        : 3968
Page Size    : 64 bytes
Total Size   : 248KB
Planes       : 1
Lock Regions : 16
Locked       : none
Security     : false
Boot Flash   : true
BOD          : true
BOR          : true
Arduino      : FAST_CHIP_ERASE
Arduino      : FAST_MULTI_PAGE_WRITE
Arduino      : CAN_CHECKSUM_MEMORY_BUFFER
Erase flash
done in 0.824 seconds

Write 13944 bytes to flash (218 pages)

[========                      ] 29% (64/218 pages)
[=================             ] 58% (128/218 pages)
[==========================    ] 88% (192/218 pages)
[==============================] 100% (218/218 pages)
done in 0.105 seconds

Verify 13944 bytes of flash with checksum.
Verify successful
done in 0.011 seconds
CPU reset.

Puis je suis allé dans "Outils > Graver la séquence d'initialisation"

J'obtiens le message

Veuillez sélectionner un programmateur dans le menu Outils > Programmateur

Nota : Je n'ai rien d'affiché dans la fenêtre COM

où me suis-je planté ?

Puisque tu utilises une carte programmateur ArduinoISP :

menu Outils > Programmateur : Arduino as ISP

Oui pardon, c'est ce que j'ai fait, je me suis trompé en recopiant ici.

Il y a :

  • ArduinoISP
  • ArduinoISP.org
  • Arduino as ISP
  • Arduino as ISP (ATmega32U4)

J'ai bien sélectionné le "Arduino as ISP"

Il n'est même pas évident que ArduinoISP sache faire ce genre d'opération.

Un SAMD21 se programme via SWD (Jlink), par SPI je ne suis pas sûr.
Mais bon, j'avoue mieux connaître les STM32, qui eux peuvent se flasher via I2C, UART ou SPI.

D'autre part il semble étonnant que le port USB ne soit plus visible attendu que c'est l'USB natif du microcontrôleur.

D'autre part il semble étonnant que le port USB ne soit plus visible attendu que c'est l'USB natif du microcontrôleur.

Mais c'est peut être justement le rôle du bootloader de configurer les GPIOs USB en USB.

T'es sûr ? sur le schéma l'USB sort directement du SAMD21G, pattes 33, 34 et 27

Pan sur le bec comme on dit au Canard.
Je n'avais pas vu que le Sam21 possédait une interface USB.
Ce micro ne m'a jamais intéressé : on trouve un équivalent STM32 qui lui à des entrée qui sont 5V tolérantes.

+1 avec hbacheti sur le swd
Atmel/Microchip AVR 8bits
Après un Reset, au démarrage du micro le SPI n'est pas en service, les pins concernées sont en mode ISP qui signifie In Situ Programming.
C'est le principe mis au point par Atmel pour ses micros d'architecture AVR.

ARM
Le SamD21 fait partie de la grande famille des microcontroleurs utilisant l'architecture ARM (fabricants Atmel, ST, Nxp, Renesas, Texas, etc...).
L'architecture ARM utilise un autre système : le bus SWD et pour lequel il faut un autre type de programmeur.
Pour ST c'est un STLink, pour Atmel/Microchip est-ce le même ou un autre ?

Peut-être trouvera tu plus de renseignements dans la datasheet du microcontroleur à télécharger sur le site de Microchip.

C'est la première fois que je vois ce problème exposé sur le forum francophone, as tu essayé la partie anglophone ?

Ce micro ne m'a jamais intéressé : on trouve un équivalent STM32 qui lui à des entrée qui sont 5V tolérantes.

+1

Pour ST c'est un STLink, pour Atmel/Microchip est-ce le même ou un autre ?

JLINK : Segger
On trouve apparemment des clones : AliExpress

A noter : il est parfaitement possible de créer une interface STLINK avec un STM32, une carte bon marché du genre BluePill par exemple.
Mais fabriquer un JLINK : je ne sais pas :confused:

Arduino Zero

This is pretty easy. Launch the IDE, select Arduino Zero (programming port) from the Tools->Board menu, and Atmel EDBG as the Tools->Programmer

Then select Burn Bootloader

Merci

Oui, j'avais vu ce lien

Faut-il que j'achète un programmateur en plus ? avec les câbles et autres accessoires ?
Faut-il aussi utiliser Atmel Studio 7.0 ?

J'avoue que là, je commence à … baliser …

Il y a effectivement, comme je le disais dans mon 1er post un connecteur J8 non câblé au dos de la carte qui serait le fameux SWD

Il y a bien ce lien mais on parle d'un "Atmel ICE debugger" et je ne vois pas bien comment est connecté le câble en nappe

Je pense effectivement que le "programming port" est le SWD.

MKRZero_SWD.png

A part souder un connecteur CMS je ne vois pas de solution propre, la solution sale consistant à souder des fils volants :confused:

Faut-il aussi utiliser Atmel Studio 7.0 ?

Avec ATMEL ICE pas sûr. Comme dit dans mon post précédent.
Le problème : ATMEL-ICE est très cher.
JLINK Segger est plus abordable (voir #8), mais apparemment pas supporté par ARDUINO IDE, donc Atmel Studio.

Très probablement les plages de cuivre servent à la programation.
Les cartes vierges doivent être placées sur des plaques support munies de contacts à ressort.

Faut-il aussi utiliser Atmel Studio 7.0 ?

En industriel il serait très très surprenant que la programmation se fasse en interface graphique.
Il doit exister des programmes en ligne de commande : tout doit être expliqué dans la documentation du micro.
Bien évidement il n'y aura rien chez arduino il faut aller chez le fabricant Microchip.
Version windows ou version Linux ?

Edit :
J'ai trouvé cette doc :
https://microchipdeveloper.com/atstart:sam-d21-bootloader