Dłubię sobie projekt miernika-testera na STM32 z wyświetlaczem TFT 320x240. Do tej pory używałem wyświetlacza 2,5" ze sterownikiem ILI9341 i magistralą 8-bitową i działało to całkiem nieźle.
Ze względów mechanicznych potrzebuję wyświetlacza, który ma złącza tylko po jednej stronie i wybrałem odrobinę większy 2,8" dedykowany dla Raspberry Pi pracujący na SPI. Założenia były takie że taki popularny projekt jak RPI nie zniknie szybko z rynku a mając w swoim projekcie złącze w takim standardzie łatwo mi będzie w razie potrzeby przesiąść się na inny.
Siedzę nad nim już 3 dzień i nie mogę nic wyświetlić. Bez problemów dogadałem się (też po SPI) z zamontowanym na płytce sterownikiem ekranu dotykowego ADS7846 a ze sterownikiem wyświetlacza nie mogę.
Nigdzie nie jest napisane wprost jaki to ma sterownik ale w różnych bibliotekach np. UTFT czy Adafruit wyświetlacze 2.8" obsługiwane się przez ten sam ILI9341. Na stronach producenta jest sporo opisów jak to uruchomić pod RPi, ale sprowadza się to do wgrania skompilowanego image, natomiast nie udało mi się dokopać do kodu obsługi. Gdy przeglądam taki image to jest tam trochę tekstów i szukając np "320x240" obok wyskakuje mi "ILI9340". To wygląda na starszą wersję ILI9341, ale porównując polecenia i tryby pracy nie znalazłem różnic.
Przebiegi oglądane na oscyloskopie są takie jak w dokumentacji sterownika. Polaryzacja i poziom zegara jest taka sama. Z prędkością nie przesadzam (fPCLK/32). Kod obsługi SPI jest banalny. Chodzi mi na tym ekran dotykowy i akcelerometr
Sterownik obsługuje 4 rodzaje transmisji szeregowych po SPI: 2 z nich używają lini RS, pozostałe 2 dodatkowego, 9-ego bitu. Ponieważ wyświetlacz ma wyprowadzoną linie RS, więc zakładam że należy jej używać zamiast nieosiągalnych na STM32 transmisji 9-bitowch. Kolejny rodzaj transmisji to wykorzystanie osobnych linii do odczytu i zapisu lub jednej linii przełączanej. Ponieważ linia MOSI jest współdzielona ze sterownikiem ekranu dotykowego, który ma dedykowaną linię MISO a wyświetlacz jej nie ma więc zakładam że obsługa wyświetlacza jest w trybie write_only.
Próbowałem danych inicjalizacyjnych z dwu różnych bibliotek ale wyświetlacz nie chce ruszyć. Może ktoś z Was już się tym bawił?
Poniżej są moje procedury komunikacyjne w obu wersjach (SPI/8-bit). Na razie ręcznie piszę do SPI, docelowo gdy ruszy chcę wykorzystać DMA przynajmniej do transferów większej ilości danych:
Ze względów mechanicznych potrzebuję wyświetlacza, który ma złącza tylko po jednej stronie i wybrałem odrobinę większy 2,8" dedykowany dla Raspberry Pi pracujący na SPI. Założenia były takie że taki popularny projekt jak RPI nie zniknie szybko z rynku a mając w swoim projekcie złącze w takim standardzie łatwo mi będzie w razie potrzeby przesiąść się na inny.
Siedzę nad nim już 3 dzień i nie mogę nic wyświetlić. Bez problemów dogadałem się (też po SPI) z zamontowanym na płytce sterownikiem ekranu dotykowego ADS7846 a ze sterownikiem wyświetlacza nie mogę.
Nigdzie nie jest napisane wprost jaki to ma sterownik ale w różnych bibliotekach np. UTFT czy Adafruit wyświetlacze 2.8" obsługiwane się przez ten sam ILI9341. Na stronach producenta jest sporo opisów jak to uruchomić pod RPi, ale sprowadza się to do wgrania skompilowanego image, natomiast nie udało mi się dokopać do kodu obsługi. Gdy przeglądam taki image to jest tam trochę tekstów i szukając np "320x240" obok wyskakuje mi "ILI9340". To wygląda na starszą wersję ILI9341, ale porównując polecenia i tryby pracy nie znalazłem różnic.
Przebiegi oglądane na oscyloskopie są takie jak w dokumentacji sterownika. Polaryzacja i poziom zegara jest taka sama. Z prędkością nie przesadzam (fPCLK/32). Kod obsługi SPI jest banalny. Chodzi mi na tym ekran dotykowy i akcelerometr
Sterownik obsługuje 4 rodzaje transmisji szeregowych po SPI: 2 z nich używają lini RS, pozostałe 2 dodatkowego, 9-ego bitu. Ponieważ wyświetlacz ma wyprowadzoną linie RS, więc zakładam że należy jej używać zamiast nieosiągalnych na STM32 transmisji 9-bitowch. Kolejny rodzaj transmisji to wykorzystanie osobnych linii do odczytu i zapisu lub jednej linii przełączanej. Ponieważ linia MOSI jest współdzielona ze sterownikiem ekranu dotykowego, który ma dedykowaną linię MISO a wyświetlacz jej nie ma więc zakładam że obsługa wyświetlacza jest w trybie write_only.
Próbowałem danych inicjalizacyjnych z dwu różnych bibliotek ale wyświetlacz nie chce ruszyć. Może ktoś z Was już się tym bawił?
Poniżej są moje procedury komunikacyjne w obu wersjach (SPI/8-bit). Na razie ręcznie piszę do SPI, docelowo gdy ruszy chcę wykorzystać DMA przynajmniej do transferów większej ilości danych:
Kod: C / C++