跳到主要内容

DSI

1. 简介

DSI(Display Serial Interface)是一种用于显示面板与显示控制器之间的高速串行通信接口,主要由移动设备、嵌入式系统、平板电脑和其他需要高性能显示的系统广泛使用。它由MIPI(移动行业处理器接口,Mobile Industry Processor Interface)联盟制定,是一种标准化的接口协议,旨在减少设备的引脚数量并优化功耗。

2. 硬件连接

Luckfox Omni3576 开发板默认支持的 DSI 屏幕型号为 10.1-DSI-TOUCH-A。如需使用其它的屏幕,用户需自行修改相关设备树配置,详见SDK 环境部署《设备树配置》,在 Omni3576 底板上,CSI(摄像头)和DSI(显示器)两个接口的封装是相似的。在接线时需要注意不要接错。 DSI 接口则位于 USB 接口旁。请注意,如果您使用的是其他底板,具体的布局可能会有所不同,请以您所使用底板的布局为准。

  1. 使用 22PIN 的 FPC 排线,将显示屏 DSI 接口连接到 Luckfox-Omni3576 底板的 DSI 接口。(注意:排线的蓝色端朝上)
  2. 将显示屏的电源接口连接到 Luckfox-Omni3576 底板的 40pin 引脚上的 5V 和 GND 上。如下图所示:

3. 查看屏幕信息

  • 当前系统中可用的屏幕 ID 可通过以下命令查看:

    sudo cat /sys/kernel/debug/dri/0/summary
    Video Port0: DISABLED
    Video Port1: ACTIVE
    Connector:DSI-1 Encoder: DSI-203
    bus_format[100a]: RGB888_1X24
    overlay_mode[0] output_mode[0] SDR[0] color-encoding[BT.709] color-range[Full]
    Display mode: 800x1280p60
    clk[70000] real_clk[69883] type[48] flag[a]
    H: 800 840 860 880
    V: 1280 1300 1304 1324
    Fixed H: 800 840 860 880
    Fixed V: 1280 1300 1304 1324
    Esmart1-win0: ACTIVE
    win_id: 1
    format: XR24 little-endian (0x34325258) pixel_blend_mode[0] glb_alpha[0xff]
    color: SDR[0] color-encoding[BT.601] color-range[Limited]
    rotate: xmirror: 0 ymirror: 0 rotate_90: 0 rotate_270: 0
    csc: y2r[0] r2y[0] csc mode[0]
    zpos: 1
    src: pos[0, 0] rect[800 x 1280]
    dst: pos[0, 0] rect[800 x 1280]
    buf[0]: addr: 0x00000000fe44e000 pitch: 3200 offset: 0
    Video Port2: DISABLED

4. 旋转屏幕

  1. 旋转命令:

    xrandr -o left
    xrandr -o right
    xrandr -o normal
    xrandr -o inverted
  2. 使用 xrandr 旋转的效果是一次性的,系统重启后屏幕显示方向会还原。 如果要开机自动旋转,则需要修改配置文件:

    sudo vim  /etc/X11/xorg.conf.d/10-monitor.conf

    ### Valid values for rotation are "normal", "left", "right"
    Section "Monitor"
    # Identifier "Default Monitor"
    Identifier "DSI-1"
    Option "Rotate" "right"
    EndSection

5. 触摸校准

  1. 系统显示旋转后,触摸方向不一致,需要按下文操作进行触摸旋转:

    sudo vim  /etc/udev/rules.d/99-luckfox-touch.rules
  2. 根据自己的旋转方向,加入对应的配置,保存后重启开发板。

    90度:
    ENV{ID_INPUT_TOUCHSCREEN}=="1", ENV{LIBINPUT_CALIBRATION_MATRIX}="0 -1 1 1 0 0"
    180度:
    ENV{ID_INPUT_TOUCHSCREEN}=="1", ENV{LIBINPUT_CALIBRATION_MATRIX}="-1 0 1 0 -1 1"
    270度:
    ENV{ID_INPUT_TOUCHSCREEN}=="1", ENV{LIBINPUT_CALIBRATION_MATRIX}="0 1 0 -1 0 1"