Quantcast
Channel: Raspberry Pi Forums
Viewing all articles
Browse latest Browse all 8035

Device Tree • SPI Initialization & Device Tree for ST7701S Hybrid SPI+RGB Panel on Raspberry Pi

$
0
0
I am currently working with a 3.97-inch 480×800 IPS display using the ST7701S driver IC, which supports a hybrid SPI + RGB (DPI) interface.

My target platform is a Raspberry Pi 3 Model B+ running Raspberry Pi OS (Linux).

Current Status

I understand that the RGB DPI interface is handled by the Raspberry Pi kernel using a device tree overlay (.dtbo).

I am able to prepare or adapt a DPI/RGB overlay with correct resolution, timing, and pixel format.

However, the main challenge is initializing the ST7701S controller over SPI before enabling the RGB interface.

SPI Initialization Issue

I understand this sequence configures:

Command page selection / register unlocking

Power and voltage settings

Gamma and panel parameters

Sleep-out and display-on commands

On Raspberry Pi (Linux), this initialization must be done:

Either via a kernel driver

Or via a device tree + SPI init mechanism
before the DPI RGB interface becomes active.

like i need help with any of the following

A Linux kernel driver reference or example for ST7701S (SPI + RGB/DPI)

A device tree overlay (.dts / .dtbo) example that includes:

SPI initialization commands

RGB DPI configuration

i have attached the files for DPI RGB INTERFACE AND ST7701 INITIALIZATION sequence code provided by manufacturer

the below is the initialization sequence code :


WriteComm (0xFF);
WriteData (0x77);
WriteData (0x01);
WriteData (0x00);
WriteData (0x00);
WriteData (0x13);
WriteComm (0xEF);
WriteData (0x08);
WriteComm (0xFF);
WriteData (0x77);
WriteData (0x01);
WriteData (0x00);
WriteData (0x00);
WriteData (0x10);
WriteComm (0xC0);
WriteData (0x63);
WriteData (0x00);
WriteComm (0xC1);
WriteData (0x09);
WriteData (0x02);
WriteComm (0xC2);
WriteData (0x20);
WriteData (0x02);
WriteComm (0xCC);
WriteData (0x18);
WriteComm (0xB0);
WriteData (0x40);
WriteData (0x0E);
WriteData (0x51);
WriteData (0x0F);
WriteData (0x11);
WriteData (0x07);
WriteData (0x00);
WriteData (0x09);
WriteData (0x06);
WriteData (0x1E);
WriteData (0x04);
WriteData (0x12);
WriteData (0x11);
WriteData (0x64);
WriteData (0x29);
WriteData (0xDF);
WriteComm (0xB1);
WriteData (0x40);
WriteData (0x07);
WriteData (0x4C);
WriteData (0x0A);
WriteData (0x0E);
WriteData (0x04);
WriteData (0x00);
WriteData (0x08);
WriteData (0x09);
WriteData (0x1D);
WriteData (0x01);
WriteData (0x0E);
WriteData (0x0C);
WriteData (0x6A);
WriteData (0x34);
WriteData (0xDF);
WriteComm (0xFF);
WriteData (0x77);
WriteData (0x01);
WriteData (0x00);
WriteData (0x00);
WriteData (0x11);
WriteComm (0xB0);
WriteData (0x30);
WriteComm (0xB1);
WriteData (0x48);
WriteComm (0xB2);
WriteData (0x80);
WriteComm (0xB3);
WriteData (0x80);
WriteComm (0xB5);
WriteData (0x4F);
WriteComm (0xB7);
WriteData (0x85);
WriteComm (0xB8);
WriteData (0x23);
WriteComm (0xB9);
WriteData (0x22);
WriteData (0x13);
WriteComm (0xBB);
WriteData (0x03);
WriteComm (0xBC);
WriteData (0x10);
WriteComm (0xC0);
WriteData (0x89);
WriteComm (0xC1);
WriteData (0x78);
WriteComm (0xC2);
WriteData (0x78);
WriteComm (0xEF);
WriteData (0x08);
WriteData (0x08);
WriteData (0x08);
WriteData (0x4C);
WriteData (0x3F);
WriteData (0x54);
WriteComm (0xD0);
WriteData (0x88);
WriteComm (0xE0);
WriteData (0x00);
WriteData (0x00);
WriteData (0x02);
WriteComm (0xE1);
WriteData (0x04);
WriteData (0x00);
WriteData (0x00);
WriteData (0x00);
WriteData (0x05);
WriteData (0x00);
WriteData (0x00);
WriteData (0x00);
WriteData (0x00);
WriteData (0x10);
WriteData (0x10);
WriteComm (0xE2);
WriteData (0x00);
WriteData (0x00);
WriteData (0x00);
WriteData (0x00);
WriteData (0x00);
WriteData (0x00);
WriteData (0x00);
WriteData (0x00);
WriteData (0x00);
WriteData (0x00);
WriteData (0x00);
WriteData (0x00);
WriteData (0x00);
WriteComm (0xE3);
WriteData (0x00);
WriteData (0x00);
WriteData (0x33);
WriteData (0x00);
WriteComm (0xE4);
WriteData (0x22);
WriteData (0x00);
WriteComm (0xE5);
WriteData (0x03);
WriteData (0x34);
WriteData (0xAF);
WriteData (0xB3);
WriteData (0x05);
WriteData (0x34);
WriteData (0xAF);
WriteData (0xB3);
WriteData (0x00);
WriteData (0x00);
WriteData (0x00);
WriteData (0x00);
WriteData (0x00);
WriteData (0x00);
WriteData (0x00);
WriteData (0x00);
WriteComm (0xE6);
WriteData (0x00);
WriteData (0x00);
WriteData (0x33);
WriteData (0x00);
WriteComm (0xE7);
WriteData (0x22);
WriteData (0x00);
WriteComm (0xE8);
WriteData (0x04);
WriteData (0x34);
WriteData (0xAF);
WriteData (0xB3);
WriteData (0x06);
WriteData (0x34);
WriteData (0xAF);
WriteData (0xB3);
WriteData (0x00);
WriteData (0x00);
WriteData (0x00);
WriteData (0x00);
WriteData (0x00);
WriteData (0x00);
WriteData (0x00);
WriteData (0x00);
WriteComm (0xEB);
WriteData (0x02);
WriteData (0x00);
WriteData (0x40);
WriteData (0x40);
WriteData (0x00);
WriteData (0x00);
WriteData (0x00);
WriteComm (0xEC);
WriteData (0x00);
WriteData (0x00);
WriteComm (0xED);
WriteData (0xFA);
WriteData (0x45);
WriteData (0x0B);
WriteData (0xFF);
WriteData (0xFF);
WriteData (0xFF);
WriteData (0xFF);
WriteData (0xFF);
WriteData (0xFF);
WriteData (0xFF);
WriteData (0xFF);
WriteData (0xFF);
WriteData (0xFF);
WriteData (0xB0);
WriteData (0x54);
WriteData (0xAF);
WriteComm (0xEF);
WriteData (0x08);
WriteData (0x08);
WriteData (0x08);
WriteData (0x45);
WriteData (0x3F);
WriteData (0x54);
WriteComm (0xFF);
WriteData (0x77);
WriteData (0x01);
WriteData (0x00);
WriteData (0x00);
WriteData (0x13);
WriteComm (0xE6);
WriteData (0x16);
WriteData (0x7c);
WriteComm (0xe8);
WriteData (0x00);
WriteData (0x0E);
WriteComm (0xFF);
WriteData (0x77);
WriteData (0x01);
WriteData (0x00);
WriteData (0x00);
WriteData (0x00);
WriteComm (0x11);
Delay_ms(120);
WriteComm (0xFF);
WriteData (0x77);
WriteData (0x01);
WriteData (0x00);
WriteData (0x00);
WriteData (0x13);
WriteComm (0xe8);
WriteData (0x00);
WriteData (0x0C);
Delay_ms(10);
WriteComm (0xe8);
WriteData (0x00);
WriteData (0x00);
WriteComm (0xFF);
WriteData (0x77);
WriteData (0x01);
WriteData (0x00);
WriteData (0x00);
WriteData (0x00);
WriteComm (0x35);
WriteData (0x00);
WriteComm (0x29);
Delay_ms(200);

like now how i will interface or i can add this initialization code in device overlay.

Hardware Details

Display driver IC: ST7701S

Resolution: 480×800

Interface: SPI (command) + RGB DPI (pixel data)

Platform: Raspberry Pi 3 Model B+

OS: Raspberry Pi OS / Linux
5DPI-DTBO (2).zip

Statistics: Posted by animesh — Mon Jan 19, 2026 8:34 pm



Viewing all articles
Browse latest Browse all 8035

Trending Articles