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.

Biblioteka FATfs i problem z implementacja na ATmega16

maly_elektronik 26 Maj 2009 20:40 10939 34
  • #1 26 Maj 2009 20:40
    maly_elektronik
    Poziom 23  

    Witam :)
    Od kilku dniu usiłuje odpalić bibliotekę FATfs ze strony elm-chan
    I po prostu nie wiem co robię źle :(
    Mój kod wygląda następująco (nie stosuje RTC)

    Code:

    #include <avr/io.h>

    #include <avr/pgmspace.h>

    #include <avr/interrupt.h>

    #include <string.h>

    #include "xitoa.h"

    #include "ff.h"

    #include "diskio.h"

    #include "integer.h"
    #include "usart.h"

    #define BAUD 9600
    #define OSC 16000000
    #define MYUBRR OSC/16/BAUD-1

    int main(void)
    {

    USART_Init(MYUBRR);
    USART_Transmit(0xAA);
    USART_Transmit(disk_initialize (0));
    return 0;

    }

    A program non stop zwraca 0x03 albo 0x07 (nawet bez włożonej karty);(

    0 29
  • #3 27 Maj 2009 09:42
    d.d
    Poziom 20  

    Kiedyś nie mogłem uruchomić dwóch kart i nawet strona elm-chan nie pomogła . Kilka dni temu trafiłem na tę LINK stronę , pomyślałem nie zaszkodzi spróbować no i ku mojemu zdziwieniu karta odpaliła i działa na niej FAT32 i co najważniejsze chodzi szybciej niż ta co kiedyś uruchomiłem (Kingston 512mb spi clk=5MHz) a ta 10MHz.
    Masz tam kod pod Mega8 i 32 , ATmega16 ma większość rejestrów takich samych jak Mega8 więc powinno działać z minimalną przeróbką .

    0
  • #4 27 Maj 2009 10:27
    www
    Poziom 14  

    Ja też korzystałem kiedyś z biblioteki o której pisze kolega d.d.
    Dla kart MMC odpaliła od kopa, z kartami SD był problem przy inicjalizacji.

    Pozdrawiam.

    0
  • #5 27 Maj 2009 13:01
    _Robak_
    Poziom 33  

    www to wklej moze kod ktory pozwoli na dzialanie dla kart SD :)

    0
  • #6 27 Maj 2009 16:22
    markosik20
    Poziom 33  

    Przerobiłem kilka bibliotek do obsługi FAT'a na karcie SD. Dla mnie FatFs okazała się najlepszą (posiada bardzo prosty interfejs z programistą), dodatkowo jest stworzona na podobieństwo rozwiązań z programowania na PC (nie trzeba się martwić o liczbę sektorów na klaster, liczbę bajtów na klaster itp.). Po prostu, czytam dane z pliku od dowolnego miejsca i dowolnej długości (zależnej od dostępnej pamięci RAM).
    Jeżeli są problemu z odpaleniem to wynikają one przede wszystkim z błędów sprzętowych lub konfiguracyjnych. FatFs jest dobrze opisana i choć przykłady są hmm dosyć nieczytelne wystarczy trochę "pogrzebać" po źródłach żeby zrozumieć "co autor miał na myśli" (trzeba tylko dobrze mieć opanowane wskaźniki :wink:)
    Jeżeli karta działa z innymi funkcjami wystarczy zaimplementować do FatFs swoje biblioteki obsługi karty (inicjalizacji, odczytu i zapisu).

    0
  • #7 27 Maj 2009 17:39
    maly_elektronik
    Poziom 23  

    Mimo wszystko nie wiem co jest nie tak z tą biblioteką :(
    Pozmieniałem wszystko ale i tak nic to nie pomogło :(
    d.d -> Chyba zastosuje bibliotekę o której mówisz tylko zastanawia mnie jedno czy ma ona możliwość otwierania pliku zmieniania go i tworzenia nowego :?:

    0
  • #8 27 Maj 2009 18:25
    d.d
    Poziom 20  

    Dopiero kończę budować układ w którym będę implementował FAT32 nie wiem jeszcze czy wykorzystam ten kod do fatu ale na pewno część dotyczącą obsługi karty .
    W kodzie do którego podałem link dostępne są funkcje

    Code:

    unsigned char getBootSectorData (void);
    unsigned char readBootSector(void);
    unsigned char readDirInfo(void);
    unsigned long getSetFreeCluster(unsigned char totOrNext, unsigned char get_set, unsigned long FSEntry);
    struct dir_Structure* findFiles (unsigned char flag, unsigned char *fileName);
    unsigned long getSetNextCluster (unsigned long clusterNumber,unsigned char get_set,unsigned long clusterEntry);
    unsigned char readFile (unsigned char flag, unsigned char *fileName);
    unsigned char convertFileName (unsigned char *fileName);
    void createFile (unsigned char *fileName);
    unsigned long searchNextFreeCluster (unsigned long startCluster);
    void memoryStatistics (void);
    void displayMemory (unsigned long memory);
    void deleteFile (unsigned char *fileName);
    void freeMemoryUpdate (unsigned char flag, unsigned long size);

    ten pod ATmega32 może mieć jeszcze kilka .

    0
  • #9 27 Maj 2009 18:30
    maly_elektronik
    Poziom 23  

    To z obługą karty nie mam problemu :) Mam nawet napisanego swojego fat'a :) Tylko że mojego będe dopieszczał napewno jakis dłuższy okres czasu a ja potrzebuje czegoś na "hop-siup" :)

    1
  • #10 21 Sie 2009 22:17
    mojsamspam
    Poziom 10  

    Dzisiaj cały dzień się męczyłem z różnymi bibliotekami do FAT32. Tak jak napisał kolega d.d wypróbowałem rozwiązanie ze strony dharmanitech i odziwo ruszyło - problem mam tylko z kartami sformatowanymi jako FAT16 (FAT32 czyta bez problemu).

    Teraz zrobię jeszcze jedno podejście do tego elm-chana - choć już mam przeczucie, że efekt będzie marny, bo będzie trzeba pisać te 6 nieszczęsnych funkcji:
    * disk_initialize - Initialize disk drive
    * disk_status - Get disk status
    * disk_read - Read sector(s)
    * disk_write - Write sector(s)
    * disk_ioctl - Control device dependent features
    * get_fattime - Get current time //ta jest wyjątkowo prosta do zrobienia... jutro jak znajdę chwilę czasu, to ją wstawię :)
    ... udało się to może komuś uruchomić na ATMega32? Ja obecnie korzystam z płytki EvB4.3 i slot MMC/SD mam podłączony po SPI.

    Googlowałem dzisiaj sporo, ale nie udało mi się znaleźć gotowca do tych 6 funkcji na megę32.

    Pozdr

    0
  • #11 21 Sie 2009 22:48
    markosik20
    Poziom 33  

    mojsamspam napisał:

    Googlowałem dzisiaj sporo, ale nie udało mi się znaleźć gotowca do tych 6 funkcji na megę32.


    Przecież są dostępne w przykładach.

    0
  • #14 22 Sie 2009 11:30
    markosik20
    Poziom 33  

    mojsamspam napisał:
    eeee.... ja znalazłem tylko gotowego sampla na Atmelka64.


    Nie bądź śmieszny, tak trudno przeportować to na Atmegę32 ?

    0
  • #15 23 Sie 2009 09:43
    rpal
    Poziom 27  

    kol.Markosik prowadzilismy już tą dyskusję na temat rzeczonej biblioteki. Wojowałem z nią kilka dni aż z różnych zlepków Fat-ów sam spłodziłem własną i wcale nie jest łatwo to tak przenieść ad hoc. W oryginale (atmega64/128) jest wystarczająco dużo RAM aby to zaskoczyło w Atmega32 nie ma tyle pamięci. Poza tym o ile pamiętam należy dołożyć zegar czasu rzeczywistego ew. go zasymulować. Co najważniejsze za nim się za to ktoś chwyci musi mieć pewność że sam interface do karty SC/MMC ma prawidłowo zbudowany i tam nie tkwi błąd. To istotnie działa jednak jest pożeraczem pamięci.

    0
  • #16 23 Sie 2009 10:14
    markosik20
    Poziom 33  

    rpal napisał:
    W oryginale (atmega64/128) jest wystarczająco dużo RAM aby to zaskoczyło w Atmega32 nie ma tyle pamięci.


    Ehh, brak mi słów, dlaczego ludzie nie czytacie opisów jakie autor zamieścił na swojej stronie oraz opisów w samej bibliotece.
    Dlaczego mnie się udało (i to bez ŻADNYCH WIĘKSZYCH przeróbek) zaimplementować bibliotekę (zapis/odczyt) na Atmedze32 i jeszcze miałem jakieś 900B RAM na inne rzeczy?
    Co do warstwy komunikacyjnej do MMC/SD TEŻ JEST JUŻ GOTOWA.....trzeba sobie tylko piny poprzestawiać.
    I żadnego zegara nie trzeba symulować....

    0
  • #17 23 Sie 2009 20:54
    mojsamspam
    Poziom 10  

    no nic... to był strasznie nerwowy weekend - walczyłem od piątku i słabo mi poszło :(

    Co mi się udało zrobić:
    - dodałem biblioteki z przykładowej aplikacji pisanej na ATM64/128 do testowej aplikacji na ATM32. Link do exampla
    - zrobiłem funkcję DWORD get_fattime ()
    - przemapowałem konfigurację portów pod zestaw EvB4.3.
    - wyłączyłem support LongFileNames(LFN) - plik ff.h (linia:107) - powodem była mała ilość wolnej pamięci.
    - Zainicjalizowałem kartę SD (albo przynajmniej tak mi się wydaje) - disk_initialize(0) zwraca DSTATUS=3 w momencie kiedy karta znajduje się w slocie.

    Moje połączenia pinowe:
    uC:MMC/SD
    PB4:DAT3
    PB5:DI
    PB6:DAT0
    PB7:CLK

    uC:LCD
    PC7: D7
    PC6: D6
    PC5: D5
    PC4: D4
    PC3: E
    PC2: RS

    Nie mogę na dysku stworzyć nowego folderu, ani wykonywać żadnych innych operacji. Podczas próby stworzenia nowego folderu zwraca FRESULT=FR_NOT_ENABLED.

    Załączam kod tego co udało mi się spłodzić. Nie potrafię zmniejszyć użycia pamięci bardziej niż teraz jest (screenshot).

    Może ktoś z Was będzie miał jakieś pomysły.

    Biblioteka FATfs i problem z implementacja na ATmega16
    Biblioteka FATfs i problem z implementacja na ATmega16

    Pozdrawiam i dobranoc.

    0
    Załączniki:
  • #19 25 Sie 2009 07:38
    flapo213
    Poziom 21  

    No faktycznie z 34 warningami to czas się zastanowić że coś może jednak jest nie tak ;). W jakim programie odbywa się proces kompilacji winavr, avrstudio czy jakimś innym. Ja używam eclipse tam można sobie podglądnąć co to za warningi wyskoczyły o reszcie programów się nie wypowiadam, ale zawsze można użyć składni w windowsie make clean a później make all w katalogu docelowym i chyba powinno wsio wywalić.

    Pozdrawiam

    0
  • #20 25 Sie 2009 08:25
    markosik20
    Poziom 33  

    flapo213 napisał:
    No faktycznie z 34 warningami to czas się zastanowić że coś może jednak jest nie tak ;).


    Tu nie chodzi o warningi a o zajętość RAM'u :wink:.

    0
  • #22 25 Sie 2009 14:23
    mojsamspam
    Poziom 10  

    Zajętość pamięci poprawiłem jeszcze tego wieczoru co napisałem na forum - nie zauważyłem, deklaracji dwóch pamięciożernych zmiennych (linie z deklaracją wstawiłem w komentarz i problem zniknął). Warningi w 90% dotyczą deklaracji nie używanych zmiennych i funkcji, także to nie jest problemem.

    Udało mi się dzisiaj w końcu to zrobić :). Problemem były błędy w mapowaniu portów oraz obsługa Timer2. Postaram się jakoś kod ułożyć z komentarzami i wrzucę gotowca dla posiadaczy ATMega32 (przy standardowej konfiguracji portów).

    @markosik20, dzięki wielkie sugestie zmuszające do myślenia ;)

    Pozdr,

    0
  • #23 25 Sie 2009 14:25
    rpal
    Poziom 27  

    Czy natknął się ktoś na procedurę formatowania karty ?

    0
  • #24 18 Lis 2009 13:16
    Arkadiusz013
    Poziom 10  

    Witam
    mojsamspam czy mógłbyś wrzucić kod, który u Ciebie działa ? Lub przesłać mi na maila ? Będę wdzięczny :)

    0
  • #25 22 Sty 2010 16:10
    michalmily
    Poziom 13  

    Witam wszystkich, żeby nie tworzyć nowego tematu piszę tutaj. Mam problem z uruchomieniem przykładowego programu biblioteki ELM Chana na avr. Próbuję stworzyć nowy projekt w WinAVR, ale kompilator ciągle zwraca błąd: no rules to make 'program'... Jestem początkujący w C więc to jest pewnie główny powód, proszę zatem o wyrozumiałość. Pozdrawiam....

    0
  • #26 22 Sty 2010 17:02
    markosik20
    Poziom 33  

    michalmily napisał:
    .. zwraca błąd: no rules to make 'program'...


    To nie ma żadnego związku z bibliotekę FatFs.

    0
  • #27 22 Sty 2010 23:34
    sinuh3
    Poziom 17  

    michalmily napisał:
    Witam wszystkich, żeby nie tworzyć nowego tematu piszę tutaj. Mam problem z uruchomieniem przykładowego programu biblioteki ELM Chana na avr. Próbuję stworzyć nowy projekt w WinAVR, ale kompilator ciągle zwraca błąd: no rules to make 'program'... Jestem początkujący w C więc to jest pewnie główny powód, proszę zatem o wyrozumiałość. Pozdrawiam....


    Problem jest zapewne z plikiem makefile. Poniżej masz makefile z mojego projektu.
    Linię:
    Code:
    SRC = $(TARGET).c onewire.c delay.c ds18x20.c uart.c crc8.c pwm.c HD44780.c pcf8574.c FAT/ff.c FAT/rtc.c FAT/mmc.c adc.c FansCheck.c


    Musisz "wyposażyć" z pliki z Twojego projektu. Pozmieniać także F_OSC i MCU.

    Code:
    # MCU name
    
    MCU = atmega128



    F_OSC   = 16000000
    # Frequencies below 1,8MHz may only work in OW_ONE_BUS-Mode
    ##F_OSC =  1000000



    # Output format. (can be srec, ihex, binary)
    FORMAT = ihex


    # Target file name (without extension).
    TARGET = main


    # List C source files here. (C dependencies are automatically generated.)
    SRC = $(TARGET).c onewire.c delay.c ds18x20.c uart.c crc8.c pwm.c HD44780.c pcf8574.c FAT/ff.c FAT/rtc.c FAT/mmc.c adc.c FansCheck.c


    # List Assembler source files here.
    # Make them always end in a capital .S.  Files ending in a lowercase .s
    # will not be considered source files but generated files (assembler
    # output from the compiler), and will be deleted upon "make clean"!
    # Even though the DOS/Win* filesystem matches both .s and .S the same,
    # it will preserve the spelling of the filenames, and gcc itself does
    # care about how the name is spelled on its command-line.
    ASRC = FAT/xitoa.S


    # Optimization level, can be [0, 1, 2, 3, s].
    # 0 = turn off optimization. s = optimize for size.
    # (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
    OPT = s

    # Debugging format.
    # Native formats for AVR-GCC's -g are stabs [default], or dwarf-2.
    # AVR (extended) COFF requires stabs, plus an avr-objcopy run.
    #DEBUG = stabs
    DEBUG = dwarf-2

    # List any extra directories to look for include files here.
    #     Each directory must be seperated by a space.
    EXTRAINCDIRS =

    # Compiler flag to set the C Standard level.
    # c89   - "ANSI" C
    # gnu89 - c89 plus GCC extensions
    # c99   - ISO C99 standard (not yet fully implemented)
    # gnu99 - c99 plus GCC extensions
    CSTANDARD = -std=gnu99

    # Place -D or -U options here




    CDEFS =

    # Place -I options here
    CINCS =


    # Compiler flags.
    #  -g*:          generate debugging information
    #  -O*:          optimization level
    #  -f...:        tuning, see GCC manual and avr-libc documentation
    #  -Wall...:     warning level
    #  -Wa,...:      tell GCC to pass this to the assembler.
    #    -adhlns...: create assembler listing
    CFLAGS = -g$(DEBUG)
    CFLAGS += $(CDEFS) $(CINCS)
    CFLAGS += -O$(OPT)
    CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums 
    CFLAGS += -Wall -Wstrict-prototypes
    CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
    CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
    CFLAGS += $(CSTANDARD)
    CFLAGS += -DF_OSC=$(F_OSC)
    CFLAGS += -DF_CPU=$(F_OSC)




    # Assembler flags.
    #  -Wa,...:   tell GCC to pass this to the assembler.
    #  -ahlms:    create listing
    #  -gstabs:   have the assembler create line number information; note that
    #             for use in COFF files, additional information about filenames
    #             and function names needs to be present in the assembler source
    #             files -- see avr-libc docs [FIXME: not yet described there]
    ##ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs
    ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-g$(DEBUG)
    ASFLAGS += -DF_OSC=$(F_OSC)


    #Additional libraries.

    # Minimalistic printf version
    PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min

    # Floating point printf version (requires MATH_LIB = -lm below)
    PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt

    PRINTF_LIB =

    # Minimalistic scanf version
    SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min

    # Floating point + %[ scanf version (requires MATH_LIB = -lm below)
    SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt

    SCANF_LIB =

    MATH_LIB = -lm

    # External memory options

    # 64 KB of external RAM, starting after internal RAM (ATmega128!),
    # used for variables (.data/.bss) and heap (malloc()).
    #EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff

    # 64 KB of external RAM, starting after internal RAM (ATmega128!),
    # only used for heap (malloc()).
    #EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff

    EXTMEMOPTS =

    # Linker flags.
    #  -Wl,...:     tell GCC to pass this to linker.
    #    -Map:      create map file
    #    --cref:    add cross reference to  map file
    LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
    LDFLAGS += $(EXTMEMOPTS)
    LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)




    # Programming support using avrdude. Settings and variables.

    # Programming hardware: alf avr910 avrisp bascom bsd
    # dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
    #
    # Type: avrdude -c ?
    # to get a full listing.
    #
    #AVRDUDE_PROGRAMMER = stk500
    AVRDUDE_PROGRAMMER = stk500v2

    # com1 = serial port. Use lpt1 to connect to parallel port.
    AVRDUDE_PORT = com1    # programmer connected to serial device

    AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
    #AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep


    # Uncomment the following if you want avrdude's erase cycle counter.
    # Note that this counter needs to be initialized first using -Yn,
    # see avrdude manual.
    #AVRDUDE_ERASE_COUNTER = -y

    # Uncomment the following if you do /not/ wish a verification to be
    # performed after programming the device.
    #AVRDUDE_NO_VERIFY = -V

    # Increase verbosity level.  Please use this when submitting bug
    # reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
    # to submit bug reports.
    #AVRDUDE_VERBOSE = -v -v

    AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
    AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
    AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
    AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)



    # ---------------------------------------------------------------------------

    # Define directories, if needed.
    DIRAVR = c:/winavr
    DIRAVRBIN = $(DIRAVR)/bin
    DIRAVRUTILS = $(DIRAVR)/utils/bin
    DIRINC = .
    DIRLIB = $(DIRAVR)/avr/lib


    # Define programs and commands.
    SHELL = sh
    CC = avr-gcc
    OBJCOPY = avr-objcopy
    OBJDUMP = avr-objdump
    SIZE = avr-size
    NM = avr-nm
    AVRDUDE = avrdude
    REMOVE = rm -f
    COPY = cp




    # Define Messages
    # English
    MSG_ERRORS_NONE = Errors: none
    MSG_BEGIN = -------- begin --------
    MSG_END = --------  end  --------
    MSG_SIZE_BEFORE = Size before:
    MSG_SIZE_AFTER = Size after:
    MSG_COFF = Converting to AVR COFF:
    MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
    MSG_FLASH = Creating load file for Flash:
    MSG_EEPROM = Creating load file for EEPROM:
    MSG_EXTENDED_LISTING = Creating Extended Listing:
    MSG_SYMBOL_TABLE = Creating Symbol Table:
    MSG_LINKING = Linking:
    MSG_COMPILING = Compiling:
    MSG_ASSEMBLING = Assembling:
    MSG_CLEANING = Cleaning project:




    # Define all object files.
    OBJ = $(SRC:.c=.o) $(ASRC:.S=.o)

    # Define all listing files.
    LST = $(ASRC:.S=.lst) $(SRC:.c=.lst)


    # Compiler flags to generate dependency files.
    ### GENDEPFLAGS = -Wp,-M,-MP,-MT,$(*F).o,-MF,.dep/$(@F).d
    GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d

    # Combine all necessary flags and optional flags.
    # Add target processor to flags.
    ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
    ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)





    # Default target.
    all: begin gccversion sizebefore build sizeafter finished end

    build: elf hex eep lss sym

    elf: $(TARGET).elf
    elf: ds.elf
    hex: $(TARGET).hex
    eep: $(TARGET).eep
    lss: $(TARGET).lss
    sym: $(TARGET).sym



    # Eye candy.
    # AVR Studio 3.x does not check make's exit code but relies on
    # the following magic strings to be generated by the compile job.
    begin:
       @echo
       @echo $(MSG_BEGIN)

    finished:
       @echo $(MSG_ERRORS_NONE)

    end:
       @echo $(MSG_END)
       @echo


    # Display size of file.
    HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
    ELFSIZE = $(SIZE) -A $(TARGET).elf
    sizebefore:
       @if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); echo; fi

    sizeafter:
       @if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); echo; fi



    # Display compiler version information.
    gccversion :
       @$(CC) --version



    # Program the device. 
    program: $(TARGET).hex $(TARGET).eep
       $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)




    # Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
    COFFCONVERT=$(OBJCOPY) --debugging \
    --change-section-address .data-0x800000 \
    --change-section-address .bss-0x800000 \
    --change-section-address .noinit-0x800000 \
    --change-section-address .eeprom-0x810000


    coff: $(TARGET).elf
       @echo
       @echo $(MSG_COFF) $(TARGET).cof
       $(COFFCONVERT) -O coff-avr $< $(TARGET).cof


    extcoff: $(TARGET).elf
       @echo
       @echo $(MSG_EXTENDED_COFF) $(TARGET).cof
       $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof



    # Create final output files (.hex, .eep) from ELF output file.
    %.hex: %.elf
       @echo
       @echo $(MSG_FLASH) $@
       $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@

    %.eep: %.elf
       @echo
       @echo $(MSG_EEPROM) $@
       -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
       --change-section-lma .eeprom=0 -O $(FORMAT) $< $@

    # Create extended listing file from ELF output file.
    %.lss: %.elf
       @echo
       @echo $(MSG_EXTENDED_LISTING) $@
       $(OBJDUMP) -h -S $< > $@

    # Create a symbol table from ELF output file.
    %.sym: %.elf
       @echo
       @echo $(MSG_SYMBOL_TABLE) $@
       $(NM) -n $< > $@



    # Link: create ELF output file from object files.
    .SECONDARY : $(TARGET).elf
    .PRECIOUS : $(OBJ)
    %.elf: $(OBJ)
       @echo
       @echo $(MSG_LINKING) $@
       $(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS)


    # Compile: create object files from C source files.
    %.o : %.c
       @echo
       @echo $(MSG_COMPILING) $<
       $(CC) -c $(ALL_CFLAGS) $< -o $@


    # Compile: create assembler files from C source files.
    %.s : %.c
       $(CC) -S $(ALL_CFLAGS) $< -o $@


    # Assemble: create object files from assembler source files.
    %.o : %.S
       @echo
       @echo $(MSG_ASSEMBLING) $<
       $(CC) -c $(ALL_ASFLAGS) $< -o $@



    # Target: clean project.
    clean: begin clean_list finished end

    clean_list :
       @echo
       @echo $(MSG_CLEANING)
       $(REMOVE) $(TARGET).hex
       $(REMOVE) $(TARGET).eep
       $(REMOVE) $(TARGET).obj
       $(REMOVE) $(TARGET).cof
       $(REMOVE) $(TARGET).elf
       $(REMOVE) $(TARGET).map
       $(REMOVE) $(TARGET).obj
       $(REMOVE) $(TARGET).a90
       $(REMOVE) $(TARGET).sym
       $(REMOVE) $(TARGET).lnk
       $(REMOVE) $(TARGET).lss
       $(REMOVE) $(OBJ)
       $(REMOVE) $(LST)
       $(REMOVE) $(SRC:.c=.s)
       $(REMOVE) $(SRC:.c=.d)
       $(REMOVE) .dep/*



    # Include the dependency files.
    -include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)


    # Listing of phony targets.
    .PHONY : all begin finish end sizebefore sizeafter gccversion \
    build elf hex eep lss sym coff extcoff \
    clean clean_list program

    0
  • #28 01 Lut 2010 18:21
    michalmily
    Poziom 13  

    Witam ponownie, dzięki za pomoc, udało się program skompilować i nawet wszystko działa. Jednak jedynie na symulatorze, mam problem z przeniesieniem tego na procesor. Po uruchomieniu procesor przesyła jedynie powitanie: "FatFs R0.07d test monitor for AVR\n", natomiast na każdą próbę wysłania komendy odpowiada jedynie echem i nie wykonuje żadnych operacji. Dodam, że mój procesor to ATmega128 z kwarcem 11,0592 MHz, Usart pracuje z prędkością 9600, pozdrawiam....

    0
  • #30 03 Lut 2010 09:14
    michalmily
    Poziom 13  

    Witam ponownie, częściowo udało mi się uruchomić ten układ, jednak przy inicjowaniu dysku - komenda "di0" uzyskuję odpowiedź "rc=7" i nie da się nic więcej zrobić. Wnioskuję, że to problem z podłączeniem karty. Przeglądałem już ten link, właśnie na jego podstawie podłączyłem kartę do układu, zmieniłem OCR2 na 110, ze względu na kwarc o wyższej częstotliwości, wejścia PB4 i PB5 na stałe zwarłem z masą, pokombinuję jeszcze z SPI, może prędkość jest za duża. Niedługo dam znać, Dzięki i pozdrawiam....

    0