lovyan03 / LovyanGFX

SPI LCD graphics library for ESP32 (ESP-IDF/ArduinoESP32) / ESP8266 (ArduinoESP8266) / SAMD51(Seeed ArduinoSAMD51)
Other
1.14k stars 204 forks source link

RA8875 with Adafruit Display does not work #588

Closed tobi807 closed 2 months ago

tobi807 commented 3 months ago

Carefully written Issues are more likely to be given priority. 丁寧に記述された報告は優先して対応される可能性が高くなります。

Environment ( 実行環境 )

Problem Description ( 問題の内容 )

Expected Behavior ( 期待される動作 )

Show something, e.g. a circle or a rect. Later I would like to have it working with lvgl.

Actual Behavior ( 実際の動作 )

display stays white and draws nothing at all.

I use the Adafruit RA8875 together with an 5" Display and a ESP32 Module. The controller boots up than the display turns from black to white and thats it. I can manipulate the Brightness of the Backlight if I change line 55 in Panel_RA8875.cpp what indicates that the SPI Communication works.

   0x8b      , 1, 0x20, //Backlight brightness setting //Brightness parameter 0xff-0x00

I tried multiple settings (trial and error really) and drawing methods (draw dirctly and with sprites) but nothing works. If I use the AdafruitGFX Library on the exact same setup it works perfectly fine.

If you need any additional information I'll give my best to provide them. I just dont know how to narrow down the problem

aufbau The setup. The wires from the esp32 to the RA8875 Board run on the back side.

Code to reproduce this issue ( 再現させるためのコード )

main.cpp platformio.ini SPI Communication

additional information

Adafruit Driver Board circuit diagramm of driver board Adafruit Display

SPI oscilloscope snippet

I analyzed the signals directly on the RA8875 driver board

Pico Scope file: lovyan_spi_comm.zip

overview spi1 magnified spi2

decoded Data MOSI Data MISO
80 88 FF FF
00 0B FF FF
80 89 FF FF
00 01 FF FF
80 04 FF FF
00 82 FF FF
80 15 FF FF
00 02 FF FF
80 16 FF FF
00 03 FF FF
80 17 FF FF
00 01 FF FF
80 18 FF FF
00 03 FF FF
80 1B FF FF
00 0F FF FF
80 1C FF FF
00 00 FF FF
80 1D FF FF
00 0E FF FF
80 1E FF FF
00 06 FF FF
80 1F FF FF
00 01 FF FF
80 8A FF FF
00 80 FF FF
80 8A FF FF
00 81 FF FF
80 8B FF FF
00 7F FF FF
80 01 FF FF
00 80 FF FF
80 14 00 64 FF FF FF FF
...
tobi807 commented 2 months ago

tl;dr just add

0xc7      , 1, 0x01,  // set Extra General Purpose IO Register to Output (used to enable Display by Adafruit)

to

const uint8_t* Panel_RA8875::getInitCommands(uint8_t listno) const

inside Panel_RA8875.cpp right above PWM Setting.

long Version The issue trouble me and left me no rest so I kept investigating. Aaaand after a few more hours I found the Problem! And, also as expected, it was something trivial but very hard to find. Adafruit uses on their RA8875 Board the GPIOX to Enable/Disable the Display (tiny ON/OFF label on Pin 46 in the schematic). These GPIO must be set to Output, otherwise the Display wont get the Signal to turn on. So just one register write solved the Problem.

Regards, Tobi