Go Down

Topic: DIY Programmateur USB FT232R BitBang pour Standalone (Read 11 times) previous topic - next topic

Jean-Marie

Les expérimentations de cet après-midi m'ont appris différentes choses.


  • Au sujet de la LED témoin qui reste allumée après la programmation BitBang. je n'ai pu obtenir le déblocage qu'en débranchant l'USB ou en connectant un instant la pin 19 du FT232R à la masse. Et encore, il faut une connexion directe. Si on interpose une résistance de 10 K ou 1K, çà ne marche pas. Pas moyen non plus en choisissant provisoirement un autre port COM ou en faisant un Reset manuel de l'Atmega de remettre les choses en place

  • Essai d'Upload dans l'Ide tant que ce Reset n'est pas fait
    Si on essaye de retourner dans l'Ide pour refaire un Upload, avrdude fait une erreur et on obtient le message suivant:
        Binary sketch size: 1018 bytes (of a 30720 byte maximum)
        avrdude.exe: stk500_getsync(): not in sync: resp=0x37
        avrdude.exe: stk500_disable(): protocol error, expect=0x14, resp=0x37


  • Essai d'Upload dans l'Ide après le Reset du FT232R
    Une tentative d'upload dans l'Ide après le Reset du FT232R donne également le message d'erreur suivant:
        Binary sketch size: 1018 bytes (of a 30720 byte maximum)
        avrdude.exe: stk500_getsync(): not in sync: resp=0x00
        avrdude.exe: stk500_disable(): protocol error, expect=0x14, resp=0x51

    C'est plus gênant car cela signifie que le Bootloader ne fonctionne plus. Ceci est confirmé par les expériences suivantes.

  • Reflashage du Bootloader par BitBanging
    Dans Avrdude-GUI, on effectue les opération suivantes:
    - Modification du hfuse de DA en DB. Ceci débloque la zone de protection 
      de mémoire du Bootloader (voir Engbedded.com)
    - On pointe sur le Bootloader qui convient (C:\Program Files\arduino-0022\
      hardware\arduino\bootloaders\atmega\ATmegaBOOT_168_atmega328.hex)
      et on fait un Erase - Write - Verify
      A noter que le chargement du Bootloader prend environ 25 sec car on n'est
      plus obligé de réduire le Baud Rate puisque l'Atmega fonctionne vec le quartz externe.
    - Remodification du hfuse de DB en DA pour rebloquer la mémoire du Bootloader
    - Reset du FT232R et retour dans l'Ide où on constate que Blink peut à nouveau être uploadé


  • BitBang "Write" et "Erase"
    De multiples essais ont démontré que c'est la commande ERASE qui dédruit le Bootloader (soit en cliquant "Erase - Write - Verify", soit en cliquant "Chip Erase". Cependant la commande "Write" seule ne fonctionne que si la mémoire de l'Atmega est vide, par exemple si l'Atmega sort de l'usine, ou après un Erase ou encore après le chargement et la protection du Bootloader. Par contre, si la mémoire de l'Atméga contient déjà un programme, la commande "Write" entraîne une erreur de avrdude et échoue

  • En conclusion
    Pour ceux qui désirent travailler dans l'environnement de l'Ide Arduino, le mode BitBang est essentiellement utile pour charger ou réparer le Bootloader Arduino. Cela nécessite de disposer du FT232R, que celui-ci soit déjà installé sur une platine Arduino ou qu'il soit indépendant sur un adaptateur SSOP28 --> DIP28. Le flashage du Bootloader peut se faire depuis l'Ide (7 à 8 minutes), ou à l'aide de avrdude-GUI ou de la ligne de commande de avrdude-serjtag (25 secondes). Par contre, le flashage des programmes est à faire de la manière habituelle, à partir de l'Ide, par la voie de l'USART (Tx, Rx).

    Pour ceux qui travaillent en-dehors de l'environnement Arduino, ils peuvent se passer du Bootloader Arduino et flasher les programmes avec l'avrdude-GUI ou la ligne de commande de avrdude-serjtag

Amicalement, Jean-Marie

skywodd

Derniére (petite) question par pure curiosité.

Qu'elle est la méthode la plus rapide (au sens vitesse d'envoi du programme) pour toi, le bit-bang ou le bootloader ?

La programmation par ISP (avec un "vrai" programmateur d'AVR) est trés rapide (presque instantané) mais je n'est jamais comparé bitbang et bootloader, je serais curieux de savoir lequel va le plus vite.

Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

Jean-Marie

Hello Skywodd,

Je vais faire le test. Mais le programme Blink est beaucoup trop court pour une mesure du temps. Comme j'ai un 328, l'idéal serait de charger un programme qui fait presque 28 K (car il faut réserver 2K pour le bootmloader). Aurais-tu par hasard un tel fichier hex ? Probablement que tous les exemples de l'Ide sont des programmes génériques et courts.
Amicalement, Jean-Marie

skywodd

Je t'ai fait un hex de 21162 octets, ça devrait aller.

C'est le sketch Arduino PCM du playground que j'ai recompilé avec une musique plus grosse (20000 samples au lieu de 13000).

Par contre petit truc concernant le bootloader arduino, il ne prend physiquement que 2Ko mais il "verrouille" presque 3.2Ko, c'est un bug qui devrait être résolu dans les prochaines version de optiboot.
Pour la version patché : http://arduino.cc/forum/index.php/topic,64105.msg466703.html#msg466703
Sinon le google code d'optiboot : http://code.google.com/p/optiboot/

Jean-Marie: J'utilise la version patché, mais comme je me suis dis que tu devais surement utiliser l'ancien bootloader fourni avec l'ide j'ai volontairement pas dépassé la barre de 29000 octets.
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

Jean-Marie

Merci Skywodd, J'essaye çà demain matin et je te tiens au courant.
Amicalement, Jean-Marie

Jean-Marie

#20
Nov 18, 2011, 10:20 am Last Edit: Nov 18, 2011, 10:22 am by Jean-Marie Reason: 1
Hello Skywodd,

Le chargement de ton fichier hex par la méthode BitBang prend exactement 17 secondes. J'ai fait l'expérience 2 fois.

Par contre, je suis le bec dans l'eau pour faire le test avec l'Ide. Y a-t-il un moyen de charger un fichier hex dans l'Atmega à partir de l'Ide ?
A moins de lancer avrdude avec la ligne de commande. Tu avais cité ceci au début du topic : avrdude -c ftdi -p m328p -P ft0 -U flash:w:blink.hex -B 1. J'avoue que je n'ai jamais travaillé avrdude en ligne de commande et je ne connais pas Linux. J'ai essayé de mettre cette ligne dans un fichier .bat mais j'obtiens un défilement non stop dans la fenêtre d'émulation du DOS. Peux-tu m'aider (si tu connais WinXP) ?

P.S. Il me reste peu de temps car je m'absente de midi à demain après-midi.
Amicalement, Jean-Marie

skywodd

Pour utiliser avrdude en ligne de commande il faut installer winAVR :
http://sourceforge.net/projects/winavr/files/WinAVR/20100110/
(bien pensez à cocher "ajouter au PATH" quand il le propose)

Sous windows pour avoir la console : touche Windows et touche R simultanément.
Si l'installation a réussi en entrant la commande avrdude il devrait s'afficher l'aide d'avrdude.

Pour utiliser le bootloader arduino (2009 pas uno) :
Code: [Select]

avrdude -p m328p -b 57600 -c arduino -P COM3 -U flash:w:Audio_PCM.hex

!! Pensez à changer COM3 par le port série qui convient et d'utiliser la commande "cd" pour naviguer jusqu'au dossier qui contient le .hex

Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

Jean-Marie

Merci pour tes instructions.

Cela a bien fonctionné.
Le temps de flashage de AudioPCM.hex avec la ligne de commande que tu m'as donnée est de 22 secondes, donc pas vraiment différent du mode BitBang.

Dès que j'ai un peu le temps, je ferai encore des essais de flashage avec les programmateurs dont je dispose, à savoir un Serial Programmer de type Ponyser, un USBasp et un AVRISP mkII.
Amicalement, Jean-Marie

skywodd

22 secondes avec le bootloader contre 17 secondes avec le bitbang :smiley-eek:

J'aurai penser que le bootloader aurait était plus lent ... mais alors ça veut dire que le bootloader "optiboot" de l'arduino UNO (à 115200 bauds) doit être "théoriquement" 3x plus rapide.

Ce qui est sur c'est qu'avec le mkII (une belle bête au passage, qui coute quand même chère =( (et le mkII ICE j'en parle même pas :.)) sa devrait prendre grand max 5s.

Edit: je viens de faire le test avec le bootloader de la UNO :
Code: [Select]

avrdude.exe: writing flash (21162 bytes):
Writing | ################################################## | 100% 3.80s

avrdude.exe: reading on-chip flash data:
Reading | ################################################## | 100% 3.12s


Seulement 6 secondes pour lire / écrire :smiley-eek-blue:
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

Jean-Marie

Hello Skywodd,
Mes mesures ont été faites montre en main, mais je vois que ce que tu affiches est plus précis: l'affichage direct d'avrdude. Demain après-midi, je devrais avoir le temps de refaire les mesures de cette manière.

Quote
Ce qui est sur c'est qu'avec le mkII (une belle bête au passage, qui coute quand même chère smiley-cry (et le mkII ICE j'en parle même pas smiley-small)) sa devrait prendre grand max 5s

Mon "AVRISP mkII" n'est pas un vrai. Il s'agit d'un montage électronique compatible avec un usbasp mais chargé avec un firmware  qui en fait un clone d'AVRISP mkII. Si on installe le driver USB Jungo, il fonctionne à partir de Studio. Mais dans ce cas, il ne fonctionne plus avec avrdude. C'est l'un ou c'est l'autre mas pas les deux en même temps, malheureusement. Même si ce n'est pas un vrai, je trouve qu'il est rapide et j'en suis très satisfait. Il peut être commandé en kit ici:
http://fun4diy.com/AVRISP_mkII.htm
Amicalement, Jean-Marie

Jean-Marie

Voici les temps précis d'écriture et de lecture  du fichier AudioPCM.hex avec le Bootloader Arduino:

Amicalement, Jean-Marie

Jean-Marie

Et voici les mesures du temps de programmation par la méthode BitBang du FT232R:



Je rappelle que les premières mesures que j'avais fournies étaient mesurées en prenant le temps entre le moment où on lance la commande et le moment où tout est terminé.
Amicalement, Jean-Marie

Jean-Marie

Afin de rendre les choses le plus clair possible, voici un schéma des connexions du FT232R . Ces connexions permettent aussi bien le mode BitBang pour programmer le bootloader par le SPI que le mode USART pour programmer les sketch par Rx/Tx.



Sorry, je n'ai pas encore eu le temps de faire le test de vitesse avec mes autres programmateurs.
Amicalement, Jean-Marie

Jean-Marie

Voici les essais de vitesse de programmation avec USBasp et AVRISP mkII:

USBasp peut fonctionner en mode lent:



Il peut également fonctionner en mode rapide:



AVRISP mkII ne fonctionne pas avec avrdude car Studio4 est intallé avec le driver Jungo. Donc je peux tout au plus donner une indication du temps d'écriture mesuré à la montre. AVRISP prend 6 secondes pour l'écriture du programme AudioPCM.hex

J'ai également essayé de programmer avec le programmateur série Ponyser (home made), mais pour l'une ou l'autre raison, je n'arrive plus à le faire fonctionner pour le moment. Peut-être pour la même raison, je n'arrive pas non plus à faire fonctionner mon adaptateur USB-TTL à base de CP2102 acheté il y a quelques mois sur eBay.
Amicalement, Jean-Marie

skywodd

Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

Go Up