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

Atmega128 - FatFS: Problemy z zapisem na karcie SD po migracji z AVR DOS

avatar 08 Gru 2013 16:12 1857 6
  • #1 13038718
    avatar
    Poziom 36  
    Witam - od kilku dni walcze bez powodzenia z przepisaniem programu z AVR DOS na C -> FatFS

    Platforma sprzetowa ta sama co do AVR DOS (ta sama PCB)na AVR DOS działa , na FatFS nie che
    Atmega 128 z kwarcem 11,059200 Hz, karta SD zasilana z 3,3V atmega128 z 5V.
    Napięcia dopasowane za pomocą rezystorów.
    Dopasowywałem przykład ze strony autora Link
    Na początek - FatFS fools examp.
    i niestety nie chce nic się zapisać na karcie
    modyfikacji jedynie poddałem określenie wejść dla karty SD
    
    #define DO_INIT()					// Initialize port for MMC DO as input 
    #define DO			(PINB &	0x08)	// Test for MMC DO ('H':true, 'L':false) 
    
    #define DI_INIT()	DDRB  |= 0x04	// Initialize port for MMC DI as output 
    #define DI_H()		PORTB |= 0x04	// Set MMC DI "high" 
    #define DI_L()		PORTB &= 0xFB	// Set MMC DI "low" 
    
    #define CK_INIT()	DDRB  |= 0x02	// Initialize port for MMC SCLK as output 
    #define CK_H()		PORTB |= 0x02	// Set MMC SCLK "high" 
    #define	CK_L()		PORTB &= 0xFD	// Set MMC SCLK "low" 
    
    #define CS_INIT()	DDRB  |= 0x01	// Initialize port for MMC CS as output 
    #define	CS_H()		PORTB |= 0x01	// Set MMC CS "high" 
    #define CS_L()		PORTB &= 0xFE	// Set MMC CS "low" 
    "
    

    Karta sd podłączona do atmegi jak nota przykazała :) ->
    PB0 CS
    PB1 SCK
    PB2 DI
    PB3 D0
    Reszta kodu jak w przykładzie z fatfs. Błąd w sprzęcie wykluczam - wrzucając Hex'a z avr Dos wszysko jest OK, zapewne w przykładzie jest jakiś brak którego moje nie wprawne oko nie jest w stanie dostrzec.
    Środowisko AVR studio 4.18
  • #2 13040116
    piotrva
    VIP Zasłużony dla elektroda
    No tam trzeba jeszcze troszeczkę modyfikować niektóre miejsca. Np. z tego co pamiętam usunąć wykrywanie karty w slocie (stycznik mechaniczny), funkcje związane z RTC.
    Poza tym wiesz jak działa (ma działać) to demo?
  • #3 13046227
    avatar
    Poziom 36  
    W Fools proof nie mamy wykrywania karty (sprzętowego switcha) nie widze również wzmianki o rtc (wymagane są zmienne do datowania plików)
    Program moim zdaniem powinen stworzyć plik na karcie SD o nazwie newfile.txt, dodać jedną linijke tekstu zamknąć plik i to wiso :)
  • #4 13101295
    avatar
    Poziom 36  
    No i niestety problemu nadal nie rozwiązałem z małym ale : udało mi się zebrać dość pokaźną ilość kat SD/MMC i MMCmobile i je przetestować na tym samym programie:
    na 12 typów kart 5 daje poprawną odpowiedź i jest możliwość pracy z kartami - reszta odpowiada błędem 1 "error occurred in the low level disk I/O layer"
    Wydaje mi się że jest to jednak wina samych kart:
    Kingston SD 2GB działa ok ,MMC mobile 1GB też ok (małe MMC 32,64 128MB OK) ale karty np Lexara 2GB czy Transcended SDHC 16GB już nie , odziwo Kingston MMC mobile 256Mb też daje błąd.
  • #5 13163144
    ferdezo
    Poziom 9  
    Z tym przykładem chyba coś jest nie tak
    Zrobiłem tak samo jak kolega tzn też tylko z tego przykładu pozmieniałem według swoich połączeń z atmegą32. Tylko że u mnie problem polega na wcześniejszej fazie a mianowicie
    nie chcę otworzyć pliku. Po f_mount() kiedy próbuje otwierać plik f_open zawsze jest FR_NOT_READY. Wszystko sprawdzałem 20 razy...
    Próbowałem kopiować pliki z innego sampla i nic to samo. Konfigurować między innymi ten mmc to samo. Już nie mówię o takich prostych operacjach jak używanie disk_inicialize() przed f_moint i po.

    Co ciekawe f_mount() zawsze zwraca FR_OK nawet jak nie ma karty, gdyby ktoś chciał się tym też sugerować.

    Minęło już trochę dni może rozwiązałeś sprawę do końca ? :)
  • #6 13167267
    avatar
    Poziom 36  
    I tak i nie - znalazłem inna biblioteke - przykłady zawarte w FatFs są nieprawidłowe.
    A doszedłem do tego z analizatorem stanow logicznych - każdy z przykładów ktore zawiera w sobie FatFS na AVR nie wysyła tych min 73 cykli przed rozpoczęciem komunikacji z kartą z tąd jedne działają a inne nie okazuje się że moje "działające" karty da się odczytać niezależnie ile cykli clk im się poda i tak karta odpowie.
    A i sam sygnał clk nie jest stabilny - lata sobie pare uS w tą a pare w tą .. oczywiście mówimy o samych gołych niezmienionych przykładach
  • #7 13360560
    Maureli73
    Poziom 14  
    ferdezo: też to zauważyłem że f_mount zawsze zwraca FR_OK, u mnie funkcja find_volume zwraca FR_NOT_READY, ale nie zawsze, raz po raz da się zapisać plik na karcie.

    avatar: możesz coś więcej napisać o tej innej znalezionej bibliotece? :)
REKLAMA