Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
Dernière révision Les deux révisions suivantes
ressource:electronique:arduino:utiliser_fichier_hex [2020/02/09 23:09]
emoc
ressource:electronique:arduino:utiliser_fichier_hex [2021/02/16 23:53]
emoc
Ligne 1: Ligne 1:
-====== Arduino : téléverser un fichier ​.hex ======+{{tag> arduino em}} 
 + 
 +====== Arduino : utiliser les fichiers ​.hex ======
  
 Programmer un arduino se fait en plusieurs étapes : d'​abord écrire le code, puis le compiler, c'est à dire le transformer en commandes adaptées au circuit, enfin le téléverser dans le microcontrôleur. Programmer un arduino se fait en plusieurs étapes : d'​abord écrire le code, puis le compiler, c'est à dire le transformer en commandes adaptées au circuit, enfin le téléverser dans le microcontrôleur.
Ligne 5: Ligne 7:
 Le fichier compilé est du "code machine"​ au format hexadécimal (.hex), il n'est plus lisible pour nous autres mammifères,​ mais parfaitement adapté pour un circuit électronique. On ne peut pas retrouver le code d'​origine depuis le fichier .hex (dans le meilleur des cas on peut le décompiler pour récupérer un programme en assembleur) Le fichier compilé est du "code machine"​ au format hexadécimal (.hex), il n'est plus lisible pour nous autres mammifères,​ mais parfaitement adapté pour un circuit électronique. On ne peut pas retrouver le code d'​origine depuis le fichier .hex (dans le meilleur des cas on peut le décompiler pour récupérer un programme en assembleur)
  
-Quelques raisons d'​utiliser le fichier .hex+===== Pourquoi utiliser un fichier .hex ? ===== 
 + 
 +Quelques raisons d'​utiliser le fichier .hex :
   * le programme a été récupéré depuis un arduino, on n'en a donc pas le code source,   * le programme a été récupéré depuis un arduino, on n'en a donc pas le code source,
-  * pour programmer rapidement plusieurs arduino identiques avec le même programme +  * pour programmer rapidement plusieurs arduino identiques avec le même programme, 
-  * le programme n'a été diffusé que sous forme de .hex pour une quelconque raison+  * le programme n'a été diffusé que sous forme de .hex pour une quelconque raison... 
 + 
 +===== Comment téléverser un fichier .hex ? =====
  
-Comment faire ? 
 Il faut retrouver le chemin d'​avrdude,​ le logiciel qui envoie le code machine dans le microcontrôleur Il faut retrouver le chemin d'​avrdude,​ le logiciel qui envoie le code machine dans le microcontrôleur
   * dans les préférences,​ activer "​Afficher les résultats détaillés pendant le téléversement"​   * dans les préférences,​ activer "​Afficher les résultats détaillés pendant le téléversement"​
Ligne 16: Ligne 21:
   * noter la commande complète avrdude   * noter la commande complète avrdude
  
-Exemple  +Exemple ​: 
-  /​home/​emoc/​arduino-1.8.5/​hardware/​tools/​avr/​bin/​avrdude -C/​home/​emoc/​arduino-1.8.5/​hardware/​tools/​avr/​etc/​avrdude.conf -v -patmega32u4 ​-cavr109 ​-P/dev/ttyACM0 ​-b57600 -D -Uflash:​w:/​tmp/​arduino_build_550567/LodeRunner.ino.hex:i+  /​home/​emoc/​arduino-1.8.5/​hardware/​tools/​avr/​bin/​avrdude -C/​home/​emoc/​arduino-1.8.5/​hardware/​tools/​avr/​etc/​avrdude.conf -v -patmega328p ​-carduino ​-P/dev/ttyUSB0 ​-b57600 -D -Uflash:​w:/​tmp/​arduino_build_700970/Test.ino.hex:​i ​ 
 +   
 +Dans ce cas précis, il s'agit d'un code compilé pour arduino nano (ATmega328P)
   ​   ​
 On peut découper cette ligne pour l'​expliquer : On peut découper cette ligne pour l'​expliquer :
Ligne 23: Ligne 30:
 | -C |/​home/​emoc/​arduino-1.8.5/​hardware/​tools/​avr/​etc/​avrdude.conf| chemin vers le fichier de configuration | | -C |/​home/​emoc/​arduino-1.8.5/​hardware/​tools/​avr/​etc/​avrdude.conf| chemin vers le fichier de configuration |
 | -v | | exécution de la commande "​bavarde"​ (//​verbose//​) | | -v | | exécution de la commande "​bavarde"​ (//​verbose//​) |
-| -p | atmega32u4 ​| modèle du microcontrôleur à programmer| +| -p | atmega328p ​| modèle du microcontrôleur à programmer| 
-| -c | avr109 ​| programmeur associé, ici : Atmel AppNote AVR109 Boot Loader | +| -c | arduino ​| programmeur associé, ici : Atmel AppNote AVR109 Boot Loader | 
-| -P | /dev/ttyACM0 ​| port USB série|+| -P | /dev/ttyUSB0 ​| port USB série|
 | -b | 57600 | vitesse de transfert (//​baudrate//​) | | -b | 57600 | vitesse de transfert (//​baudrate//​) |
 | -D | | désactiver l'​effacement automatique de la mémoire flash | | -D | | désactiver l'​effacement automatique de la mémoire flash |
-| -U | flash:​w:/​tmp/​arduino_build_550567/LodeRunner.ino.hex:i| voir ci-dessous|+| -U | flash:​w:/​tmp/​arduino_build_700970/Test.ino.hex:i| voir ci-dessous| 
 + 
 +Pour la dernière option (-U) la commande signifie : utiliser la mémoire flash (flash), pour écrire (w), un fichier .hex, encodé en hexadécimal intel (i) 
 + 
 +Avec cette commande il est donc possible de flasher n'​importe quel fichier hex compilé pour le même microcontrôleur,​ sans passer par l'IDE arduino. Il suffit de respecter les mêmes options et de faire pointer vers le fichier hex approprié. 
 + 
 +Exemple : 
 +  /​home/​emoc/​arduino-1.8.5/​hardware/​tools/​avr/​bin/​avrdude -C/​home/​emoc/​arduino-1.8.5/​hardware/​tools/​avr/​etc/​avrdude.conf -v -patmega328p -carduino -P/​dev/​ttyUSB0 -b57600 -D -Uflash:​w:/​home/​emoc/​test/​backup.hex:​i 
 + 
 +===== Créer un fichier .hex ===== 
 + 
 +Dans le cas ou l'on peut accéder au code source, il est possible de créer le fichier .hex pour le conserver depuis le menu "​Croquis/​exporter les binaires compilées",​ le fichier .hex sera alors enregistré dans le dossier du sketch sous deux formes : avec ou sans bootloader. Il faudra choisir la bonne version selon les situations : en général, s'il s'agit d'une carte arduino la versio sans bootloader est adaptée. 
 + 
 +===== Récupérer un fichier hex ===== 
 + 
 +On peut télécharger le code machine intégré dans un arduino programmé en utilisant avrdude, exemple ci-dessous pour récupérer le code machine d'un arduino nano 
 + 
 +  /​home/​emoc/​arduino-1.8.5/​hardware/​tools/​avr/​bin/​avrdude -C/​home/​emoc/​arduino-1.8.5/​hardware/​tools/​avr/​etc/​avrdude.conf -v -patmega328p -carduino -P/​dev/​ttyUSB0 -b57600 -D -Uflash:​r:/​home/​emoc/​test/​backup.ino.hex:​i
  
 +La différence principale étant le r dans la dernière option (r pour read!)
  
-    ​+Cela ne fonctionne pas avec tous les modèles d'​arduino comme ceux basés sur l'​ATmega32U4,​ c'est lié à des différences de bootloader...
  
 +===== Sources =====
  
-Il est possible de créer le fichier ​.hex pour le conserver depuis le menu "​Croquis/exporter les binaires compilées",​ le fichier ​.hex sera alors enregistré dans le dossier du sketch+Par ici : 
 +  * https://www.nongnu.org/avrdude/​user-manual/​avrdude_4.html#​Option-Descriptions 
 +  * https://​arduino.stackexchange.com/​q/​48431 
 +  * https://​forum.arduino.cc/​index.php?​topic=403201.msg2786267#​msg2786267 
 +  * récupération de hex et problème d'​ATmega32U4 : https://​arduino.stackexchange.com/​a/​21534
  
  
  • ressource/electronique/arduino/utiliser_fichier_hex.txt
  • Dernière modification: 2021/07/14 10:41
  • par gweltaz