logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[AVR][C] Czy można uszkodzić uC pisząc Bootloader?

rmajda 31 Sie 2009 14:01 1757 5
REKLAMA
  • #1 6964113
    rmajda
    Poziom 20  
    Witam,

    Czy można w jakikolwiek sposób uszkodzić Atmege 128 pisząc na nią bootloader. Pytam bo nie chcę "zablokować" sobie procesora ćwicząc pisanie bootloadera. Pytanie jest raczej do kolegów/koleżnek którzy przerabiali temat bootloadera na Atmege.

    I tak przy okazji, jaki polecacie bootloader RS232, MegaLoad czy coś innego?

    Pozdrawiam,
  • REKLAMA
  • #2 6964177
    flapo213
    Poziom 21  
    Nie no uszkodzić się nie da, ja zrobiłem bootloader na rs232 chodzi jak trzeba. Jak będziesz pisał loader pamiętaj o ustawieniu rozmiaru dla loadera w fusebitach, no i oczywiście utwórz dobrego makefile żeby wogóle Ci wystartował z bootloadera, ja napisałem bootloadera dla Mega128 jakby co służę pomocą pozdrawiam
  • REKLAMA
  • #3 6964212
    rmajda
    Poziom 20  
    flapo213: Jakiego środowiska używasz (WinAvr + gcc)? I na jakim bootloaderze się wzorowałeś?
  • REKLAMA
  • #4 6964307
    Dr_DEAD
    Poziom 28  
    Na Mega16 uruchomiłem kiedyś bootloader z szyfrowaniem, ten ze strony Atmela. Popsuć nic nie mogłeś, jedynie źle fusebity mogłeś poprzestawiać.
  • REKLAMA
  • #5 6964924
    m.bartczak
    Poziom 16  
    Jak wszyscy poniżej napisali - popsuć nie popsujesz.

    W najgorszym wypadku możesz musieć wykasować błędne fuse-bity, poszukaj tematów o programowaniu wysokonapięciowym (wymagany specjalny hardware).
  • #6 6970817
    rmajda
    Poziom 20  
    OK, znalazłem błąd na poniższy problem. Źle miałem ustawiony adres powinno być:
    (zmieniłem adres sekcji .text na 0x1800) bo wartość 0x0C00 jest w słowach czyli po 2 bajty. Ech to nazewnictwo :-)


    To koledzy pomóżcie :-), procek to atmega8, rozmiar bootloadera największy czyli adres 0x0C00, fusbit BOOTRESET zaprogramowany, w AvrStudio przesunąłem wszystko (zmieniłem adres sekcji .text na 0x0600) pod adres 0x0C00, program tam wchodzi ale nie zapisuje flasha. Chciałem zapisać cokolwiek pod adres 0x0000.

    Zrobiłem prosty program dwie funkcje main i boot_program_page z biblioteki avr-libc:

    
    void boot_program_page (uint32_t page, uint8_t *buf)
    {
            uint16_t i;
            uint8_t sreg;
    
            // Disable interrupts.
    
            sreg = SREG;
            cli();
        
            eeprom_busy_wait ();
    
            boot_page_erase (page);
            boot_spm_busy_wait ();      // Wait until the memory is erased.
    
            for (i=0; i<SPM_PAGESIZE; i+=2)
            {
                // Set up little-endian word.
    
                uint16_t w = *buf++;
                w += (*buf++) << 8;
            
                boot_page_fill (page + i, w);
            }
    
            boot_page_write (page);     // Store buffer in flash page.
            boot_spm_busy_wait();       // Wait until the memory is written.
    
            // Reenable RWW-section again. We need this if we want to jump back
            // to the application after bootloading.
    
            boot_rww_enable ();
    
            // Re-enable interrupts (if they were ever enabled).
    
            SREG = sreg;
    }
    
    int main(void)
    {
        unsigned int i;
        unsigned char buf[128] = {1,2,3,4,5,6,7,8,9,0xAA};
       
        
        // wypelniamy bufor
        for(i = 0; i < SPM_PAGESIZE; i++)
            buf[i] = 0xAA;
    
        boot_program_page(0x0000,buf);
    
        while(1);
    
        return 0;
    }
    


    O czym jeszcze zapomniałem? Głównie piszę na PIC-e i dlatego przecieram szlak w bootloderze dla AVR-a.
REKLAMA