Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Atmega48 - Avrdude, Atmega48 i fusebity

brodo 29 Cze 2014 22:48 897 4
  • #1 29 Cze 2014 22:48
    brodo
    Poziom 13  

    Właśnie zaprogramowałem Atmegę48 za pomocą Avrdude i Burn o Mat'a. Sam plik hex zweryfikowany został pozytywnie.

    Ale próba wgrania fusebitów:

    SPIEN = ENABLED
    BODLEVEL = 4V3
    CKDIV8 = DISABLED
    SUT = 14CK + 0MS
    CKSEL = INT RC 8MHZ
    FUSE EXT: 0xFF
    FUSE HIGH: 0xDC
    FUSE LOW: 0xC2
    LOCK BIT: 0xFC

    nie udała się.

    Oto rezultat :

    <<<<<
    /usr/bin/avrdude -C /etc/avrdude.conf -p m48 -P usb -c usbasp-clone -u -U efuse:w:0xFF:m -U hfuse:w:0xDC:m -U lfuse:w:0xC2:m

    avrdude: warning: cannot set sck period. please check for usbasp firmware update.
    avrdude: AVR device initialized and ready to accept instructions

    Reading | ################################################## | 100% 0.00s

    avrdude: Device signature = 0x1e9205
    avrdude: reading input file "0xFF"
    avrdude: writing efuse (1 bytes):

    Writing | ***failed;
    ################################################## | 100% 0.03s

    avrdude: 1 bytes of efuse written
    avrdude: verifying efuse memory against 0xFF:
    avrdude: load data efuse data from input file 0xFF:
    avrdude: input file 0xFF contains 1 bytes
    avrdude: reading on-chip efuse data:

    Reading | ################################################## | 100% 0.00s

    avrdude: verifying ...
    avrdude: verification error, first mismatch at byte 0x0000
    0x01 != 0xff
    avrdude: verification error; content mismatch

    avrdude done. Thank you.
    >>>>>>>>

    W czym tkwi błąd ?

    0 4
  • Pomocny post
    #2 30 Cze 2014 06:07
    atom1477
    Poziom 43  

    Problem tkwi w fusebajcie (że tak no nazwę) Extended który ma zaimplementowane nie wszystkie bity (w zasadzie to ma zaimplementowany tylko 1).
    AVRDUDE robi weryfikację i odczytuje tylko ten jeden zaimplementowany bit.
    Wartości pozostałych mogą być dowolne, zależy to od budowy wewnętrznej układu i na tą chwilę nie znajduję jak to jest konkretnie zrobione.
    Po tym co zwraca Twój procek (0x01) można jednak przypuszczać że te pozostałe bity są zawsze zwracane jako 0.
    Zatem nie można zapisać efuse jako 0xFF bo zaimplementowany jest tylko jeden bit a pozostałe muszą mieć wartość 0.
    Więc efuse może być równy tylko 0x00 albo 0x01. W Twoim przypadku 0x01.

    0
  • #3 30 Cze 2014 21:32
    brodo
    Poziom 13  

    Co w takim razie zrobić, aby zapisać te fusebity ?
    Plik hex zapisuje się i weryfikuje poprawnie.

    -1
  • #4 30 Cze 2014 21:52
    zumek
    Poziom 39  

    brodo napisał:
    Co w takim razie zrobić, aby zapisać te fusebity ?

    Dostałeś już odpowiedź
    atom1477 napisał:
    Więc efuse może być równy tylko 0x00 albo 0x01. W Twoim przypadku 0x01.

    0
  • #5 30 Cze 2014 22:40
    brodo
    Poziom 13  

    Dzięki kolegom, zadziałało :-)

    0