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

[C] [C][STM32F429] - Konfiguracja kości SDRAM W9825G6JH-6 nie działa poprawnie

A.T. 24 Lut 2015 00:03 2184 21
REKLAMA
  • #1 14471149
    A.T.
    Poziom 20  
    Posty: 538
    Pomógł: 5
    Ocena: 70
    Witam
    mam dziwny problem. Mam dołączoną kość SDRAMu (W9825G6JH-6) do STM32F429. Kość konfiguruję następująco:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Podłączenie pamięci zostało sprawdzone, jest poprawne. Próbuję przechowywać w niej ramkę obrazu z kamery. W pamięci zapisuje się tylko pierwsza ramka. Kolejne, które ją mają nadpisać nie zapisują się. O co tu może chodzić? Tak jakbym potrafił tylko 1 raz zapisać do pamięci. Po resecie i ponownej konfiguracji pamięci mogę zapisać znowu tę jedną ramkę. Dodam, że pobieranie obrazu z kamery jest poprawne, na pamięci ram procesora działa ok.
  • REKLAMA
  • #2 14472017
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #3 14472350
    A.T.
    Poziom 20  
    Posty: 538
    Pomógł: 5
    Ocena: 70
    Ramka z kamery ma 160*120*2 = 38400 bajtów. Poniżej pokazuję strukturę jaką chcę właśnie przechowywać w pamięci.

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


    gdzie _fb_base = 0xD0000000

    No i ramkę obrazu wrzucam za pomocą DMA z DCMI do tego bufora pixels[].
  • #5 14472383
    A.T.
    Poziom 20  
    Posty: 538
    Pomógł: 5
    Ocena: 70
    _fb_base jest zadeklarowane a skrypcie linkera jako zmienna. No i ja pobieram jej adres.
  • #6 14474718
    A.T.
    Poziom 20  
    Posty: 538
    Pomógł: 5
    Ocena: 70
    A dobrze są ustawione opcje odpowiadające za linie adresowe? Mógłby ktoś je sprawdzić?
  • REKLAMA
  • REKLAMA
  • #8 14475925
    A.T.
    Poziom 20  
    Posty: 538
    Pomógł: 5
    Ocena: 70
    Poprawiłem obydwa błędy, jednak w dalszym ciągu to samo:/
  • #10 14476047
    A.T.
    Poziom 20  
    Posty: 538
    Pomógł: 5
    Ocena: 70
    Tutaj konfiguracja DMA dla przesyłania DCMI->SDRAM(FMC):
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    A tutaj fragment funkcji którą wywołuję za każdym razem gdy chce przsłać kolejną ramkę obrazu:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Co do zmiany danych w SDRAM bez DMA to już sprawdzam.

    Dodano po 21 [minuty]:

    Masz rację, gdy ręcznie zapiszę coś do bufora znajdującego się w tym SDRAMie to działa. Jednak nadal nie widzę błędu w konfiguracji DMA (konfiguracja powyżej).
  • #11 14476315
    Konto nie istnieje
    Poziom 1  
  • #12 14476338
    A.T.
    Poziom 20  
    Posty: 538
    Pomógł: 5
    Ocena: 70
    Obsługuję:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #13 14476398
    Konto nie istnieje
    Poziom 1  
  • #14 14476828
    A.T.
    Poziom 20  
    Posty: 538
    Pomógł: 5
    Ocena: 70
    Stan DMA tzn? Jakiś rejestr statusowy? Dalej nie rozumiem czym może się różnić DMA dla pamięci SRAM wewnętrznej, a dla SDRAM? I dlaczego za pierwszym razem DMA bez problemu kopiuje do SDRAMu jedną ramkę? Co się może później zmieniać?
  • #15 14478018
    Konto nie istnieje
    Poziom 1  
  • #16 14478147
    A.T.
    Poziom 20  
    Posty: 538
    Pomógł: 5
    Ocena: 70
    Zrobiłem jak napisałeś, żadnego przerwania od błędu nie wyrzuca. Jedynie Transfer complete i Half Transfer complete. DMA ciągle przesyła, nie zatrzymuje się:/
  • #17 14478272
    szczywronek
    Poziom 28  
    Posty: 678
    Pomógł: 142
    Ocena: 217
    Uprzedzam - strzelam ;) W RM jest zaznaczone, aby po wyzerowaniu bitu EN w DMA_SxCR odczytać go i potwierdzić że jest wyzerowany przed dalszą konfiguracją DMA. Cytat:
    Ref. Manual napisał:
    [...]then read this bit in order to confirm that there is no ongoing stream operation. Writing this bit to 0 is not immediately effective since it is actually written to 0 once all the current transfers have finished. When the EN bit is read as 0, this means that the stream is ready to be configured. It is herefore necessary to wait for the EN bit to be cleared before starting any stream configuration.
  • #18 14478345
    A.T.
    Poziom 20  
    Posty: 538
    Pomógł: 5
    Ocena: 70
    Dodałem linijkę:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    jednak nic ona nie zmieniła:/ Dziękuję, że ciągle nad tym myślicie.
  • #19 14478888
    szczywronek
    Poziom 28  
    Posty: 678
    Pomógł: 142
    Ocena: 217
    Hm. Czyli podsumowując, jeśli bufor jest w SRAM'ie stm'a to wszytko działa ok, a po zmianie tylko (?):
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
    na zewnętrzny sdram się chrzani?
    Podglądałeś adres bufora - czy na pewno jest taki jak powinien być, czy coś go nie nadpisuje - może stos się kończy i stąd cuda?

    Nie pojawiają się żadne mądre pomysły więc postrzelam sobie dalej - spróbuj uprościć konfigurację DMA - wyłączyć wszelkie BURST'y, FIFO'a itp...
  • #20 14478944
    A.T.
    Poziom 20  
    Posty: 538
    Pomógł: 5
    Ocena: 70
    Tak dokładnie. Zmieniam tylko wartość _fb_base z 0x20000000 na 0x0xD0000000, a do DMA2_Stream1->M0AR zawsze wpisuję (uint32_t) fb->pixels. Obydwa stosy ustawiłem już na ponad 20k. Niestety muszę teraz wyjść, dlatego przetestuję to co napisałeś jak wrócę, ok. 14 i dam znać.
  • #21 14480635
    A.T.
    Poziom 20  
    Posty: 538
    Pomógł: 5
    Ocena: 70
    Niestety nic nie pomogło:/
    Wyświetlacz LCD na sterowniku SSD1289 podpięty pod inny bank FMC jako pamięć SRAM chyba nie może zakłócać transmisji, prawda?
  • #22 14807752
    nowydamian
    Poziom 10  
    Posty: 43
    Ocena: 1
    Masz automatyczne przechwytywanie danych ???
    może spróbuj wyzwalać ramkę "ręcznie" ? po przez :
    DCMI->CR |= DCMI_CR_CAPTURE;
    i czekać na koniec :
    while(DCMI->CR & 0x1);

Podsumowanie tematu

✨ W dyskusji poruszany jest problem z konfiguracją pamięci SDRAM W9825G6JH-6 podłączonej do mikrokontrolera STM32F429. Użytkownik opisuje, że pomimo poprawnej konfiguracji, występują trudności z zapisem danych do pamięci. Inni uczestnicy sugerują sprawdzenie opóźnień w konfiguracji DMA oraz poprawności adresów pamięci. Wskazano również na konieczność monitorowania stanów przerwań DMA oraz na możliwość wystąpienia błędów w konfiguracji linii adresowych. Użytkownik testuje różne ustawienia, w tym wyłączenie trybu FIFO i BURST w DMA, ale problem nadal występuje. Ostatecznie zasugerowano ręczne wyzwalanie przechwytywania danych z DCMI.
Wygenerowane przez model językowy.
REKLAMA