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

STM32F429 + RA8875 7 800x480: Podłączenie przez FMC z SDRAM?

maczo_m 17 Sie 2019 12:22 1950 6
REKLAMA
  • #1 18119884
    maczo_m
    Poziom 11  
    Posty: 12
    Ocena: 3
    Witam.
    Mam kilka pytań związanych z podłączeniem wyświetlacza. Korzystam z modułu STM32F429 Discovery i chciałbym do niego podłączyć wyświetlacz z kontrolerem RA8875, to jest wyświetlacz 7 calowy, i ma on rozdzielczość 800 na 480 pikseli. Kontrolerem RA8875 można sterować albo przez SPI, albo używając 16 linii danych + sygnały sterujące CS, RS ,RD, WR... (interfejs 8080/6800).

    Z wyświetlacza korzystam już od jakiegoś czasu, ale tylko w trybie tekstowym i po SPI co działa dość wolno, a zależy mi na wyświetlaniu grafiki z prędkością przynajmniej kilku klatek na sekundę. Zależy mi też na tym żebym mógł jednocześnie korzystać z pamięci SDRAM w którą jest wyposażony moduł STM32F429 Discovery.

    Rozważam podłączenie wyświetlacza pod magistrale FMC lub LTDC.
    Moje pierwsze pytanie to czy można skonfigurować interfejs FMC tak aby jednocześnie móc korzystać z w wyświetlacza i pamięci SDRAM?

    Podłączałem już kiedyś mniejsze wyświetlacze pod FMC wraz z pamięcią, ale wtedy miałem pamięć SRAM (IS62WV51216BLL) i miałem wtedy konfiguracje FMC właśnie dla pamięci statycznej.

    Moje drugie pytanie to czy wyświetlacz z interfejsem 8080/6800 mogę podłączyć do STM32F429 pod LTDC? LTDC wydaje się lepszą opcją dla wyświetlacza niż FMC, jednak nie wiem jak miałbym podłączyć mój wyświetlacz z kontrolerem RA8875. Magistrala LTDC ma oprócz linii danych dla każdego koloru, sygnały sterujące: LCD_VSYNC, LCD_HSYNC, LCD_CLK, LCD_DE. Dokumentacja od STM32 nie wspomina o możliwości podłączenia wyświetlacza z interfejsem 8080/6800 pod LTDC ale może jest jakaś możliwość, np. podłączyć 16 linii danych pod LTDC a sygnałami CS, RS ,RD, WR sterować bardziej programowo?

    Wszystkie informacje które dotąd udało mi się w necie znaleźć dotyczą, albo podłączenia takiego wyświetlacza pod FMC, ale nie jest nic wspomniane o korzystaniu z pamięci SDRAM, albo podłączenia różnych wyświetlaczy pod LTDC, ale z wykorzystaniem linii LCD_VSYNC, LCD_HSYNC.

    Pozdrawiam i za wszelkie odpowiedzi bardzo dziękuje.
  • REKLAMA
  • Pomocny post
    #2 18120015
    adamusx
    Poziom 27  
    Posty: 977
    Pomógł: 94
    Ocena: 28
    Cześć,
    Tutaj
    https://www.st.com/content/ccc/resource/technical/document/application_note/group0/25/ca/f9/b4/ae/fc/4e/1e/DM00287603/files/DM00287603.pdf/jcr:content/translations/en.DM00287603.pdf jest to dość dobrze wyjaśnione.

    Generalnie LTDC to taki interfejs STM potrafiący sterować bezpośrednio wyświetlaczami bez wbudowanego kontrolera (czyli bezpośrednio przez magistralę RGB 24 bit + sygnały sterujące).

    Jeśli twój wyświetlacz ma wbudowany kontroler i masz w nim dostępną magistralę 8080/6800 to należy użyć F(S)MC. Oczywiście można próbować podłączyć wyświetlacz bezpośrednio sterując przez RGB, ale musiałbyś oddzielić go od płytki sterownika, poza tym potrzebne są parametry wyświetlacza do poprawnego skonfigurowania czasów dla kontrolera LTDC. Gra nie warta świeczki.

    Osobiście używałem wyświetlacza 7" 800x480 z kontrolerem RA8875 sterowanym z STM32F4 przez FMC i chodziło to naprawdę szybko.
    Dodatkowo można połączyć FMC z DMA, wówczas komunikacja jest jeszcze szybsza i nie blokuje pracy procesora podczas przesyłania danych do LCD. Spokojnie 25 ramek / sek wyciągniesz przy takiej konfiguracji.
    Nie ma też problemu by FMC w STM32 komunikowało jednocześnie z zewnętrzną pamięcią RAM lub FLASH, zresztą są przykłady od STM dla ich evalboardów.
  • REKLAMA
  • #3 18120026
    osctest1
    Poziom 21  
    Posty: 451
    Pomógł: 36
    Ocena: 74
    LTDC właśnie służy do takiego "przemiatania" framebuffora wraz z odpowiednia konwersją do wyświetlacza.

    Taki wyświetlacz jak Twój obsługuje się przez kontroler pamięci FMC.
  • REKLAMA
  • #4 18120188
    maczo_m
    Poziom 11  
    Posty: 12
    Ocena: 3
    Cytat:
    Generalnie LTDC to taki interfejs STM potrafiący sterować bezpośrednio wyświetlaczami bez wbudowanego kontrolera


    Rozumiem, jednak trochę zagadką jest dla mnie ten mały wyświetlacz w który wyposażony jest sam moduł STM32F429 Discovery, tym wyświetlaczem steruje się chyba właśnie przez LTDC a jednak wyświetlacz kontroler ma (ILI9341). Dodatkowo kontroler ten należy najpierw skonfigurować przez SPI co jeszcze bardziej wszystko kompiluje.

    Cytat:
    Jeśli twój wyświetlacz ma wbudowany kontroler i masz w nim dostępną magistralę 8080/6800 to należy użyć F(S)MC. Oczywiście można próbować podłączyć wyświetlacz bezpośrednio sterując przez RGB, ale musiałbyś oddzielić go od płytki sterownika, poza tym potrzebne są parametry wyświetlacza do poprawnego skonfigurowania czasów dla kontrolera LTDC. Gra nie warta świeczki.


    W takim razie dam sobie spokój z LTDC, rzeczywiście lepszym pomysłem będzie użycie FMC.
    Najważniejsze że będę mógł jednocześnie używać wbudowanej w moduł pamięci SDRAM bo właśnie tam chciałbym trzymać tablice z obrazem, który będę później wysyłał do wyświetlacza.

    Jeśli chodzi o DMA to było by super gdyby się udało, niestety nie mam z tym doświadczenia, bo konfiguracja DMA zawsze była dla mnie czarną magią :/
    Jak to należy skonfigurować? Bo jeśli sama tablica z danymi będzie w pamięci SDRAM podłączonej do FMC i wyświetlacz też będzie podłączony pod FMC, to chyba DMA musi przesyłać dane, tak jakby z pamięci do pamięci, tylko pod inny adres, a nie z pamięci do peryferia, tak jak to chyba najczęściej bywa.

    W reference manual od procka na stronie 307/308 znalazłem tabele DMA1/2 request mapping, w której są wymienione kanały DMA i jak rozumiem peryferia, które można pod to podpiąć, ale nie ma tam słowa o FMC .
  • Pomocny post
    #5 18120247
    osctest1
    Poziom 21  
    Posty: 451
    Pomógł: 36
    Ocena: 74
    maczo_m napisał:
    le nie ma tam słowa o FMC .
    No bo FMC po skonfigurowaniu to po prostu pamięć w przestrzeni adresowej - czyli po prostu piszesz lub czytasz do/z tego adresu. Czyli DMA memory to memory.

    Dla przykładu u mnie w projekcie teraz używam banku 1, 16 linii danych i szyny adresowej A2 jaki DC. Po sonfigurowaniu FMC

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


    Analogicznie jak chcę czytać. Używając DMA po prostu ustawiasz jedną z pamięci jako ten adres bez inkrementacji. I to wszystko.

    Oczywiście używając DMA musisz sobie dodać jakieś mechanizmy synchronizacyjne. Akurat w przypadku GUI użygie jakiego RTOS-a jest IMO najlepszym rozwiązaniem.
  • #6 18120413
    maczo_m
    Poziom 11  
    Posty: 12
    Ocena: 3
    ok, dziękuje za pomoc i cenne wskazówki, wieczorem zabiorę się za podłączanie wyświetlacza pod magistrale FCM.
  • REKLAMA
  • #7 18122955
    tmf
    VIP Zasłużony dla elektroda
    Posty: 14318
    Pomógł: 2090
    Ocena: 2203
    maczo_m napisał:
    Kontrolerem RA8875 można sterować albo przez SPI, albo używając 16 linii danych + sygnały sterujące CS, RS ,RD, WR... (interfejs 8080/6800).

    Z wyświetlacza korzystam już od jakiegoś czasu, ale tylko w trybie tekstowym i po SPI co działa dość wolno, a zależy mi na wyświetlaniu grafiki z prędkością przynajmniej kilku klatek na sekundę.

    Ten kontroler ma akcelerator, który m.in. przyśpiesza operacje blokowe - kopiowania obszarów pamięci. SPI będzie wąskim gardłem, ale można wykorzystać nieużywaną pamięć wyświetlacza. Po prostu wcześniej elementy grafiki ładujesz do tego obszaru VRAM, a następnie przy pomocy instrukcji kopiowania bloków przerzucasz je na widoczną część ekranu, co jest ultraszybkie. Oczywiście tryb równoległy i8080, daje kolejnego kopa. Ze względu na prostotę interfejsu można użyć interfejsu sprzętowego procka, lub zrobić to czysto softwarowo, tylko wtedy użycie DMA wymaga różnych tricków.

Podsumowanie tematu

✨ Użytkownik pyta o podłączenie wyświetlacza 7-calowego z kontrolerem RA8875 do modułu STM32F429 Discovery przez interfejs FMC, aby uzyskać lepszą wydajność w wyświetlaniu grafiki. Odpowiedzi sugerują, że interfejs LTDC nie jest odpowiedni, ponieważ RA8875 obsługuje interfejs 8080/6800, a FMC jest lepszym rozwiązaniem, umożliwiającym jednoczesne korzystanie z pamięci SDRAM. Użytkownicy dzielą się doświadczeniami z konfiguracją FMC oraz wykorzystaniem DMA do szybkiej komunikacji między pamięcią a wyświetlaczem. Wskazówki dotyczą również użycia VRAM w kontrolerze RA8875 do przyspieszenia operacji graficznych.
REKLAMA