Sari la conținut
ELFORUM - Forumul electronistilor

Vreau sa-mi fac un bootloader


claudio

Postări Recomandate

Salutare,Vreau sa-mi fac un bootloader simplu, fara prea multe complicatii.Am studiat pe net diferite variante si mi-am facut o idee.Acum e partea in care vreau sa-l implementez.Ca si suport folosesc AVRStudio5, ExtremeBurner, USBasp.Pentru inceput o sa fac o aplicatie care va fi scrisa la adresa de boot si la rulare sa aprinda un LED.Cum procedez ca acest program (HEX) sa fie scris in boot si nu la adresa 0x0000?Mutlumesc.

Link spre comentariu
  • 2 săptămâni mai târziu...
  • Răspunsuri 4
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • claudio

    4

  • ole

    1

Salutare,

 

Am reusit sa fac ce mi-am propus, iar mai jos sunt explicatii pentru cei care au nevoie de ajutor.

 

La pornire uC va rula aplicatia din bootloader (BlinkLED-boot.c) astfel ledul de pe un PORTA va licarii de 32 ori la 100ms, face o pauza de 1sec apoi porneste aplicatia propriu-zisa (BlinkLED-main.c) in care ledul va licarii la 500ms.

 

Sursa BlinkLED-boot.c

#define F_CPU 16000000UL#include <avr/io.h>#include <util/delay.h>int main(void){	DDRA=0xFF;	PORTA=0x00;	while(1)	{		for (uint8_t i=0; i<32; i++)		{			PORTA=0xFF;			_delay_ms(100);			PORTA=0x00;			_delay_ms(100);		}		_delay_ms(1000);		asm("jmp 0x0000");	}}
Inainte de compilare trebuie sa faceti urmatoarea setare in AVRStudio5:

1. Click dreapta pe proiect -> Properties

2. la Memory trebuie completat:

MemoryType: Flash

Name: .text

Address: 0x3C00

 

Sursa BlinkLED-main.c

#define F_CPU 16000000UL#include <avr/io.h>#include <util/delay.h>int main(void){	DDRA=0xFF;	PORTA=0x00;	while(1)	{		for (uint8_t i=0; i<8; i++)		{			PORTA=0xFF;			_delay_ms(500);			PORTA=0x00;			_delay_ms(500);        	}		_delay_ms(1000);	}}

Pentru a obtine un singur fisier HEX, am concatenat cele doua HEX-uri obtinute, folosind Srecord http://srecord.sourceforge.net/ prin comanda "srec_cat BlinkLED-main.hex -intel BlinkLED-boot.hex -intel -o APP.hex -intel".

 

Bitii "Fusebits" au valoriile:

LF: 0xFF

HF: 0xDA

 

Microcontrolerul este ATmega32.

Link spre comentariu
  • 5 săptămâni mai târziu...

Acum m-am lovit de urmatoarea problema: cum scriu fuse bytes prin bootloader?Pana in momentul de fata am reusit sa-i citesc si sa-i afisez in Hyperterminal.Pe net sunt ceva documentatii, dar sunt doar pentru LOCK BITS.Oare nu se poate scrie LOW FUSE, HIGH FUSE si EXTENDED FUSE prin bootloader?Multumesc.

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări