emWin display drivers
A display driver supports a particular family of display controllers and all displays which are connected to one or more of these controllers. The drivers can be configured by modifying their configuration files whereas the driver itself does not need to be modified. The configuration files contain all required information for the driver including how the hardware is accessed and how the controller(s) are connected to the display.
Run-time configurable drivers
| Display driver | Supported controllers | Supported bits/pixel |
|---|---|---|
| GUIDRV_BitPlains | emWin display driver supporting solutions without display controller. It manages separate ’bitplains’ for each color bit. Initially it has been developed to support a solution for an R32C/111 which drives a TFT display without display controller. It can be used for each solution which requires the color bits in separate plains. | 1 - 8 |
| GUIDRV_Dist | emWin display driver supporting displays with multiple controllers. | Depends on the actual display drivers. |
| GUIDRV_FlexColor | Epson S1D19122 FocalTech FT1509 Himax HX8347, HX8352, HX8353, HX8325A Ilitek ILI9320, ILI9325, ILI9328, ILI9340, ILI9342, ILI9481 LG Electronics LGDP4531, LGDP4551 Novatek NT39122 OriseTech SPFD5408, SPFD54124C, SPFD5414D Renesas R61505, R61516, R61526, R61580 Sitronix ST7628, ST7637, ST7735 Solomon SSD1355, SSD1961, SSD1963, SSD2119 Syncoam SEPS525 | 16, 18 |
| GUIDRV_IST3088 | Integrated Solutions Technology IST3088, IST3257 | 4 |
| GUIDRV_Lin | emWin display driver supporting each display controller with linear addressable video memory with a direct interface. This means that the video RAM is directly addressable by the address lines of the CPU. The driver contains no controller specific code. So it can also be used for solutions without display controller which require a driver which only manages the video RAM. This driver supports nearly all built-in display controllers. | 1, 2, 4, 8, 16, 24, 32 |
| GUIDRV_S1D13748 | Epson S1D13748 | 16 |
| GUIDRV_S1D15G00 | Epson S1D15G00 | 12 |
| GUIDRV_SLin | Epson S1D13700 (indirect interface only!) Solomon SSD1848 Toshiba T6963 UltraChip UC1617 | 1, 2 |
| GUIDRV_SPage | Epson S1D15E05, S1D15E06, S1D15605, S1D15606, S1D15607, S1D15608, S1D15705, S1D15710, S1D15714, S1D15719, S1D15721 Integrated Solutions Technology IST3020 New Japan Radio Company NJU6676 Novatek NT7502, NT7534, NT7538, NT75451 Samsung S6B0719, S6B0713, S6B0724, S6B1713 Sino Wealth SH1101A Sitronix ST7522, ST7565, ST7567, ST7591 Solomon SSD1805, SSD1303, SSD1815 Sunplus SPLC501C UltraChip UC1601, UC1606, UC1608, UC1611, UC1701 | 1, 2, 4 |
| GUIDRV_SSD1926 | Solomon SSD1926 | 8 |
Compile-time configurable drivers
| Display driver | Supported controllers | Supported bits/pixel |
|---|---|---|
| GUIDRV_CompactColor_16 | Ampire FSA506 Epson S1D13742, S1D13743, S1D19122 FocalTech 1509 Himax HX8301, HX8312A, HX8325A, HX8340, HX8347, HX8352, HX8352B, HX8353 Hitachi HD66766, HD66772, HD66789 Ilitek ILI9161, ILI9220, ILI9221, ILI9320, ILI9325, ILI9326, ILI9328, ILI9342 LG Electronics LGDP4531, LGDP4551 MagnaChip D54E4PA7551 Novatek NT39122, NT7573 OriseTech SPFD5408, SPFD54124C, SPFD5414D, SPFD5420A Renesas R61505, R61509, R61516, R61526, R61580, R63401 Samsung S6D0110A, S6D0117, S6D0129, S6D04H0 Sharp LCY-A06003, LR38825 Sitronix ST7628, ST7637, ST7687, ST7712, ST7735, ST7787 Solomon SSD1284, SSD1289, SSD1298, SSD1355, SSD1961, SSD1963, SSD2119 Toshiba JBT6K71 | 16 |
| GUIDRV_Fujitsu_16 | Fujitsu Jasmine (MB8J2020), Lavender (MB8J2120) | 1, 2, 4, 8, 16 |
| GUIDRV_Page1bpp | Epson S1D10605, S1D15605, S1D15705, S1D15710, S1D15714, S1D15721, S1D15E05, S1D15E06, SED1520, SED1560, SED1565, SED1566, SED1567, SED1568, SED1569, SED1575 Hitachi HD61202 IST IST3020 New Japan Radio Company NJU6676, NJU6679 Novatek NT7502, NT7534, NT7538, NT75451 Philips PCF8810, PCF8811, PCF8535, PCD8544 Samsung KS0108B, KS0713, KS0724, S6B0108B, S6B0713, S6B0719, S6B0724, S6B1713 Sino Wealth SH1101A Sitronix ST7522, ST7565, ST7567 Solomon SSD1303, SSD1805, SSD1815, SSD1821 ST Microelectronics ST7548, STE2001, STE2002 Sunplus SPLC501C UltraChip UC1601, UC1606, UC1608, UC1701 | 1 |
| GUIDRV_07X1 | Novatek NT7506, NT7508 Samsung KS0711, KS0741, S6B0711, S6B0741 Sitronix ST7541, ST7571 Solomon SSD1854 STMicroelectronics STE2010 Tomato TL0350A | 2 |
| GUIDRV_1611 | Epson S1D15E05, S1D15E06, S1D15719 UltraChip UC1610 UltraChip UC1611 | 2 2 4 |
| GUIDRV_6331 | Samsung S6B33B0X, S6B33B1X, S6B33B2X | 16 |
| GUIDRV_7529 | Sitronix ST7529 | 1, 4, 5 |
Note: If you are looking for a display driver, which is not listed in the table above, please contact info@segger.com. Most display drivers for standard target hardware will usually be developed and sold without additional charge.
CPU / Display controller interface
Different display controllers can have different CPU interfaces. Basically there are 2
different interfaces:
- Direct interface
- Indirect interface
Wheras the direct interface accesses the video memory directly by the address bus of
the CPU, the indirect interface requires a more complex communication with the display
controller to get access to the video memory. This can be done by different kinds
of connections:
- Parallel access
- 4 pin SPI interface
- 3 pin SPI interface
- I2C bus interface
The following explains these interfaces and how to configure them. Note that not all
configuration macros are always required. For details about which macros are
required, refer to the specific display driver pages.
Direct interface
Some display controllers (especially those for displays with higher resolution) require
a direct address bus, which means they are connected to at least 14 address bits. In a
direct interface configuration, video memory is directly accessible by the CPU; the
address bus is connected to the display controller.
The only knowledge required when configuring a direct interface is information about
the address range (which will generate a CHIP-SELECT signal for the LCD controller)
and whether 8-, 16- or 32-bit accesses should be used (bus-width to the display controller).
In other words, you need to know the following:
- Base address for video memory access
- Base address for register access
- Distance between adjacent video memory locations (usually 1/2/4-byte)
- Distance between adjacent register locations (usually 1/2/4-byte)
- Type of access (8/16/32-bit) for video memory
- Type of access (8/16/32-bit) for registers
Typical block diagram

Indirect interface - Parallel bus
Most controllers for smaller displays use an indirect interface to connect to the CPU.
With an indirect interface, only one address bit (usually A0) is connected to the LCD
controller. Some of these controllers are very slow, so that the hardware designer
may decide to connect it to input/output (I/O) pins instead of the address bus.
Typical block diagram

8 (16) data bits, one address bit and 2 or 3 control lines are used to connect the CPU
and one LCD controller. Four macros inform the LCD driver how to access each controller
used. If the LCD controller(s) is connected directly to the address bus of the
CPU, configuration is simple and usually consists of no more than one line per macro.
If the LCD controller(s) is connected to I/O pins, the bus interface must be simulated,
which takes about 5-10 lines of program per macro (or a function call to a routine
which simulates the bus interface). The signal A0 is also called C/D (Command/
Data), D/I (Data/Instruction) or RS (Register select), depending on the display controller.
Example routines for connection to I/O pins
Examples can be found in the folder SampleLCD_X:
- LCD_X_6800.c, port routines for the 6800 parallel interface.
- LCD_X_8080.c, port routines for the 8080 parallel interface.
Indirect interface - 4 pin SPI
Using a 4 pin SPI interface is very similar to a parallel interface. To connect a LCD
display using 4 pin SPI interface the lines A0, CLK, DATA, and CS must be connected
to the CPU.
Typical block diagram

Example routines for connection to I/O pins
An example can be found in the folder SampleLCD_X:
- LCD_X_SERIAL.c, port routines for a serial interface
Please note that this sample uses port pins for the communication. This works very
slow but on each CPU. This should be optimized by the customer by using the hardware
support of the CPU for this kind of communication.
Indirect interface - 3 pin SPI
To connect a LCD display using 4 pin SPI interface the lines CLK, DATA, and CS must
be connected to the CPU.
Typical block diagram

Example routines for connection to I/O pins
This interface do not have a separate line for distinguish between data and commands
to be transmitted to the display controller. There is no standardized method to
manage this. Some controllers use an additional bit for distinguish between data and
command, other controllers work different.
Examples can be found in the folder SampleLCD_X:
- LCD_X_Serial_3Pin.c, port routines for a 3 pin serial interface
- LCD_X_Serial_3Wire.c, port routines for a 3 pin serial interface
Indirect interface - I2C bus
This kind of interface use only 2 lines and a standarized protocoll for the communication
with the display controller.
Typical block diagram

Example routines for connection to I/O pins
An example can be found in the folder SampleLCD_X:
- LCD_X_I2CBUS.c, port routines for a I2C bus interface
Similar to the serial communication examples this example uses port lines for the
communication which works not very fast. If the CPU support this kind of communication
these routines should be optimized by using the hardware functions.
Display Drivers
