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

FatFS Atmega32 [c] Błędy kompilacji

oskar777 11 Lis 2011 18:12 4746 21
  • #1 10127133
    oskar777

    Poziom 26  
    Witam Was. Chciałem uruchomić sobie FatFS ale już na początku niepowodzenie :(.
    Do rzeczy:
    Pobrałem pliki z strony
    http://elm-chan.org/fsw/ff/00index_e.html
    Dokładnie http://elm-chan.org/fsw/ff/ffsample.zip
    Skopiowałem wszystko do swojego katalogu.
    Dodałem pliki do Makefile czyli mam (skopiowałem to z example makefiles, więcej nic nie zmieniałem)
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Początek projektu wygląda tak, bo jeszcze nic nie bawiłem się z próbą zapisu / odczytu karty SD

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    I teraz błędy:
    jak mam dodany #include "uart.h" to błędy są takie
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    jak mam odznaczony uart.h z projektu i uart.c z makefile to mam
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Inne pliki z FatFS też tak mają czyli mmc.c cc932_avr.c bo jak mi się wydaje są potrzebne do działania SD.

    Ma ktoś jakiś pomysł co może być nie tak?

    Będę wdzięczny za pomoc.

    Pozdrawiam
  • #2 10128814
    Piotrek_P
    Poziom 18  
    Co do UARTa to kompilatorowi rejestry się nie zgadzają. Wywal "0" w rejestrach UART a przede wszystkim sprawdź jakie ma M32.

    PP
  • #3 10129065
    drzasiek
    Specjalista CNC
    Czytaj błędy które Ci wywala kompilator i po kolei usuwaj przyczyny.
    Kompilator Ci mówi jaki błąd, mówi nawet gdzie on jest.
    Wystarczy tylko przeczytać i kliknąć na niego.
  • #4 10130323
    oskar777

    Poziom 26  
    FatFS na razie mnie przerósł, w sumie to atmege32 i mnie. Zajmuje mi ±60% a muszę inne rzeczy wstawić. Tak więc zacząłem się bawić Petitfat z kodem właśnie Kolegi Drzaśka
    link https://www.elektroda.pl/rtvforum/topic1917410-0.html
    Zmieniłem tak:
    zakomentowałem w pliku usi.c porty
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    nic jeszcze nie uruchamiałem, tzn zacząłem inicjalizacje karty z kodem
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    czyli minimum, by było jak najmniej czynników które mogą zakłócić mi kartę.
    Schemat jest tak jak na rysunku, opierając się na stronie projektu FatFS, być może tu jest problem.
    Sama atmega32 działa bez problemu.
    FatFS Atmega32 [c] Błędy kompilacji

    Samo nie działanie, objawia się chyba zawieszeniem atmegi.
    Np dam LCD_WriteText("ok"); przed samym mount i napis się wyświetli ale po mount nic się nie dzieje.
    Na schemacie zrobiłem pomiar napięć po wgraniu programu bez karty, z kartą jest tak samo. Programator był odłączony bo to te same linie.

    Co może być nie tak, może jest jakiś sposób by to sprawdzić albo coś muszę jeszcze zmienić?

    Pozdrawiam serdecznie.
  • #5 10130379
    drzasiek
    Specjalista CNC
    Tak z grubsza (nie sprawdzałem dokładnie) ale pierwsze co musisz zrobić to usunąć dzielnik napięcia na linii MISO(uc)-DO(karta) bo po co on tam potrzebny?
    To jest wejście Mastera, czyli uC.
    Podłącz bezpośrednio do uC(MISO-DO), jeśli będziesz miał szczęście to Ruszy Ci na takim dzielniku, jeśli nie to musisz dać mniejsze rezystory.
  • #6 10130930
    oskar777

    Poziom 26  
    Tylko ja mam atmege32 zasilaną 5V i nie mogę dać niższego napięcia. Brałeś to pod uwagę?

    Dodano po 3 [godziny] 19 [minuty]:

    Dzięki za tamtą informację.
    Zwarłem MISO z DO, układ nie działa, ale nie mam zawieszenia. Teraz dostaje błąd
    FR_NOT_READY. Czy coś jeszcze trzeba zmienić?
    Układ dokładnie to Atmega32L i kwarc 8MHz
    Jedynie co przychodzi mi do głowy to ustawienia w pliku mm.c
    w sekcji Card type flags (CardType) ale to tylko moje przypuszczenia.

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Dodatkowo daje podgląd płytki z SD ale tu nie powinno być problemów
    FatFS Atmega32 [c] Błędy kompilacji

    Pozdrawiam
  • Pomocny post
    #7 10131830
    drzasiek
    Specjalista CNC
    Tak.
    Ale kartę zasilasz 3.3V.
    MISO w atmedze to jest wejście, nie wyjście. A skoro wejście, to odczytujesz na nim poziom jaki wystawi Ci karta pamięci, którą zasilasz napięciem 3,3V.
    Więc na linii MISO będziesz miał 0 lub 3,3V.
    Układy tego typu jak Atmega poziom wysoki rozpoznają od ok 0.6 napięcia zasilania czyli dla zasilania 5V poziom wysoki jest od 3 V w górę.
    Dlatego podłączając bezpośrednio wyjście karty pamięci z wejściem uC nic nie uszkodzisz.
    Zaś podłączając w taki sposób jak masz teraz nie czytasz na linii MISO to co wystawia karta na linię DO (Data output) ale GND.

    Dodano po 17 [minuty]:

    Teraz możesz mieć problem ze zboczami.
    Dzielnik nie jest najlepszym rozwiązaniem, lepsze są konwertery napięć.
    Narazie spróbować możesz zmniejszyć maksymalnie zegar SPI.
    Jak nie pomoże, do dzielniki dobrać z rezystorów o mniejszych wartościach.
    Nie zmieniałeś nic w programie?
    Widzę ze schematu, że coś jeszcze korzysta z Portu B.
    PB0-PB3, nie widać dokąd idą te linie.
    Jeśli z nich korzystasz, to przy okazji ich konfiguracji nie przestawiłeś całego portu?
  • #8 10131921
    oskar777

    Poziom 26  
    Żebyśmy się dobrze zrozumieli R7 1kΩ jest zamieniony na zworkę a R8 3k3Ω jest odlutowany. Nie ma tego na schemacie ani na zrzucie PCB ale tak zrobiłem.
    Mogę jeszcze zrobić inne pomiary / zmiany / itd tylko muszę wiedzieć co.
  • #10 10132947
    oskar777

    Poziom 26  
    Niestety zmiana SPI nic nie pomogła zmieniałem wartość na próbę wszystkie możliwości czyli
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Co do dzielnika czym mam się kierować tzn jakie stany powinienem mieć na lini?
    Znalazłem w sumie kilka konfiguracji dla wartości rezystorów.
    Przedstawię je:


    link https://obrazki.elektroda.pl/74_1251558168.png
    R1 = 3k3Ω R2 = 1k8Ω napięcie z atmegi do SD daje mi
    Uwy= 5V * (1800 / 5100) = 1.7V
    druga:
    https://www.elektroda.pl/rtvforum/files-rtvforum/atmega_sd_1701.jpg
    Uwy = 5V * (2200 / 5200) = 2.1V

    Moja:
    Uwy = 5V * (1000 / 4300) = 1.1V

    Wydaje mi się że powinno być większe H więc 2.1V dobrze myślę?.
    Nie chce co chwila przelutowywać płytki bo się zaraz z nią pożegnam.

    Pozdrawiam

    Dodano po 1 [godziny] 9 [minuty]:

    Na razie wypróbowałem wersje z 3k3 i 2k2 ale nic to nie zmieniło, wieczorem spróbuję z 3k i 1k8 . Zostaje mi jeszcze próba z konwerterem napięć. Muszę tylko w google poszukać może coś znajdę.
    Gdzieś na elektrodzie był schemat ale nie mogę go znaleźć teraz :/
  • #11 10133299
    drzasiek
    Specjalista CNC
    Dlatego najpierw robi się prototyp, jeśli działa, dopiero potem właściwą płytkę.

    Nie kombinuj na chybił trafił z tymi rezystorami, pomyśl trochę.
    Kartę zasilasz napięciem 3,3V, uC 5 V.
    Tak dobierz rezystory, żeby napięcie na wyjściu dzielnika było zbliżone do 3,3V, z tym że lepiej jak jest ciut mniejsze niż jakby miało przekraczać.
    Te rezystory które teraz masz są niedopuszczalne.
    Z 5V otrzymujesz na wyjściu 3.84 V !!!
    Kartę zasilasz napięciem 3,3V. Jesteś pewien, że ona jeszcze żyje?
  • #12 10133365
    oskar777

    Poziom 26  
    Ok zrobię odpowiednie obliczenia, karta na szczęście żyje. Odezwę się jak najszybciej :).
  • Pomocny post
    #13 10133411
    drzasiek
    Specjalista CNC
    Pamiętaj żeby nie dać też za małych rezystorów, np po parę, pardziesiąt Ohm, bo obciążysz za bardzo bufory wyjściowe uC.
    Spróbuj też odłączyć programator, może on przeszkadza karcie.
    SPCR ustaw na 0x53.
  • #14 10133579
    oskar777

    Poziom 26  
    Niestety porażka kolejna, dałem rezystory 3k9 i 2k7 do masy, powinno mi to dać około 3V napięcia.
    Jutro dorwę oscyloskop i porobię pomiary może to coś komuś rozświetli z czym jest problem.
  • #17 10137248
    oskar777

    Poziom 26  
    Zrobiłem pomiary oscyloskopem ale nic się nie dzieje. Pomierzyłem napięcia przy dzielnikach 3k9 do masy i 2k7 do sygnału.
    Dodatkowo pomyliłem jedną rzecz, połączyłem bezpośrednio linię CS z SS.
    Jedyny plus tego był, że atmega się nie zawieszała. Teraz jak jest zwarte DO z MISO a reszta idzie przez dzielnik to niestety atmega zawiesza się od razu przy mount :(.


    Napięcia jakie są obecnie

    SCK (PB7) - 0.7V / CLK (karta SD) - 0.3V
    MISO (PB6) - 0.2V / DO (karta SD) - 0.2V
    MOSI (PB5) - 0V / DI (karta SD) - 0V
    SS (PB4) - 0V / CS (karta SD) - 0V

    Po wyjęciu karty
    MISO (PB6) - 0V / DO (karta SD) - 0V
    Reszta tak samo.

    Co może być nie tak, czy to rzeczywiście wina dzielników?

    Pozdrawiam
  • #18 10137367
    drzasiek
    Specjalista CNC
    oskar777 napisał:
    Dodatkowo pomyliłem jedną rzecz, połączyłem bezpośrednio linię CS z SS.

    To teraz ponownie sprawdź, czy karta jeszcze żyje.
    oskar777 napisał:
    Zrobiłem pomiary oscyloskopem ale nic się nie dzieje. Pomierzyłem napięcia przy dzielnikach 3k9 do masy i 2k7 do sygnału.

    Jak? Gdzie? Kiedy?
    Sama Inicjalizacja jest zbyt krótka, żebyś oscyloskopem cokolwiek zmierzył.
    Musiałbyś zrobić to w pętli, żeby wysyłało po SPI ciągle, wtedy zobaczysz co się dzieje.
  • #20 10145045
    oskar777

    Poziom 26  
    W scalakach niestety nadziei brak, układ się nie zawiesza ale karta nie chce się zamontować. Zrobię jutro dokładny schemat jak to podłączyłem i pokaże wam.
    Może inne czynniki wpływają na działanie?
    Mam kartę 2GB, system fat32 na karcie

    Znalazłem kilka chwil i zrobiłem pomiary, pomiary na sucho czyli piny (SCK, MOSI, MISIO, SS) nie były do niczego podłączone.

    jak wymuszę 1 na wyjściach albo 0 w kodzie, to na wyjściu z atmegi mam to co trzeba ale jak załaduję petit fat to mam na DI 4.9V a na reszcie 0.6V lub jeżeli była załadowana biblioteka petita, po inicjalizacji wymusiłem 1 w kodzie to na wyjściach pojawiało się 1.5V, które spadało do 0.6 jak palcem dotknąłem masy. Co może być nie tak?
  • #21 10176123
    oskar777

    Poziom 26  
    Ktoś ma jakiś pomysł co może być nie tak?
    Wpadłem jeszcze na pomysł jeden, gdzieś wyczytałem akurat do fatFS, że fatFS musi wiedzieć czy karta jest włożona, może od tego mam not ready?.

    Schemat podglądowy jest taki jak tu
    FatFS Atmega32 [c] Błędy kompilacji
    Wywaliłem tymczasowo wszystko co mogło by przyciemnić schemat.
  • #22 10278583
    Kolek
    Poziom 25  
    Sprawdzałeś może z inną kartą(najlepiej nową) ? Mnie udało się uszkodzić kartę w dość nietypowy sposób. Miałem już na ukończeniu moją własną obsługę SD, wszystko pięknie działało, mała zmiana i problemy z inicjalizacją (GO_IDLE_STATE ok, OCR ok i gdzieś przy SEND_IF_COND albo OP_COND problem) . Uruchamiałem wsteczne wersje ale to samo, sam się w tym pogubiłem. Chwilowo się poddałem, aż dorwałem nową kartę i zadziałało. Poprzednia karta musiała się uszkodzić po którymś z kolei przypadkowym pozostawieniu jej w gnieździe w czasie programowania uK (dzielniki rezystorowe i DO karty bezpośrednio z MISO). Uszkodzenie jest dość nietypowe:
    karta nie działa: w moim układzie, w czytnikach wewnętrznych dwóch laptopów
    karta działa : w zewnętrznym czytniku i w aparacie
    Prawdopodobnie laptopy korzystają z SPI przy komunikacji (co jest trochę dziwne), a aparat jako że działa po SDbus prawdopodobnie radzi sobie jakoś z tym uszkodzeniem. Dodam jeszcze że zauważyłem dużo wolniejsze działanie karty w aparacie, nie testowałem jej prędkości.
REKLAMA