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
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. >>
01/05/2009 - 08h37
thomasalbert1993
Date d'inscription
novembre 2005
Âge
19
Messages
939
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 ?