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.

XMega 128A3U i płytka Extrino - Brak inicjalizacji karty mikroSD

wolderb 29 Lip 2016 23:02 768 1
  • #1 29 Lip 2016 23:02
    wolderb
    Poziom 9  

    Witam wszystkich,
    Próbuję uruchomić kartę mikro SD na płytce extrino od Leona,
    Mam książki Pana Tomasza Francuza i przerabiam przykład "Inicjalizacja" z katalogu KartySD. Książka "AVR Układy peryferyjne". Używam Atmel Studio 7.
    Uruchomiłem przykład na płytce DIL64 (także od Leona). Działa w trybie SPI.
    Ponieważ docelowo będę potrzebował SPI_USART sięgnąłem po płytkę extrino. Na tej płytce gniazdo karty uSD połączone jest następująco: CLK (portC,pin5), MOSI(portC, pin7), MISO(portC, pin6)oraz CS (portE, pin3). Schemat płytki extrino załączę.
    Wprowadziłem zmiany w funkcji SPI_SD_CS polegające na zmianie

    Kod: c
    Zaloguj się, aby zobaczyć kod

    W main.c dodałem wpisy:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Dodałem wpisy dla wyprowadzenia CLKper na pin7 portE.
    Dodałem także:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    żeby spróbować w samym SPI (wtedy usuwałem też defincję SPI_USART z toolchain/symbols),
    Do zasilania na płytce dopiąłem kondensator 47uF/16V, płytke zasilam z chińskiej zasiłki 9V/850mA, karty uSD sprawdzone wcześniej w płytce DIL64 jedna 2GB i druga nowsza 32GB, w kompie tez działają,
    Nic więcej nie zmieniałem. Gniazda na płytce dla opamp, i2cmem, spi mem i digpot są puste.
    Śledziłem w symulatorze uruchomianie programu, szczególnie w czasie konfiguracji portów, usartu aż do pętli while (1) i funkcji udi_cdc_is_rx_ready. Następnie przesuwałem wskaźnik debugowania do void Cmd_InitSD(char *param)
    i kontynuowałem debugowanie.
    Przyznam, że wcześniej omijałem sysclk_init() i udc_start() za pomocą StepOver.
    Symulator pokazuje wartość zmiennej ret zero, ta zmienna lokalna w funkcji SD_CardInit i jeśli jest różna od 1, a tu wynosi zero to powoduje wystąpienie komunikatu "Nie udało się zainicjować karty" i taki komunikat w istocie się pojawia.
    Po podłączeniu płytki do kompa, pojawia się port wirtualny, łączę się z terminala, wysyłam Init i po pół sekundzie lub szybciej dostaję komunikat jw.
    Nurtuje mnie także sprawa rejestru DATA należącego do USARTC1,
    Funkcja SPI_RW_Byte(0xff) używana m.in. do wysyłania bajtu podczas deaktywacji lub inicjalizacji karty SD. Podczas symulacji w tym rejestrze ani na moment nie pojawiają się bity.
    Flaga DREIF jest ustawiona, wg Manuala oznacza ona, że rejestr jest pusty i gotowy na przyjęcie danych do wysłania. wg manuala wpisanie danych do rejestru czyści flagę DREIF. Ale ona jest ustawiona cały czas. Zmienia się rejestr procesora R24 na wartość 0xff. O ile doczytałem i pamiętam dobrze, zapisanie rejestru DATA portu USART powoduje uruchomienie zegara SCK i wysyłanie bitów na kolejnych zboczach. W symulatorze nie widać bitów w DATA, niezmiennie są zera.
    Mimo to włączyłem oscyloskop i ustaliłem, że po wysłaniu komendy Init w terminalu na pinie C5 (SCK) pojawia się przebieg prostokątny o częstotliwości jakieś 370kHz, czyli wygląda ok (na zdjęciu ). W jednym pomiarze uchwyciłem około 130kHz,w innym 290kHz. Nie wiem czemu przypisać te różnice.
    Jednak problem główny pozostaje i karty nie inicjuje ani w SPI ani w SPI_USART, a w mojej głowie się powiększa mętlik. :?:

    Dodam jeszcze, że wyprowadziłem na portEpin7 CLKper i mam tam przebieg ok. 24MHz i jakieś 1,5V amplitudy. I jest najbliższy trójkątowi, myślałem że będzie bliższy prostokątowi. Ale to na marginesie.
    Czytałem recenzję płytki extrino autorstwa Pana Tomasza Francuza lecz nie ma tam szczegółowych informacji na temat działania przykładów z kartami SD.
    Może ktoś miał do czynienia z takimi problemami? Może ktoś z forum mógłby doradzić co zrobić.
    Dzięki z góry. Bogdan
    ps.Jest już późno ale mam nadzieję, że nic nie pokręciłem.
    zdjęcie
    XMega 128A3U i płytka Extrino - Brak inicjalizacji karty mikroSD

    Edit:
    Przyznam że nic mnie tak dotychczas w tym roku nie zaskoczyło jak brak odpowiedzi.
    Podejrzewam, że przyczyną są wakacje. Niemniej temat pozostaje dla mnie aktualny.
    Edit:
    Wróciłem do tematu po przerwie spowodowanej chorobą i rehabilitacją.
    Rozwiązałem też problem. Jeśli ktoś będzie zainteresowany, to proszę o wiadomość.

    0 1
  • #2 27 Sty 2017 23:18
    wolderb
    Poziom 9  

    Problem rozwiązałem sam.

    0