Pages: [1] 2 3   Go Down
Author Topic: [RESOLU] Differentes façons de charger un programme dans une carte Arduino  (Read 3561 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Jr. Member
**
Karma: 1
Posts: 85
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour à tous,
J'ai usé de la fonction recherche, et j'ai parcouru toutes les pages du forum (en me référant aux titres) mais je n'ai pas trouvé de réponses satisfaisantes.
Je vous expose donc mon soucis.
Je développe en ce moment un projet basé sur Arduino et la programmation en elle même est quasiment terminée.
Le programme est appelé à évoluer, et devra donc être mis à jour sur la carte Arduino.
Mais voila, il y a des contraintes :
Je ne pourrais par le faire par une liaison USB.
Est-ce possible à partir d'une liaison Bluetooth mais sans que le programme ne soit lisible (par exemple en en transformant le programme.ino en programme.exe ?
Sinon, est-ce faisable de transférer le programme a partir d'un module carte SD (exemple : un appui sur le bouton reset de la carte, va lire le programme dans la carte SD et pas dans la mémoire de la carte)
Cordialement
JP

« Last Edit: May 21, 2012, 01:28:55 am by bricopin » Logged

83 - var
Offline Offline
God Member
*****
Karma: 9
Posts: 863
ARDUINO Powa !
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

aucun idée pour t'aider, mais la réponse m'intéresserai c'est pas mal cette idée de programme mis a jour, possible a distance après ca serais utile ! je vais commencer à m'y intéresser bientôt la.
Skizo !
Logged

Un tien vaux mieux que deux tu l'auras !

Forum Moderator
Geneva
Offline Offline
Faraday Member
*****
Karma: 30
Posts: 3227
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Pas tout à fait ce que tu recherches, mais une piste à suivre :

http://arduino.cc/forum/index.php/topic,97700.msg740778.html#msg740778
Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Made in Belgium
Offline Offline
God Member
*****
Karma: 1
Posts: 756
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Yop Yop,
Juste pour être certain, parce que je pense qu'il y a une petite confusion.
Lorsque tu transfères un programme dans la mémoire programme (sram) de ton µc (arduino), c'est une version compilée de ton .ino et non le fichier .ino qui est transféré .
Lorsque tu compiles ton code, celui ci est interprété et traité par ton compilateur pour obtenir un byte code d'instructions machine compréhensible par ton µc, à partir de ce moment là tu peux transférer en mémoire ...
Toute mes excuses si j'ai mal interprété.
« Last Edit: April 29, 2012, 10:28:02 am by osaka » Logged


Offline Offline
Jr. Member
**
Karma: 1
Posts: 85
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonsoir à tous.
Je n'ai peut être pas su exprimer exactement ma demande.
Ce programme doit évoluer à partir des remarques des utilisateurs.
Je voudrais donc, que lors d'un appui sur le reset de la carte Arduino (ou bien d'un appui sur un autre bouton qui serait cablé sur la carte), le programme soit rechargé à partir de la carte SD et non à partir de la mémoire (flash) de la carte Arduino.
De cette façon, il sera très facile pour un utilisateur lambda d’effectuer le mise à jour: il enlevé la carte SD, il enfiche la nouvelle, un appui sur le bouton et hop le programme se recharge à partir de la carte SD
Le but étant d'effectuer la mise à jour sans aucune manipulation informatique.
Cordialement
JP

« Last Edit: April 30, 2012, 01:11:41 pm by bricopin » Logged

Made in Belgium
Offline Offline
God Member
*****
Karma: 1
Posts: 756
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Il faudrait pourvoir charger la flash (et non le sram, j'ai écris trop vite dans le msg précédent  smiley-sleep) à partir de la sd ???
Là par contre je sais pas trop  smiley-confuse, à partir du bootloader au reset ???
Logged


Ile-de-France (92 sud), France
Offline Offline
Edison Member
*
Karma: 24
Posts: 2055
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

C'est tout a fait possible.

Dans l'IDE Arduino, il y a 2 étapes :
- Compilation de ton .INO pour faire un exécutable qui n'est pas un .EXE mais un .HEX (je simplifie par ce que c'est pas 100% çà mais presque)
- Transfert du HEX dans la flash du ATmega avec AVRdude coté PC et le bootloader coté ATmega

Le transfert dans la flash utilise effectivement 2 programme :
- AVRdude sur le PC qui va lire le fichier HEX, faire un reset de l'Arduino pour donner la main au bootloader et envoyer sur la liaison série (ou USB) le contenu du fichier HEX
- Le bootloader sur l'ATMega qui est un tout petit programme reveillé par le reset et qui va recevoir les octets via la liaison série pour les écrire dans flash.

Dans un cas de démarrage normal, le bootloader ne recevant pas de commande d'AVRdude au bout de quelques secondes va donner la main au programme en flash.
(En fait le bootloader est aussi en flash au tout début et n'occupe qu'environ 2KO suivant les versions sur les 32KO d'un ATmega328).

Corrolaire : le programme de l'Arduino ne s'exécute JAMAIS en RAM. L'ATmega étant une architecture Harvard à mémoire programme et donnée séparées. La flash est dans l'espace programme, la RAM est dans l'espace donnée. La RAM ne comporte d'ailleurs que 2KO.

Une première méthode de reflashage serait d'utiliser la liaison série (ou USB) afin d'utiliser un PC avec l'utilitaire AVRdude et le fichier HEX pour remettre à jour la carte Arduino.
Mais apparemment tu dis que ce n'est pas possible.
Dommage parce que c'est vraiment le plus simple.

Si tu veux pouvoir remettre à jour la flash à partir d'un nouveau programme sur la carte SD, c'est possible.
Pour cela il faut ré-écrire un nouveau bootloader qui va être capable de lire la carte SD. S'il y trouve un fichier UPDATE.HEX par exemple, il va reflasher la mémoire flash avec le nouveau programme.
Comme dans le cas du bootloader série, le bootloader ne doit pas s'effacer lui même mais mettre le nouveau programme juste après lui-même dans la flash.

Si le principe me parait jouable, j'ai peur qu'un bootloader utilisant la lib SD soit un peu volumineux et consomme une bonne partie de la flash.
Par exemple, il faut peut être s'attendre à ce qu'il utilise la moitié des 32KO de flash, ne laissant que 16K0 de flash disponible pour ta propre application.


Logged

Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

Offline Offline
Jr. Member
**
Karma: 1
Posts: 85
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Je travaille pour le moment sur une Mega 1280.
Quelle serait l'impact sur ce type de carte ?
JP
Logged

Ile-de-France (92 sud), France
Offline Offline
Edison Member
*
Karma: 24
Posts: 2055
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Avec la Mega1280 tu à 128KO de flash total.
Normalement le bootloader t'en prend ~2KO donc il reste 126KO pour ton application.

Si un bootloader SD (estimation sans garantie) prend 16 à 20KO, il te reste un peu plus de 100KO pour ton application.

Pour connaitre la taille de ton application si elle existe déjà, utilise le bouton "Verify" pour compiler sans uploader
La dernière ligne donne la taille :

Quote
Binary sketch size: 1026 bytes (of a 32256 byte maximum)
Logged

Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

Mais voila, il y a des contraintes :
Je ne pourrais par le faire par une liaison USB.
Est-ce possible à partir d'une liaison Bluetooth mais sans que le programme ne soit lisible
Sinon, est-ce faisable de transférer le programme a partir d'un module carte SD (exemple : un appui sur le bouton reset de la carte, va lire le programme dans la carte SD et pas dans la mémoire de la carte)
C'est possible par bluetooth mais uniquement avec des modules de qualité possédant un temps de latence trés faible.
Sinon il existe un bootloader Serial / SD : http://dangerousprototypes.com/2012/04/03/2boots/

Quote
(par exemple en en transformant le programme.ino en programme.exe ?)
Stop! .ino -> fichier source arduino, .exe -> fichier éxécutable pour windows.
C'est pas du tout la même chose !

Le chemin standard d'une compilation :
.ino (code source arduino) -> .cpp (code source c/c++) -> .elf (fichier de debug / compilation gcc) -> .bin (fichier binaire contenant le code asm assemblé)-> .hex (fichier intel hex utilisable avec un programmateur)

Lorsque tu transfères un programme dans la mémoire programme (sram) de ton µc (arduino), c'est une version compilée de ton .ino et non le fichier .ino qui est transféré .
AVR -> architecture de type havard (http://fr.wikipedia.org/wiki/Architecture_Harvard), les données sont stocké en RAM mais le programme est stocké en FLASH.

Ce programme doit évoluer à partir des remarques des utilisateurs.
Je voudrais donc, que lors d'un appui sur le reset de la carte Arduino (ou bien d'un appui sur un autre bouton qui serait cablé sur la carte), le programme soit rechargé à partir de la carte SD et non à partir de la mémoire (sram) de la carte Arduino.
De cette façon, il sera très facile pour un utilisateur lambda d’effectuer le mise à jour: il enlevé la carte SD, il enfiche la nouvelle, un appui sur le bouton et hop le programme se recharge à partir de la carte SD
Le but étant d'effectuer la mise à jour sans aucune manipulation informatique.
Voir mon lien si dessus.
Attention : la flash d'un AVR est programmable un nombre limité de fois !
Si tu écris le programme à chaque reset ton micro-contrôleurs rendra l'âme en trés peu de temps !
Il faut prévoir un bouton annexe lançant le bootloader, sinon tu te retrouvera avec des cartes hors d'usage en très rapidement.
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Made in Belgium
Offline Offline
God Member
*****
Karma: 1
Posts: 756
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Lorsque tu transfères un programme dans la mémoire programme (sram) de ton µc (arduino), c'est une version compilée de ton .ino et non le fichier .ino qui est transféré .
AVR -> architecture de type havard (http://fr.wikipedia.org/wiki/Architecture_Harvard), les données sont stocké en RAM mais le programme est stocké en FLASH.

(et non le sram, j'ai écris trop vite dans le msg précédent  smiley-sleep)

 smiley-mr-green

Par contre au final vouloir placer son programme d'une autre manière que par l'usb (uart) semble lourd quand même ?  smiley-sweat
« Last Edit: April 29, 2012, 05:01:30 pm by osaka » Logged


Forum Moderator
Geneva
Offline Offline
Faraday Member
*****
Karma: 30
Posts: 3227
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Et avec un duo de µc  ?

Le premier ne servirait qu'à charger le deuxième en cas de changement de programme....
Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

(et non le sram, j'ai écris trop vite dans le msg précédent  smiley-sleep)
smiley-mr-green

Par contre au final vouloir placer son programme d'une autre manière que par l'usb (uart) semble lourd quand même ?  smiley-sweat
Oups, j'avais pas vu désolé smiley-sweat
Le bootloader SD n'est pas compliqué a mettre en place, par contre il réduit la taille de mémoire flash dispo de manière assez conséquente.
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Offline Offline
Jr. Member
**
Karma: 0
Posts: 75
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hello,
J'ai trouvé ca sur le net. A priori il y a un project en cours. Si ca peut t'aider
http://baldwisdom.com/bootdrive/
Serge
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 224
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Salut,

DFRobot propose un module de programmation sans-fil pour Arduino. Peut-être une piste à étudier...

++
Logged


Pages: [1] 2 3   Go Up
Jump to: