(flashforth): Comment sortir du turnkey au reset

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.

Quelqu'un a une idée pour sortir de là?

Salut.
Tout dépend comment tu envoies ESC. Si c'est avec le moniteur série, aucune chance. Il te faut un vrai terminal.

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

Reading | ################################################## | 100% 0.02s

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):

Writing | ################################################## | 100% 9.04s

avrdude: 32612 bytes of flash written

avrdude: safemode: lfuse reads as 0
avrdude: safemode: hfuse reads as 0
avrdude: safemode: efuse reads as 0
avrdude: safemode: Fuses OK (E:00, H:00, L:00)

avrdude done. Thank you.

Effectivement c'est la signature d'un AtMega328P, mais 0x330000, je ne sais pas de quoi il s'agit.

@ hbachetti

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.

Bonjour @bisra

quells sont les divers moyens testés pour l'envoi d'ESC (octet 27 = 0x1b) ) au bon moment ?

Dans Les ports ARDUINO: allumer une LED
Il est dit

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.

Bonjour fdufnews,

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é:

A Tutorial Guide to Programming PIC18, PIC24 and ATmega Microcontrollers with FlashForth

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:

$ /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 -patmega328p -cstk500v1 -P/dev/ttyUSB0 -b19200 -Uflash:w:/home/jean/flashforth/avr/hex/328-16MHz-38400.hex:i -Ulock:w:0x0F:m

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.