Charger un programme à partir d'une carte SD

Un peu débordé cette semaine, j'arrive pas à tenir mes promesses....
Je vais faire de mon mieux

Salut Barbudor,
Loin de moi l'idée de t'imposer quoique ce soit.
Je m'estime déjà suffisamment heureux que les intervenants de ce forum prennent le temps de se pencher sur mon problème.
Bonne soirée à tous
JP

Bon

J'ai d'une part essayé de convertir le Makefile linux en fichier de commande windows pour builder le bootloader
Et j'ai aussi du reprendre un peu stk500v1 pour la mega2560.
Ca compile et génère un HEX mais je suis pas encore sur que ce soit bon
Voici déjà ce que j'ai fait

Demain je regarde pour faire un board.txt adapté pour facilement flasher la Mega2560

winbuild.cmd (1.63 KB)

stk500v1.c (10.4 KB)

Bonjour à tous,
Bonjour Barbudor, je sais , ce n'est pas très poli de faire cette démarche mais bon...
As tu trouvé une solution au problème de chargement à partir de la carte SD ?
Bonne journée
JP

J'ai malheureusement un peu trop rapporté de boulot à la maison ces derniers jours, ne laissant pas trop de temps pour la bricole.
J'espérais aussi qu'une âme bienveillante jète un coup d'oeil a ce que j'ai fait pour confirmer...
je vais essayer de m'y remettre cette semaine

A vrai dire, j'ai quand même essayé de comprendre un peu tout ça.
Mais, ça dépasse de beaucoup mes compétences.
JP

barbudor:
J'espérais aussi qu'une âme bienveillante jète un coup d'oeil a ce que j'ai fait pour confirmer...

Si ça peut aider demain aprés-midi je peut regarder un peu comment modifier le makefile/code.

D'avance merci à tous
JP

@bricopin
Quelle broche as tu choisit sur ta Mega pour le chip-select de la carte SD ?

Ci joint les modifs effectuées

  • winmake.cmd : fichier de commande qui remplace le makefile. Il permet de construire le bootloader pour ATmega328p ou pour ATmega2560. La broche a utiliser comme chipselect pour la carte SD doit être précisée dans le fichier CMD par son port (A, B, C, ...) et le numéro de bit dans le port.
    par exemple pour ATmega328p j'utilise la pin 4 qui correspond au port 4, pin 4. Pour Mega2560 broche 49 (port L pin 0).
  • stk500v1 : ajouter le "defined(ATmega2560) pour que ca compile pour ATmega2560
  • board-arduino.h : idem

création d'un board.txt qui devrait correspondre

Dans ton répertoire sketches, créer un sous répertoire hardware (obligatoire) et dézipper dedans le fichier ci-dessous
Il faut modifier winmake.cmd pour définir la bonne broche CS
Modifier aussi pour le chemin à ton environnement Arduino et pour le programmateur que tu vas utiliser
Dans une fenêtre DOS :

  • lancer "winmake" pour compiler le bootloader
  • lancer "winmake flash" pour flasher le bootloader

Ensuite pour flasher tes sketches depuis l'IDE, utiliser la carte "2boots ATmega2560"

2boots.zip (47.5 KB)

Bonjour Barbudor
Avant de faire les essais, je voudrais être sur de tout comprendre.

Quelle broche as tu choisit sur ta Mega pour le chip-select de la carte SD ?

La broche pour le chip-select est la broche 53, donc quelle sont les valeurs à mettre dans le winmake.cmd pour le port et pour le N° de bit (et comment les calcules tu ?)

  • stk500v1 : ajouter le "defined(ATmega2560) pour que ca compile pour ATmega2560
  • board-arduino.h : idem

La, j'ai besoin que tu m'explique ce que je dois faire.

Modifier aussi pour le chemin à ton environnement Arduino et pour le programmateur que tu vas utiliser

Ici également

Dans une fenêtre DOS :

  • lancer "winmake" pour compiler le bootloader
  • lancer "winmake flash" pour flasher le bootloader

Que font ces deux commandes.
Et enfin un grand merci

bricopin:
Avant de faire les essais, je voudrais être sur de tout comprendre.

Quelle broche as tu choisit sur ta Mega pour le chip-select de la carte SD ?

La broche pour le chip-select est la broche 53, donc quelle sont les valeurs à mettre dans le winmake.cmd pour le port et pour le N° de bit (et comment les calcules tu ?)

Voir pin_arduino.h dans le bon répertoire.
Pour Mega c'est : C:\arduino\hardware\arduino\variants\mega

const uint8_t PROGMEM digital_pin_to_port_PGM[] = {
	// PORTLIST		
	// -------------------------------------------		
....
	_BV( 0 )	, // PB 0 ** 53 ** SPI_SS	
...

Donc Port B, bit 0 soit:

set MMCCS_PORT=B
set MMCCS_BIT=0
  • stk500v1 : ajouter le "defined(ATmega2560) pour que ca compile pour ATmega2560
  • board-arduino.h : idem

La, j'ai besoin que tu m'explique ce que je dois faire.

Rien. J'explique ce que j'ai fait.
J'aurais du employé le participe passé au lieu de l'infinitif :wink:

Modifier aussi pour le chemin à ton environnement Arduino et pour le programmateur que tu vas utiliser

Ici également

Changer la ligne :

set ARDUINO=D:\Projets\tools\arduino

pour pointer vers le répertoire de base de ton environnement Arduino
Et changer aussi

set ISPTOOL=usbasp
set ISPPORT=usb
set ISPSPEED=-b 115200

Pour spécifier quel programmateur tu va utiliser

Dans une fenêtre DOS :

  • lancer "winmake" pour compiler le bootloader
  • lancer "winmake flash" pour flasher le bootloader

Que font ces deux commandes.

Elle font ce que je dit : l'une compile le bootloader avec les bonnes commandes et génère le fichier HEX du bootloader
L'autre flashe le bootloader dans le chip.

Bon, j'ai fais toute les modifs.
Mais lorsque je lance la commande "winmake" dans une fenêtre DOS, le résultat ne semble pas concluant.
Il me crée bien un répertoire Build, mais celui-ci est vide.
Est ce que j'ai bien compris la modif suivante ?

Changer la ligne :
Code:
set ARDUINO=D:\Projets\tools\arduino
pour pointer vers le répertoire de base de ton environnement Arduino

Je dois pointer vers le répertoire contenant arduin.exe ou bien vers le répertoire contenant mes fichiers de travail (ino) ?
Je joins la copie de le fenêtre DOS

Erreur winmake.txt (2.22 KB)

Apparemment tu as un espace dans le nom
Essaye entre " "

set ARDUINO="C:\W-Arduino\Arduino 1.0.3"

OK, pour ça c'est bon, j'ai le repretoire Build et les fichier .elf et .hex
Maintenant, la commande "winmake flash" me retourne également un message d'erreur

D:\A-Donnees\Projet verins élec\Developpements des applis\Applications\Arduino\E
ssai SD2Boots\NIVELUP\hardware\2boots\bootloaders>"winmake flash"

'"winmake flash"' n'est pas reconnu en tant que commande interne
ou externe, un programme exécutable ou un fichier de commandes.

sans les guillemets

OK, la commande fonctionne, mais il y à des erreur

D:\A-Donnees\Projet verins élec\Developpements des applis\Applications\Arduino
Essai SD2Boots\NIVELUP\hardware\2boots\bootloaders>winmake flash

D:\A-Donnees\Projet verins élec\Developpements des applis\Applications\Arduino
Essai SD2Boots\NIVELUP\hardware\2boots\bootloaders>C:\W-Arduino\Arduino_1.0.3\har
dware\tools\avr\bin\avrdude -c usbasp -p atmega2560 -P usb -b 9600 -e -u -U lo
ck:w:0x3f:m -U efuse:w:0xFD:m -U hfuse:w:0xD8:m -U lfuse:w:0xFF:m
avrdude: can't open config file "": No such file or directory
avrdude: error reading system wide configuration file ""

D:\A-Donnees\Projet verins élec\Developpements des applis\Applications\Arduino
Essai SD2Boots\NIVELUP\hardware\2boots\bootloaders>sleep 3
'sleep' n'est pas reconnu en tant que commande interne
ou externe, un programme exécutable ou un fichier de commandes.

D:\A-Donnees\Projet verins élec\Developpements des applis\Applications\Arduino
Essai SD2Boots\NIVELUP\hardware\2boots\bootloaders>C:\W-Arduino\Arduino_1.0.3\har
dware\tools\avr\bin\avrdude -c usbasp -p atmega2560 -P usb -b 9600 -U flash:w:
build\2boots-arduino-atmega2560-16000000L-PB0.hex -U lock:w:0x0f:m
avrdude: can't open config file "": No such file or directory
avrdude: error reading system wide configuration file ""

D:\A-Donnees\Projet verins élec\Developpements des applis\Applications\Arduino
Essai SD2Boots\NIVELUP\hardware\2boots\bootloaders>goto end

D:\A-Donnees\Projet verins élec\Developpements des applis\Applications\Arduino
Essai SD2Boots\NIVELUP\hardware\2boots\bootloaders>

ok. Mon environnement est un peu bricolé et différent d'un environnement Arduino standard

Nouveau fichier winmake.cmd

winmake.cmd (2.24 KB)

La c'est OK, ça à bien flashé.
Maintenant, peut tu me dire confirmer ce qu'il me reste à faire afin d’éviter toute bévues.
1 - Je charge le sketch "NameBoardSketch.ino" sur la méga pour inscrire le nom de mon sketch sur l'Eeprom.
2 - Je copie mon sketch .hex sur la carte SD
3 - je fais les essais

Commence par vérifier que ta Mega répond bien et charge Blink
N'oublie pas qu'il faut que tu utilises la carte "2boots Atmega2560" et pas la carte standard Arduino 2560

Si ca c'est ok, tu peux enchainer les étapes suivantes
N'oublie pas que le fichier HEX sur lacarte SD doit s'appeller du nom que tu auras rentré dans NameBoardSketch

Commence par vérifier que ta Mega répond bien et charge Blink

Blink ne réussit pas à se charger (mais se charge normalement sur une autre Mega non modifiée)

Taille binaire du croquis : 1 632 octets (d'un max de 258 048 octets)
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_getsync(): timeout communicating with programmer