2024-10-20 09:59 AM
I am working with a custom board I designed using this display(LINK) They provide init codes on the product page that I have integrated into my project but they do not provide any any porch, timing or polarity information. I first setup LTDC and the DSI host and was able to display a solid color on the display by generating a frame buffer in code and setting each pixel. I then moved on to integrating touchGFX and was also able to get that working fairly easily but the display is mirrored on the x-axis as shown here:
The display is using a ST7701s controller, I found the MADCTL register in the datasheet that I believe should be able to mirror the display but I am not getting the expected output.
Here is how I am writing to this register
HAL_DSI_ShortWrite(&hdsi, 0, DSI_DCS_SHORT_PKT_WRITE_P1, 0x36, 0x10);
And this is the output after doing so
I have verified the ability to write to this register by setting the "BGR" bit to a 1 and the display will swap the red and blue channels, I am not sure where to even start with troubleshooting this issue.
Solved! Go to Solution.
2024-11-05 04:20 AM
The init code sets the SS bit in SDIR. This will flip on the X direction. Remove that code, and you should be fine.
2024-10-20 11:24 AM
Check if you can fix on the STM32 side, and how it renders the frame buffer.
Or the top/bottom is not well defined, controller supports 480x864, not 480x480
ie LNESET = (480 / 8) - 1
ML is used to flip vertically
2024-10-20 12:43 PM
I am very new to working with displays, especially DSI ones, thank you for the response. I am setting LNESET as follows per the recommended init codes provided from the the display supplier
uint8_t InitcodesC0[] = { 0x3B, 0x00 };
HAL_DSI_LongWrite(&hdsi, 0, DSI_DCS_LONG_PKT_WRITE, sizeof(InitcodesC0), 0xC0, InitcodesC0);
(0x3B + 1) * 8 = 480 that seems to be correct.
I have also tried to change the SDIR (0xC7) register to SS=”1” source form 479 to 0, that makes no visible difference.
I also changed the vertical porch settings in cubeMX to match the values that I pulled from the init codes for PORCTRL (0xC1) register (0x10, 0x3C). I set VBP to 16 and VFP to 12. I have no idea what I should be using for horizontal porch settings.
Could this be an issue with the porch settings I am using?
2024-10-30 06:30 PM
I am still struggling to solve this issue. I could really use some advise from someone familiar with DSI displays.
2024-11-05 04:20 AM
The init code sets the SS bit in SDIR. This will flip on the X direction. Remove that code, and you should be fine.
2024-11-09 07:03 PM
Thank you for your help, SDIR did turn out to be the correct register to control the screen being mirrored and I had previously tried setting it to both 0x00 and 0x04 with no change. I got an updated init code file from the display reseller that did work correctly, when I examined it for changes I also found register 0xCC to be changed to 0x18 vs the first set of init codes that had 0xCC set to 0x10. I have not found any documentation on what that register is for. I am going to mark this as solved and hopefully if anyone runs into this issue they can try changing the 0xCC register.