Répondre à la discussion
Affichage des résultats 1 à 4 sur 4

Bootloader ATmega32 langage c



  1. #1
    thomasalbert1993

    Exclamation Bootloader ATmega32 langage c

    Bonjour

    Pour un projet personnel, j'ai besoin d'insérer un bootloader dans mon ATmega32, afin de pouvoir le mettre à jour via sa liaison série...
    Pourriez vous m'aider à programmer ce morceau de programme ? Au moins me donner les grandes lignes :P

    En fait le seul truc qu'il faudrait faire c'est :

    Code:
    Si LireEEprom (adresse : 0x0000) == 1
    {
         // Passer en mode programmation
         EcritFlash (adresse, RecoitUART ());
    }
         // Programme principal
    Voila, mais placer ca en bootloader, je ne sais pas faire, et je ne sais pas non plus programmer la flash (j'ai regardé la datasheet, mais je m'embrouille avec tous les registres )

    Donc si vous avez bien compris, quand le microcontroleur s'allume, il regarde l'octet à l'adresse 0x0000 dans l'eeprom, si celui ci est à un, on passe en mode programmation, et on programme la flash avec le programme qu'on recoit via l'UART...

    voila

    Merci beaucoup

    Thomas A.

    PS : c'est dans le programme principal qu'on met à 1 l'octet 0 de l'eeprom (suite par exemple à la réception de trames de mises en mode programmtion du systeme)


    .

    -----

    Dernière modification par gienas ; 30/04/2009 à 21h11. Motif: Ajouté les balises de code

  2. #2
    Seb.26

    Re : Bootloader ATmega32 langage c

    Les grandes lignes :

    Ton bootloader est stocké dans un secteur dédié de ta Flash, il n'y a rien d 'autre dedans (voir le fichier de link de ton projet) ... choisi un petit secteur si possible, afin de ne pas "gâcher" de la place ...

    Le programme principal est stocké dans les autres secteurs de façon à pouvoir être écrit.

    Voir la doc de ton uCPU pour le formatage et l'écriture des secteurs

    Au boot, tu regarde ton octet en eeprom, et si tu es en mode "program", tu attends les infos qui viennent de l'uart ... sinon, tu lance le programme principal ...

    A toi de rendre tout cela suffisamment robuste : des checksum sur chaque packet, et sur chaque secteur...

    Un petit protocole pour rendre tout ça plus joli (genre [ [header] [longueur trame] [command] [data] [chk] ] avec un ACK pour valider chaque trame venant du host )

    Il ta faut AMA 4 commandes :
    * erase sector : data = [sector id]
    * write : data = [adr] [data]
    * verify : data = [adr] [lenght] ( prévoir de renvoyer le checksum que tu obtient pour que l'hôte puisse savoir s'il faut recommencer ou passer au secteur suivant )
    * run : data = null

    Le host (PC) écrit chaque secteur l'un après l'autre, personnellement, c'est chez lui que je place toujours l'intelligence du flash...

    Une fois tout les secteurs de flash OK, tu remets ton octet d'eeprom en mode "run"

    Voilà pour les grandes lignes ...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  3. #3
    thomasalbert1993

    Re : Bootloader ATmega32 langage c

    ok merci beaucoup

    Et pour le programme du bootloader, c un programme traditionnel avec les #define et tout ? Je peux utiliser l'UART, les CAN, le LCD et tout ?

    Merci

    Thomas A.

  4. #4
    thomasalbert1993

    Re : Bootloader ATmega32 langage c

    personne ?

Sur le même thème :

Discussions similaires

  1. [ATMEGA32] module bluetooth
    Par emule dans le forum Électronique
    Réponses: 2
    Dernier message: 18/08/2008, 13h19
  2. STK500 + atmega163 + atmega32
    Par emule dans le forum Électronique
    Réponses: 2
    Dernier message: 05/08/2008, 11h53
  3. ATmega32 HS ?
    Par Kilhian dans le forum Électronique
    Réponses: 0
    Dernier message: 18/07/2007, 08h01
  4. Besoin d'aide programmation ATmega32
    Par Kilhian dans le forum Électronique
    Réponses: 1
    Dernier message: 12/07/2007, 10h39