Bonjour à tous,
J'ai réussi après bien du mal à flasher un arduino nano avec l'application flashforth.
J'ai fais pas mal d'essais qui fonctionnent très bien mais là je suis coincé.
J'ai voulu tester le mot forth ' TURNKEY' qui oblige le microcontrôleur à booter sur le mot 'myWord' que j'ai indiqué avec la commande " ' myWord is turnkey ". myWord consiste à générer un signal carré à environ 4 MHz sur un port.
Au reset, après un timeout très court, le micro se branche sur ce myWord et l'exécute en boucle ce qui est normal.
Normalement, d'après ce que j'ai compris, si on appuie sur ESC pendant le timeout, le micro ne se branche pas sur le myWord mais donne la main à la console normalement en mode interactif.
Mon problème est que j'ai beau appuyer sur ESC pendant le timeout, le micro exécute myWord et je n'arrive pas à en sortir pour revenir au mode interactif avec la console série.
Bonsoir,
J'ai pas de terminal. Mon portable ne peut-il pas se déguiser en VT100 ou autre?
J'ai l'impression que c'est mort!
J'ai essayé de reflasher bien proprement l'AM328P mais il y a une erreur sur la signature. Alors j'ai forcé en bypassant avec -F et ça donne ça:
$ /home/jean/arduino-1.8.12/hardware/tools/avr/bin/avrdude -C/home/jean/arduino-1.8.12/hardware/tools/avr/etc/avrdude.conf -v -V -F -patmega328p -cstk500v1 -P /dev/ttyUSB0 -b19200 -Uflash:w:328-16MHz-38400.hex:i
avrdude: Version 6.3-20190619
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2014 Joerg Wunsch
System wide configuration file is "/home/jean/arduino-1.8.12/hardware/tools/avr/etc/avrdude.conf"
User configuration file is "/home/jean/.avrduderc"
User configuration file does not exist or is not a regular file, skipping
Using Port : /dev/ttyUSB0
Using Programmer : stk500v1
Overriding Baud Rate : 19200
AVR Part : ATmega328P
Chip Erase delay : 9000 us
PAGEL : PD7
BS2 : PC2
RESET disposition : dedicated
RETRY pulse : SCK
serial program mode : yes
parallel program mode : yes
Timeout : 200
StabDelay : 100
CmdexeDelay : 25
SyncLoops : 32
ByteDelay : 0
PollIndex : 3
PollValue : 0x53
Memory Detail :
Block Poll Page Polled
Memory Type 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 0 0 4500 4500 0x00 0x00
hfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
efuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
lock 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
calibration 0 0 0 0 no 1 0 0 0 0 0x00 0x00
signature 0 0 0 0 no 3 0 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 = 0x330000
avrdude: Expected signature for ATmega328P is 1E 95 0F
avrdude: safemode: lfuse reads as 0
avrdude: safemode: hfuse reads as 0
avrdude: safemode: efuse reads as 0
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "328-16MHz-38400.hex"
avrdude: writing flash (32612 bytes):
Juste pour vous tenir au courant. J'ai pu re-téléverser le bootloader standard. J'ai chargé l'exemple blink dedans et ouf ça fonctionne!.
Donc, je suis revenu à mon point de départ. Si je reparts avec mon flashforth, comment faire si je crée une application forth en autostart pour revenir en config développement? Suis-je obligé à chaque fois de refaire la manip: téléversement du bootloader puis téléversement de flashforth tout ça en isp?
Rien n'est indiqué dans la doc de flashforth à ce propos excepté cette histoire de code ESC à envoyer pendant le timeout de la phase de boot au reset.
To interrupt the flashing loop, connect the card to USB and start the terminal. In principle, pressing a key on the keyboard transmits a character which interrupts blinking .
Et pour ça, il y a cette condition dans la boucle qui gère le clignotement
begin
led13-on 500 ms
led13-off 500 ms
key? until;
n'importe quelle touche interrompt alors la boucle et rend la main à l'utilisateur.
Je crai que ce ne soit plus compliqué que cela. La boucle en question est écrite en assempleur forth:
\ low-level bit fiddling, via assembler
: blink-asm ( -- )
initPB5
[
begin,
portb-io #5 sbi, portb-io #5 cbi, \ one cycle, on and off
portb-io #5 sbi, portb-io #5 cbi,
portb-io #5 sbi, portb-io #5 cbi,
portb-io #5 sbi, portb-io #5 cbi,
wdr,
again,
]
;
Le but était de mesurer la vitesse max pour du bitbang.
Une fois flashé, le micro se branche dessus et produit un signal à environ 4 MHz sur PB5.
Si tu crée une boucle infinie, il ne faut pas t'étonner que le système ne réponde plus.
Dans ce cas, il faut que tu prévois au départ de ton application une petite boucle de quelques secondes qui teste si une touche est appuyée pour te faire quitter le programme.
Tu n'as aps répondu à la question qu'est-ce que tu utilises comme terminal pour dialoguer?
En principe un ESC envoyé pendant les 2 premières secondes après un reset devrait redonner la main.
Salut fdufnews,
Désolé, je n'avais pas vu ton message.
Ton idée est bonne. La prochaine fois que je fais un progr en autostart, je ferai ça.
En ce qui concerne la console, c'est simple, je n'en ai pas. J'utilise le port srie de mon pc et l'utilitaire fourni avec le package flashForth ff-shell.py et qui est conseillé:
Finalement tout est ok maintenant j'ai réussi à reflasher '328-16MHz-38400.hex' dans la carte arduino nano. Je vais pouvoir continuer à expérimenter cet interpreteur/compilateur forth.
Si ça peut interesser quelqu'un, voici la ligne de commande que j'ai utilisée pour flasher le nano via un arduino: