Display Output
Each CPU supports a different set of display options. The table below shows what is supported and which display is the default.
Board | Parallel RGB* | LVDS0 | LVDS1 | HDMI | MIPI DSI** |
---|---|---|---|---|---|
iMX6 SoloX COM | Yes | Yes (default) | Not supported | Not supported | Not supported |
iMX6 Quad COM | Yes | Yes | Yes (default) | Yes | Yes |
iMX6 DualLite COM | Yes | Yes | Yes (default) | Yes | Yes |
iMX6 UltraLite COM | Yes (default) | Not supported | Not supported | Not supported | Not supported |
iMX7 Dual (u)COM | Yes (default) | Not supported | Not supported | Not supported | Yes |
iMX7ULP uCOM | Not supported | Not supported | Not supported | Yes**** | Yes |
iMX8M Quad COM | Not supported | Not supported | Not supported | Yes*** | Yes |
iMX8M Mini uCOM | Not supported | Not supported | Not supported | Yes**** | Yes |
iMX8M Nano uCOM | Not supported | Not supported | Not supported | Yes**** | Yes |
iMX93 uCOM | Not supported | Yes | Not supported | Yes**** | Yes |
- *) The Parallel RGB interface is available through the use of a COM Display Adapter board
- **) The MIPI DSI interface is not controlled by the eadisp command described below
- ***) The iMX8M does not have the eadisp command described below enabled as of May 2019
- ****) Via MIPI-DSI to HDMI bridge on the uCOM Adapter board
The Display Solutions for COM Boards page describes the different interfaces, how to physically connect a display and it has a list of some of the supported displays. There is also the Adding Displays to iMX Developer's Kit document which has more in-depth descriptions of the commands below.
U-Boot
info
The eadisp
support is only available up until the 2021.04 version of U-Boot. In the 2022.04 version (which was first included in the 5.15.32 distribution) eadisp
has been removed.
The U-Boot has support for the eadisp
command to control which display interfaces should be enabled and how they should be configured.
The U-Boot is setup to show the DENX™ logo on the default display when booting but to see it the display has to be configured correctly.
Run the eadisp
command to see available options (output is for the iMX6 Quad COM board).
eadisp
Available display configurations:
0) lvds0 hannstar:18:64998375,1024,768,220,40,21,7,60,...
1) lvds1 hannstar:18:64998375,1024,768,220,40,21,7,60,...
2) rgb Innolux-AT070TN:24:33336667,800,480,89,164,75,75,...
3) rgb nhd-4.3-480272ef:24:9009009,480,272,2,2,2,2,41,...
4) rgb nhd-5.0-800480tf:24:29232073,800,480,40,40,29,13,...
5) rgb nhd-7.0-800480ef:24:29232073,800,480,40,40,29,13,...
6) rgb umsh-8864:24:9061007,480,272,20,20,20,20,...
7) rgb umsh-8596-30t:24:33264586,800,480,128,120,20,20,...
8) rgb umsh-8596-33t:24:32917475,800,480,200,200,45,45,...
9) rgb rogin-rx050a:24:32917475,800,480,200,200,45,45,...
10) hdmi 1280x720M@60:m24:74161969,1280,720,220,110,20,5,...
11) hdmi 1920x1080M@60:m24:148500148,1920,1080,148,88,36,...
12) hdmi 640x480M@60:m24:25200342,640,480,48,16,33,10,...
13) hdmi 720x480M@60:m24:27027027,720,480,60,16,30,9,62,...
Current Selection:
enabled prefer configuration
rgb: no no Innolux-AT070TN:24:33336667,...
lvds0: no no hannstar:18:64998375,...
lvds1: no no hannstar:18:64998375,...
hdmi: no no 1280x720M@60:m24:74161969,...
The command is described in detail in the Adding Displays to iMX Developer's Kit document. An example enabling the Parallel RGB interface to use the UMSH-8864 display.
eadisp enable rgb
eadisp conf rgb 6
selecting rgb=umsh-8864
Current Selection:
enabled prefer configuration
rgb: yes no umsh-8864:24:9061007,...
lvds0: no no hannstar:18:64998375,...
lvds1: no no hannstar:18:64998375,...
hdmi: no no 1280x720M@60:m24:74161969,...
To make the change, save the environment variables and reset the board.
saveenv
reset
The display should show the DENX™ logo.
Linux
Each display has its own framebuffer and to see the available framebuffers.
ls /dev/fb*
/dev/fb0 /dev/fb1 /dev/fb2 /dev/fb3 /dev/fb4 /dev/fb5
The number of framebuffers depends on the CPU and what was enabled by the eadisp command in the U-Boot.
The i.MX 6Quad and 6DualLite SoCs have support for virtual displays (called overlays) which will have their own framebuffers so an iMX6 Quad COM board with LVDS0 and RGB enabled will have four frame buffers.
ls /dev/fb*
/dev/fb0 /dev/fb1 /dev/fb2 /dev/fb3
The overlays are /dev/fb1 and /dev/fb3.
To see the resolution, bit depth etc for a framebuffer.
fbset -fb /dev/fb0
mode "800x480-49"
# D: 33.501 MHz, H: 31.515 kHz, V: 49.243 Hz
geometry 800 480 800 480 32
timings 29850 89 164 75 75 10 10
accel false
rgba 8/16,8/8,8/0,0/0
endmode
The information above tells us the following interesting information
- The resolution is 800x480 pixels.
- Each pixel uses 32 bits, with 8 bits each for red, green and blue. No alpha information.
For a display with 16 bits per pixel and 1024x768 it will look like this instead.
fbset -fb /dev/fb1
mode "1024x768-60"
# D: 65.003 MHz, H: 48.365 kHz, V: 60.006 Hz
geometry 1024 768 1024 768 16
timings 15384 220 40 21 7 60 10
accel false
rgba 5/11,6/5,5/0,0/0
endmode
Another way to see display information is to look at the files on sysfs.
ls /sys/class/graphics/fb4
bits_per_pixel fsl_disp_property state
blank mode stride
console modes subsystem
cursor name uevent
dev pan virtual_size
device power
fsl_disp_dev_property rotate
The files can be investigated further.
cat /sys/class/graphics/fb4/fsl_disp_dev_property
lcd
cat /sys/class/graphics/fb4/fsl_disp_property
1-layer-fb
The displays may have power saving options that turns them off after a while. To turn the display back on, write a 0 to the blank control.
echo 0 > /sys/class/graphics/fb0/blank
To turn it off, write a 1 instead.
echo 1 > /sys/class/graphics/fb0/blank
A quick test is to send data directly to the framebuffer. Assuming the fbset command revealed a 800x480 display with 32 bit addressing, the following command fills the display with random data.
dd if=/dev/urandom of=/dev/fb0 bs=3200 count=480
The display can be cleared again by writing zeroes to it.
dd if=/dev/zero of=/dev/fb0 bs=3200 count=480
A more practical test is to display an image. Use a USB memory stick and mount it as described in the USB Host section. To display an image use the following command.
fbi -T 2 –d /dev/fb0 /mnt/usbstick/*.png