Go Down

Topic: Mettre un bootloader sur un atmega168 avec un Mac (Read 5753 times) previous topic - next topic

Jean-François

#15
Nov 15, 2008, 11:22 pm Last Edit: Nov 16, 2008, 04:58 pm by jfs Reason: 1
J'ai fait mon adaptateur pour l'atmega168 en CMS :




Une broche en retrait :



Branchée sur l'Arduino :



J'ai essayé la méthode boot-cloner, mais ça ne fonctionne pas  :-?

j'ai remarqué que l'on pouvait utiliser le serial monitor pendant le boot-clonage, lors de l'échec, le moniteur me renvoi :

Quote
Program Enable ERROR (result 1)


J'ai un peu cherché dans le sketch "arduino_boot_cloner.pde", mais pour l'instant je ne trouve pas ce qui cloche.
MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

nrolland

je n'ai pas d'expérience sur le bootcloner...
En tous les cas belle réalisation.

Nicolas

Jean-François

J'ai enfin réussi à faire tourner le sketch jusqu'au bout, mais apparemment le boot loader n'a pas atteint la cible.

J'aimerais essayer la méthode bit bang, j'ai déjà préparer mes prises, par contre je ne sais pas comment faire avec ma console.
MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

nrolland

La je maitrise plus  :)
Perso j'étais parti de cet article http://tuxgraphics.org/electronics/200705/article07052.shtml

En résumé guido socher propose de faire un programmeur d'avr mais pour résoudre le pb de la poule et de l'oeuf (= comment programmer l'avr qui va servir de programmateur sans programmateur) il utilise le bitbang de la puce ftdi (très lent mais un fois que le bootloader est dessus = OK).

Pour cela il modifie uisp (un équivalent de avrdude qui permet de flasher un avr) pour qu'il puisse utiliser les pins bit bang du FTDI 232R. Il faut faire qq modif de ce code la  http://tuxgraphics.org/common/src2/article07052/uisp-20050207-with-usb-bbpg-patch.tar.gz
puis le compiler.

Essaye de compiler ce code ci dessus sous mac et après je t'indiquerai la suite si OK (je sais pas si c'est compilable sous mac).

Jean-François

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Jean-François

#20
Nov 16, 2008, 04:38 pm Last Edit: Nov 16, 2008, 04:57 pm by jfs Reason: 1
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.
MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Jean-François

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 ?  ;)
MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Jean-François

#22
Nov 16, 2008, 07:36 pm Last Edit: Nov 16, 2008, 08:14 pm by jfs Reason: 1
En ouvrant une console, et en mettant un code du genre :

Quote
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 .
MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

nrolland

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

Jean-François

#24
Nov 16, 2008, 11:37 pm Last Edit: Nov 16, 2008, 11:46 pm by jfs Reason: 1
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   ::)
MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

nrolland

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 http://savannah.nongnu.org/patch/?4330 mais ca doit aller avec une version d'avrdude particuliere

Nicolas


Jean-François

Je dois télécharger les 5 fichiers joints ?
MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Jean-François

#27
Nov 17, 2008, 07:45 pm Last Edit: Nov 17, 2008, 07:48 pm by jfs Reason: 1
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".

Quote
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  :-?
MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Jean-François

#28
Nov 17, 2008, 08:15 pm Last Edit: Nov 17, 2008, 10:29 pm by jfs Reason: 1
J'ai trouvé un fichier avrdude.conf avec ça dedans :

Code: [Select]
...

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

Code: [Select]
#------------------------------------------------------------
# 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 ?
MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Jean-François

En cherchant le code source d'avrdude 5.5 pour osx , je suis tombé sur cette page.

Tout en bas il y a ça :

Code: [Select]
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 :

Code: [Select]
programmer is not responding : time out

Avec dasa, j'ai ça :

Code: [Select]
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.
MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Go Up