Ok, je vais essayer de faire ça...
Je suis tombé sur ce site
et sur un autre
encore un autre avec un fil de discussion sur un forum
Je ne sais pas si c'est adéquat.
J'ai installé MacPack
Ce pack contient ça :
- gcc 3.4.6
- gcc 4.2.2
- GNU binutils 2.18
- avr-libc 1.4.7
- avrdude 5.5
- libusb 0.1.12
- gdb 6.5
- avarice 2.7
- simulavr 0.1.2.2
- GNU make 3.81
Maintenant, je fais quoi ?
En ouvrant une console, et en mettant un code du genre :
avrdude -p m168 -c stk500 -P /dev/tty.usbserial-A1001N2Y -i5 .....
J'arrive a avoir une liaison avec ma plaque.
Maintenant il me reste à trouver comment mettre mon bootloader .
en fait ni la distribution de uisp ni celle de avrdude ne fonctionne d'office avec le mode bit bang.
Il te faut donc :
- récupérer le source (facile)
- le modifier en appliquant un patch (facile)
- le compiler (et la c'est pas forcément une partie de plaisir).
c'est déja bon tu arrives a accéder a ta plaque en ligne de commande mais il te reste maintenant a compiler un avrdude pour avoir une commande du genre (avrdude -c ftbb)
Nicolas
Donc si j'ai bien compris il faut que je trouve le code source de Avrdude que j'ai installer, que j'y rajoute un patch et que je recompile le tout ?
La commande que tu dis serait celle qui permet de faire un bit bang ?
Est-ce que ça peux être un fichier qui s'apelle ATmegaBOOT_168.c ?
Je sens que je vais encore y passé quelques soirées :
non ce fichier est le code source du bootloader qui une fois compilé est a flasher sur l'atmega a l'aide du programmer que tu es en train de construire.
le patch se trouve par la je pense AVR Downloader/UploaDEr - Patches: patch #4330, Adds experimental FTDI bit bang... [Savannah] mais ca doit aller avec une version d'avrdude particuliere
Nicolas
Je dois télécharger les 5 fichiers joints ?
Dans la discussion qui se trouve sur la page que tu m'as indiquée Thomas Fischl parle d'un test qu'il aurait effectué avec Mac osx.
Ceci mis à part j'ai downloadé les 5 fichiers, il me semblent qu'ils sont complémentaires.
Est ce que la méthode bitbang fait passer le bootloader bit par bit ?
si c'est le cas cela doit prendre un certain temps à faire un "burn".
mais ca doit aller avec une version d'avrdude particuliere
Si je me réfère aux dates sur cette page la version avrdude pour ce patch serait la 5.2 ou la 5.3.1 :-?
J'ai trouvé un fichier avrdude.conf avec ça dedans :
...
#
# programmer
# id = <id1> [, <id2> [, <id3>] ...] ; # <idN> are quoted strings
# desc = <description> ; # quoted string
# type = par | stk500 | stk500v2 | stk500pp | stk500hvsp | stk500generic |
# avr910 | butterfly | usbasp |
# jtagmki | jtagmkii | jtagmkii_isp | jtagmkii_dw |
# dragon_dw | dragon_jtag | dragon_isp | dragon_pp |
# dragon_hvsp; # programmer type
# baudrate = <num> ; # baudrate for avr910-programmer
# vcc = <num1> [, <num2> ... ] ; # pin number(s)
# reset = <num> ; # pin number
# sck = <num> ; # pin number
# mosi = <num> ; # pin number
# miso = <num> ; # pin number
# errled = <num> ; # pin number
# rdyled = <num> ; # pin number
# pgmled = <num> ; # pin number
# vfyled = <num> ; # pin number
...
Qu'est-ce que c'est ce fichier?
Dans le même fichier j'ai trouvé ça :
#------------------------------------------------------------
# ATmega168
#------------------------------------------------------------
part
id = "m168";
desc = "ATMEGA168";
has_debugwire = yes;
flash_instr = 0xB6, 0x01, 0x11;
eeprom_instr = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00,
0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF,
0x99, 0xF9, 0xBB, 0xAF;
stk500_devcode = 0x86;
# avr910_devcode = 0x;
signature = 0x1e 0x94 0x06;
pagel = 0xd7;
bs2 = 0xc2;
chip_erase_delay = 9000;
pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
"x x x x x x x x x x x x x x x x";
chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x",
"x x x x x x x x x x x x x x x x";
timeout = 200;
stabdelay = 100;
cmdexedelay = 25;
synchloops = 32;
bytedelay = 0;
pollindex = 3;
pollvalue = 0x53;
predelay = 1;
postdelay = 1;
pollmethod = 1;
pp_controlstack =
0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B,
0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
hventerstabdelay = 100;
progmodedelay = 0;
latchcycles = 5;
togglevtg = 1;
poweroffdelay = 15;
resetdelayms = 1;
resetdelayus = 0;
hvleavestabdelay = 15;
resetdelay = 15;
chiperasepulsewidth = 0;
chiperasepolltimeout = 10;
programfusepulsewidth = 0;
programfusepolltimeout = 5;
programlockpulsewidth = 0;
programlockpolltimeout = 5;
memory "eeprom"
paged = no;
page_size = 4;
size = 512;
min_write_delay = 3600;
max_write_delay = 3600;
readback_p1 = 0xff;
readback_p2 = 0xff;
read = " 1 0 1 0 0 0 0 0",
" 0 0 0 x x x x a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" o o o o o o o o";
write = " 1 1 0 0 0 0 0 0",
" 0 0 0 x x x x a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" i i i i i i i i";
loadpage_lo = " 1 1 0 0 0 0 0 1",
" 0 0 0 0 0 0 0 0",
" 0 0 0 0 0 0 a1 a0",
" i i i i i i i i";
writepage = " 1 1 0 0 0 0 1 0",
" 0 0 x x x x x a8",
" a7 a6 a5 a4 a3 a2 0 0",
" x x x x x x x x";
mode = 0x41;
delay = 5;
blocksize = 4;
readsize = 256;
;
memory "flash"
paged = yes;
size = 16384;
page_size = 128;
num_pages = 128;
min_write_delay = 4500;
max_write_delay = 4500;
readback_p1 = 0xff;
readback_p2 = 0xff;
read_lo = " 0 0 1 0 0 0 0 0",
" 0 0 0 a12 a11 a10 a9 a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" o o o o o o o o";
read_hi = " 0 0 1 0 1 0 0 0",
" 0 0 0 a12 a11 a10 a9 a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" o o o o o o o o";
loadpage_lo = " 0 1 0 0 0 0 0 0",
" 0 0 0 x x x x x",
" x x a5 a4 a3 a2 a1 a0",
" i i i i i i i i";
loadpage_hi = " 0 1 0 0 1 0 0 0",
" 0 0 0 x x x x x",
" x x a5 a4 a3 a2 a1 a0",
" i i i i i i i i";
writepage = " 0 1 0 0 1 1 0 0",
" 0 0 0 a12 a11 a10 a9 a8",
" a7 a6 x x x x x x",
" x x x x x x x x";
mode = 0x41;
delay = 6;
blocksize = 128;
readsize = 256;
;
memory "lfuse"
size = 1;
min_write_delay = 4500;
max_write_delay = 4500;
read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0",
"x x x x x x x x o o o o o o o o";
write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0",
"x x x x x x x x i i i i i i i i";
;
memory "hfuse"
size = 1;
min_write_delay = 4500;
max_write_delay = 4500;
read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0",
"x x x x x x x x o o o o o o o o";
write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0",
"x x x x x x x x i i i i i i i i";
;
memory "efuse"
size = 1;
min_write_delay = 4500;
max_write_delay = 4500;
read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
"x x x x x x x x x x x x x o o o";
write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
"x x x x x x x x x x x x x i i i";
;
memory "lock"
size = 1;
min_write_delay = 4500;
max_write_delay = 4500;
read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
"x x x x x x x x x x o o o o o o";
write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
"x x x x x x x x 1 1 i i i i i i";
;
memory "calibration"
size = 1;
read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x",
"0 0 0 0 0 0 0 0 o o o o o o o o";
;
memory "signature"
size = 3;
read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x",
"x x x x x x a1 a0 o o o o o o o o";
;
;
J'ai compris que ça se rapporte au Mega168 (c'était pas dur à deviner.. ;D) mais j'aimerais savoir ce que cela indique.
Pour le code source que je dois patcher où est ce qu'il devrait se trouver ?
En cherchant le code source d'avrdude 5.5 pour osx , je suis tombé sur cette page.
Tout en bas il y a ça :
What's New in This Release: [ read full changelog ]
· Add support for the USBtinyISP programmer (patch #6233)
· Add support for the C2N232I serial bitbang programmer (patch #6121)
· Bugfixes
Cela voudrait-il dire que la version 5.5 est déjà patchée bitbang ?
Dans ce topic "stk500" est remplacé par "dasa".
Avec stk500 j'avais quelque chose genre :
programmer is not responding : time out
Avec dasa, j'ai ça :
avrdude -p m168 -c dasa -P /dev/tty.usbserial-A1001N2Y -F
avrdude: AVR device not responding
avrdude: initialization failed, rc=-1
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.32s
avrdude: Device signature = 0x000000
avrdude: Yikes! Invalid device signature.
avrdude: Expected signature for ATMEGA168 is 1E 94 06
avrdude: safemode: Fuses OK
avrdude done. Thank you.
Toujours dans le fichier avrdude.conf, j'ai trouvé ça :
...
#
# some ultra cheap programmers use bitbanging on the
# serialport.
#
# PC - DB9 - Pins for RS232:
#
# GND 5 -- |O
# | O| <- 9 RI
# DTR 4 <- |O |
# | O| <- 8 CTS
# TXD 3 <- |O |
# | O| -> 7 RTS
# RXD 2 -> |O |
# | O| <- 6 DSR
# DCD 1 -> |O
#
# Using RXD is currently not supported.
# Using RI is not supported under Win32 but is supported under Posix.
...
# unknown (dasa in uisp)
# reset=rts sck=dtr mosi=txd miso=cts
programmer
id = "dasa";
desc = "serial port banging, reset=rts sck=dtr mosi=txd miso=cts";
type = serbb;
reset = 7;
sck = 4;
mosi = 3;
miso = 8;
;
...
et pour ISP :
Je ne sais pas si l'on peut vraiment comparer le port RS232 avec le FT232R, mais si c'est le cas en comparant la configuration pour "dasa" et l'ISP de l'arduino, les pins miso, mosi, sck et reset ne sont pas aux bons endroits.
Je me demande si il ne faut pas refaire la configuration des pins sur la broche icsp ?
Oula j'ai du retard....
Désolé.
Je te répond dans l'ordre :
pour la lenteur du bitbang (bb) oui je confirme que pour burner mon bootloader (avec uisp) j'avais mis 20 minutes (sans la vérification) et le double avec la vérification.
C'est très long mais une fois que tu as le bootloader tu n'as plus besoin de passer par cette methode
Je te réponds sur la suite plus tard.
Nicolas
Ok, c'est bien ce que je me disais, merci pour ces infos.
Je suis en train de refaire mon installation, je me suis aperçu hier que lorsque j'ai installé Xcode, GCC n'avait pas été installé, c'est chose faite maintenant.
Sur cette page est décrite une procédure pour installer avrdude sur Os X, une des étapes concerne justement gcc.
Est-ce que je dois réinstaller gcc une deuxième fois depuis le répertoire qui contiendra avrdude ?
Edit : je vais essayer sans le réinstaller une deuxième fois, car lorsque j'invoque gcc depuis n'importe quel répertoire, il répond présent...
si tu as gcc en ligne de commande ca doit etre bon.
Sinon pour revenir sur les anciens posts
C2N232I serial bitbang programmer : ca doit etre le bb pour la puce C2N2321 pas pour la FTDI232R
avrdude.conf c'est le fichier de conf de avrdude qui lui permet de saisir les particularités de chaque puce avr.
pour les options tu as stk500 ou dasa qui sont des programmeurs particuliers le tien (grace au patch) sera ftbb si mes souvenirs sont bons
si tu craques avec avrdude je peux t'aider avec uisp
essaye juste ca pour voir si ca vaut le coup d'aller + loin
download ca http://www.tuxgraphics.org/common/src2/article07052/uisp-20050207-with-usb-bbpg-patch.tar.gz
ensuite dans un terminal tu détares et dezippe puis tu fais un cd dans le repertoire créé et tu fais
% ./configure
% make
si ca marche ca veut dire que tu n'es plus très loin de la solution
(je t'enverrai ensuite les modifs de code pour que ca marche sur l'arduino + les lignes de commandes pour faire du bb)
Nicolas
Grosse panne d'internet dans ma région ce soir ... >:(
J'ai essayé d'installer le patch, il s'est apparemment configuré, mais "make" me donne :
.....
DAPA.C:1314: error: 'ftdibb_setBitMode' cannot be used as a function
DAPA.C: In destructor 'TDAPA::~TDAPA()':
DAPA.C:1375: error: 'bbpg_dev_handle' was not declared in this scope
DAPA.C:1375: error: 'ftdibb_setBitMode' cannot be used as a function
DAPA.C:1376: error: 'ftdibb_close' cannot be used as a function
make[2]: *** [DAPA.o] Error 1
make[1]: *** [all] Error 2
make: *** [all-recursive] Error 1
Autrement on dirait que averdude est installé :
$ avrdude -v
avrdude: Version 5.6cvs, compiled on Nov 20 2008 at 19:22:47
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
System wide configuration file is "/etc/avrdude.conf"
User configuration file is "/Users/JFS/.avrduderc"
User configuration file does not exist or is not a regular file, skipping
avrdude: no programmer has been specified on the command line or the config file
Specify a programmer using the -c option and try again
cette version possède des librairies qui s'appellent bitbang.h ...
mais après je patauge :-?
pour avrdude essaye de faire un avrdude -c toto dans une console pour avoir la liste des programmeurs si tu as ftbb c'est tout bon.
Nicolas
J'avais pas réalisé pour "toto"... ;D
avrdude: Can't find programmer id "toto"
J'ai pas ftbb dans la liste :-[
Valid programmers are:
c2n232i = serial port banging, reset=dtr sck=!rts mosi=!txd miso=!cts [/etc/avrdude.conf:622]
dasa3 = serial port banging, reset=!dtr sck=rts mosi=txd miso=cts [/etc/avrdude.conf:609]
dasa = serial port banging, reset=rts sck=dtr mosi=txd miso=cts [/etc/avrdude.conf:596]
siprog = Lancos SI-Prog <http://www.lancos.com/siprogsch.html> [/etc/avrdude.conf:583]
ponyser = design ponyprog serial, reset=!txd sck=rts mosi=dtr miso=cts [/etc/avrdude.conf:570]
pavr = Jason Kyle's pAVR Serial Programmer [/etc/avrdude.conf:541]
dragon_dw = Atmel AVR Dragon in debugWire mode [/etc/avrdude.conf:534]
dragon_hvsp = Atmel AVR Dragon in HVSP mode [/etc/avrdude.conf:526]
dragon_pp = Atmel AVR Dragon in PP mode [/etc/avrdude.conf:518]
dragon_isp = Atmel AVR Dragon in ISP mode [/etc/avrdude.conf:510]
dragon_jtag = Atmel AVR Dragon in JTAG mode [/etc/avrdude.conf:502]
jtag2dw = Atmel JTAG ICE mkII in debugWire mode [/etc/avrdude.conf:494]
jtag2isp = Atmel JTAG ICE mkII in ISP mode [/etc/avrdude.conf:486]
jtag2 = Atmel JTAG ICE mkII [/etc/avrdude.conf:478]
jtag2fast = Atmel JTAG ICE mkII [/etc/avrdude.conf:470]
jtag2slow = Atmel JTAG ICE mkII [/etc/avrdude.conf:462]
jtagmkII = Atmel JTAG ICE mkII [/etc/avrdude.conf:454]
jtag1slow = Atmel JTAG ICE (mkI) [/etc/avrdude.conf:447]
jtag1 = Atmel JTAG ICE (mkI) [/etc/avrdude.conf:439]
jtagmkI = Atmel JTAG ICE (mkI) [/etc/avrdude.conf:431]
avr911 = Atmel AppNote AVR911 AVROSP [/etc/avrdude.conf:425]
avr109 = Atmel AppNote AVR109 Boot Loader [/etc/avrdude.conf:419]
butterfly = Atmel Butterfly Development Board [/etc/avrdude.conf:413]
usbtiny = USBtiny simple USB programmer, http://www.ladyada.net/make/usbtinyisp/ [/etc/avrdude.conf:407]
usbasp = USBasp, http://www.fischl.de/usbasp/ [/etc/avrdude.conf:401]
avr910 = Atmel Low Cost Serial Programmer [/etc/avrdude.conf:395]
stk600hvsp = Atmel STK600 in high-voltage serial programming mode [/etc/avrdude.conf:389]
stk600pp = Atmel STK600 in parallel programming mode [/etc/avrdude.conf:383]
stk600 = Atmel STK600 [/etc/avrdude.conf:377]
stk500hvsp = Atmel STK500 V2 in high-voltage serial programming mode [/etc/avrdude.conf:371]
stk500pp = Atmel STK500 V2 in parallel programming mode [/etc/avrdude.conf:365]
stk500v2 = Atmel STK500 Version 2.x firmware [/etc/avrdude.conf:359]
mib510 = Crossbow MIB510 programming board [/etc/avrdude.conf:353]
stk500v1 = Atmel STK500 Version 1.x firmware [/etc/avrdude.conf:347]
stk500 = Atmel STK500 [/etc/avrdude.conf:341]
avrisp2 = Atmel AVR ISP mkII [/etc/avrdude.conf:331]
avrispmkII = Atmel AVR ISP mkII [/etc/avrdude.conf:325]
avrispv2 = Atmel AVR ISP V2 [/etc/avrdude.conf:319]
avrisp = Atmel AVR ISP [/etc/avrdude.conf:313]
Bon ben revenons sur ta compile de uisp
Que dit le configure (donne moi la sortie)
Nicolas