vladutz2000 Postat Mai 12, 2009 Partajează Postat Mai 12, 2009 Salut .Lucrez la un proiect cu un ATMega32 si vreau sa rulez hex-ul dintr-un chip EEPROM (24C256 mai precis , structurat pe 32 K x 8 biti) . Chipul foloseste I2C , deci este usor de conectat la microcontroller ( doar 2 conexiuni din cate stiu eu ) . Bootloaderul ar rula cam asa : ia la rand fiecare bit si-l copiaza in ROM , dupa care sare la adresa de start al programului , ceea ce ar trebui sa-l ruleze . intrebarea e : e corecta metoda asta ? sau daca aveti idei mai bune (folosind acelasi chip eeprom) , spuneti-mi , ca sa stiu cam cum ar fi cel mai bine . Link spre comentariu
bogdan_ Postat Mai 12, 2009 Partajează Postat Mai 12, 2009 Mie mi se pare ok, cu o singura intrebare: vrei sa iti copieze programul la fiecare pornire? Daca nu vrei asta, ai putea pune undeva in eeprom versiunea programului si uC sa o compare intai cu ceea ce are deja stocat in flash, urmand sa decida daca o scrie sau nu.Ma gandesc ca programarea respectiva dureaza ceva timp, plus functie de cate porniri ai al uC trebuie sa iei in calcul numarul limitat de scrieri in Flash. Date despre cum se scrie un bootloader gasesti in datasheet. Link spre comentariu
vladutz2000 Postat Mai 12, 2009 Autor Partajează Postat Mai 12, 2009 si eu m-am gandit la asta . in chipul eeprom as pune un anumit bit care sa reprezinte versinuea , si daca uC-ul gaseste aceeasi versiune si in ROM , atunci incarca ROM-ul direct fara sa mai copieze EEPROM-ul inca o data.si ms ca mi-ai zis pentru ca nu stiam ca in datasheet scrie despre un bootloader.apropo: care e limbajul de programare cel mai potrivit pentru un bootloader?assembler ? Link spre comentariu
danzup Postat Mai 12, 2009 Partajează Postat Mai 12, 2009 Salut .Lucrez la un proiect cu un ATMega32 si vreau sa rulez hex-ul dintr-un chip EEPROM (24C256 mai precis , structurat pe 32 K x 8 biti) . Chipul foloseste I2C , deci este usor de conectat la microcontroller ( doar 2 conexiuni din cate stiu eu ) . Bootloaderul ar rula cam asa : ia la rand fiecare bit si-l copiaza in ROM , dupa care sare la adresa de start al programului , ceea ce ar trebui sa-l ruleze . intrebarea e : e corecta metoda asta ? sau daca aveti idei mai bune (folosind acelasi chip eeprom) , spuneti-mi , ca sa stiu cam cum ar fi cel mai bine .In ROM nu poate copia pentru ca este : READ ONLY MEMORY .Metoda nu este corecta : atmel nu poate stoca bootloaderul in memorie externa !Citeste datasheetul si info despre un bootloader de la Atmel . Link spre comentariu
vladutz2000 Postat Mai 12, 2009 Autor Partajează Postat Mai 12, 2009 eu stiam ca atmega32 are Write while read , o metoda de self-program ... nu inseamna asta ca poate sa citeasca EEPROMul extern si sa isi scrie singur memoria ? Link spre comentariu
danzup Postat Mai 12, 2009 Partajează Postat Mai 12, 2009 eu stiam ca atmega32 are Write while read , o metoda de self-program ... nu inseamna asta ca poate sa citeasca EEPROMul extern si sa isi scrie singur memoria ?Da !! dar o face pe zone de memorie flash strict delimitate din inauntrul lui !NU stiu sa poata face asta cu memorie externa .Daca gasesti asa ceva sau ai vazut undeva posteaza aici sa vad si eu ! Link spre comentariu
vladutz2000 Postat Mai 12, 2009 Autor Partajează Postat Mai 12, 2009 eu nu am spus ca vreau sa scrie ceva in EEPROMul extern , ci sa citeasca , eu inteleg ca memoria interna e limitata ... ceea ce vroiam eu sa faca era de genul asta : sa zicem ca programelul de copiere ocupa exact 2 K de memorie din ROM , cand microcontrollerul porneste , programul incepe sa comunice prin I2C cu EEPROM-ul extern si sa scrie tot ce gaseste in chip , pe memoria interna , in continuarea programului de copiere , iar dupa ce termina copierea , sa sara direct la bit-ul de inceput al programului copiat .. Link spre comentariu
danzup Postat Mai 12, 2009 Partajează Postat Mai 12, 2009 eu stiam ca atmega32 are Write while read , o metoda de self-program ... nu inseamna asta ca poate sa citeasca EEPROMul extern si sa isi scrie singur memoria ?Da !! dar o face pe zone de memorie flash strict delimitate din inauntrul lui !NU stiu sa poata face asta cu memorie externa .Daca gasesti asa ceva sau ai vazut undeva posteaza aici sa vad si eu !Uite cum e cu bootloaderul :In the case of AVR processors, the bootloader program is usually 256-4096 assembly instuctions long and resides in a special portion of the FLASH memory called the bootblock. At boot time (when the processor has just been reset) the bootloader starts and is capable of communicating with the outside world to retrieve a new program and program it into the processor's FLASH memory. Depending on the bootloader and the available hardware, new application code can be loaded from any source including the serial port, SPI or I2C interfaces, external memory, hard disks, flash cards, etc. Once the programming is done, the bootloader program exits or the processor is reset and begins running the newly loaded code. Only AVR processors with the self-programming memory feature (those that have an SPM assembly instruction) can run a bootloader.Daca asta ai vrut tu sa spui in primul post ,sa stii ca nu asta se intelege .Deci bootloaderul incarca programul pe care vrei sa-l executi . Dar nu poate sa se suprascrie pe el insusi ! Boot loaderul se scrie cu programatorul si cand il programezi microcontrolerul nu executa cod .Ai inteles ? Link spre comentariu
vladutz2000 Postat Mai 12, 2009 Autor Partajează Postat Mai 12, 2009 ATMega32 are un bootblock , si am inteles de mult .... scuza-ma ca nu m-am exprimat in cel mai profesional mod posibil ca sa se inteleaga ... nu am zis ca vreau sa incarc bootloaderul in EEPROM-ul extern , ba din contra , am vrut sa spun ca bootloaderul sa fie in memoria interna a microcontrollerului , si sa incarce programul din EEPROM ... Link spre comentariu
danzup Postat Mai 12, 2009 Partajează Postat Mai 12, 2009 ATMega32 are un bootblock , si am inteles de mult .... scuza-ma ca nu m-am exprimat in cel mai profesional mod posibil ca sa se inteleaga ... nu am zis ca vreau sa incarc bootloaderul in EEPROM-ul extern , ba din contra , am vrut sa spun ca bootloaderul sa fie in memoria interna a microcontrollerului , si sa incarce programul din EEPROM ...Asta se poate !Mult succes. Link spre comentariu
vladutz2000 Postat Mai 12, 2009 Autor Partajează Postat Mai 12, 2009 Ma bucur ca in sfarsit ne-am inteles ! Merci ! apropo ... daca-ti si zic ce fac o sa ma crezi tampit ... fac un sistem de jocuri pe monitor VGA (si e foarte posibil la 16 MIPS) Link spre comentariu
bogdan_ Postat Mai 13, 2009 Partajează Postat Mai 13, 2009 Foarte bine ca s-a lamurit. Gasesti pe net bootloadere de pe orice ... poti sa faci si prin radio sau IR. Orice program care poate intra in sectorul de FLASH alocat bootloaderului si poate comunica cumva cu exteriorul poate sa iti scrie in restul de memorie. Desigur, asa cum s-a amintit trebuie ca uC sa supoarte scrierea read while write. Tu ai spus deja ca folosesti mega32, deci nu se pune problema. In datasheet gasesti si cod pentru bootloader, in asm. Apropo de bootloader, eu folosesc pentru proiectele mele Megaload, il gasesti pe la http://www.microsyl.com/ Iti da si codul pentru uC, facut parte in C parte in asm. In C e facuta partea de comunicatie, iar in asm e partea de lucru cu memoria. Compilatorul pe care il foloseste, ICCV7 e limitat parca la 4K de memorie dupa expirarea perioadei de demo, deci il poti folosi pentur bootloader cel putin. succes! Link spre comentariu
vladutz2000 Postat Mai 13, 2009 Autor Partajează Postat Mai 13, 2009 oo da .. bootloader wireless ! la asta nu m-am gandit ! ... nu ... raman la ideea cu chipul EEPROM , si folosesc asta pentru ca vreau sa programez chipul prin calculator o doar daca am nevoie de vreun bootloader mai bun , mai ales ca am cam avut probleme cu primul atmega32 la care nu mai citea nimic dupa niste incercari esuate de programare ... si 24C-urile se programeaza destul de usor , prin asta : http://www.scienceprog.com/wp-content/u ... age002.jpg ... apropo ! imi spune si mie cineva ce ar trebui sa fie jumperul acela acolo ? fiindca nu inteleg ce e...... asa si al doilea motiv pentru care folosesc un chp eeprom ...ei bine toate sistemele de jocuri au o memorie externa .. si oricum daca s-ar copia mereu nu ar fi nici o problema .. la 10,000 de cicluri de copiere ... daca il pornesc de 10 ori intr-o zi imi ajunge timp de trei ani Link spre comentariu
bogdan_ Postat Mai 14, 2009 Partajează Postat Mai 14, 2009 functie de memorie, pinul ala poate fi de write protect. cu jumperul pus(pinul legat la masa) poti sa il scrii. cu jumperul scos, doar sa il citesti. Link spre comentariu
vladutz2000 Postat Mai 14, 2009 Autor Partajează Postat Mai 14, 2009 functie de memorie, pinul ala poate fi de write protect. cu jumperul pus(pinul legat la masa) poti sa il scrii. cu jumperul scos, doar sa il citesti.aha , ms ca m-ai lamurit .. am vazut ca chipurile 24C au un pin WP , dar am uitat care era si nu mi-a trecut prin cap sa ma uit la diagrama ... Link spre comentariu
Postări Recomandate
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 contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum