This hands-on walks you through bringing a display to life on the FRDM-IMX95-PRO board. You will flash a BSP image to an SD card, attach a Waveshare 7" DSI LCD, select the correct device tree in U-Boot, and then exercise the panel with brightness control, screen rotation, capacitive touch, and a live camera video pipeline. By the end you will have a fully working touch display and the core skills to configure DSI panels on i.MX 95.
By the end of this hands-on you will be able to:
evtest.Watch the full hands-on walkthrough first to see each step performed on real hardware, then follow along on your own board using the steps below.
Put the board into Serial Download Protocol (SDP) mode so the host can push the image, then connect it to your PC:
Run the following command on your host computer to flash the BSP boot image and full image to the SD card:
# --- UUU --- # Run the following command on your host computer uuu.exe –b sd_all imx-boot-imx95-19x19-lpddr5-frdm-pro-sd.bin-flash_a55 imx-image-full-imx95evk.wic.zst
Once flashing completes, reconfigure the board to boot from the SD card:
Attach the 22-pin FPC cable between the board and the Waveshare panel, paying close attention to cable orientation on each end:
The panel needs both power and an I2C connection for the display output to come up:
Watch the serial console during boot and press any key at the U-Boot countdown to reach the prompt:
Hit any key to stop autoboot: 3 => (U-Boot prompt)
At the U-Boot prompt, select the device tree for the Waveshare panel and boot:
# --- U-Boot: select the device tree for the display ---
fatls mmc 1
setenv fdtfile imx95-19x19-frdm-pro-waveshare-7inch-c-panel.dtb
saveenv
boot
Once Linux is running on the board, the panel backlight is exposed through sysfs. The commands below set a brightness value and read the current and maximum allowed values. Valid range is 0 (off) up to max_brightness. Run these as root:
# --- Linux on board --- # Run the following command on the board # Path to the backlight /sys/class/backlight/3-0045/ # Set brightness echo 128 > /sys/class/backlight/3-0045/brightness # Read the current value cat /sys/class/backlight/3-0045/brightness # Read the maximum allowed value cat /sys/class/backlight/3-0045/max_brightness
For a quick visual test, this small script ramps the backlight up and down continuously, giving a "breathing" effect. Save it as breathe.sh, make it executable, and run it as root. Press Ctrl+C to stop.
# --- Linux --- # Breathing back light # Create and open the file vi breathe.sh # Write the following lines into the bash script BL=/sys/class/backlight/3-0045 MAX=$(cat "$BL/max_brightness") while true; do for ((i=0; i<=MAX; i++)); do echo "$i" > "$BL/brightness"; sleep 0.01; done for ((i=MAX; i>=0; i--)); do echo "$i" > "$BL/brightness"; sleep 0.01; done done # Change the permissions of the bash script chmod +x breathe.sh # Run the bash script ./breathe.sh
Display orientation is controlled in Weston's configuration file. Edit weston.ini, add an [output] section with the desired transform, then restart the service:
# --- Linux --- # On board # File path /etc/xdg/weston/weston.ini # Open the file vi /etc/xdg/weston/weston.ini # Add the following [output] name=DPI-1 transform=rotate-90 # Valid formats # normal - 0 degrees (default) # rotate-90 - 90 degrees clockwise # rotate-180 - upside down # rotate-270 - 270 degrees clockwise # Reboot or restart the service systemctl restart Weston # Check the status of the service systemctl status weston
You can confirm the panel resolution and active modes with modetest:
# --- Linux --- # Check the panel resolution modetest -c # list connectors & modes # full DRM/KMS overview modetest # Look for the DSI/DPI connector and confirm # 1024x600 is listed as an active mode
Run evtest with no arguments to list the available input devices, then select the touch screen's event number to start capturing touch events:
# --- Linux --- # Touch screen evtest # Run the evtest command evtest # It will list the available devices Available devices: /dev/input/event0: scmi_dev.11 /dev/input/event1: Goodix Capacitive TouchScreen Select the device event number [0-1]: 1 # Then it will run the evtest of the touch screen
Stream live camera video to the panel to verify both the camera and the display path in one go:
# --- Linux --- # Gstreamer pipe line for webcam # Run the following command gst-launch-1.0 v4l2src device=/dev/video52 ! video/x-raw,width=640,height=480 ! Glimagesink # Pipeline breakdown # v4l2src device=/dev/video52 - capture from V4L2 node # video/x-raw,width=640,height=480 - raw 640x480 video # glimagesink - render on display via OpenGL
| Symptom | What to check |
|---|---|
| No display output | Check FPC orientation — the stiffener side must face the board connector. Ensure the I2C bus (J6) is connected; it is required for display output. |
fatls mmc 1 fails |
Verify the SD card is inserted. Confirm SW3 and SW4 = 0011 (SD boot mode). |
| "No such file or directory" at the backlight path | Confirm the node name with ls /sys/class/backlight/. |
| Touch not working after screen rotation | Add a calibration_matrix for the touch device in weston.ini, or configure the touch coordinate transform via libinput. |
In this hands-on you brought up a Waveshare 7" DSI display on the FRDM-IMX95-PRO board from a fresh SD card flash all the way to a working touch panel with live camera video. Key takeaways:
evtest, and verified the camera path with GStreamer.Be sure to watch the module video above to see each step in action, and explore the rest of the FRDM-IMX95-PRO Training Hub for more hands-on modules.