• LCD和LED屏幕的工作原理总结


    1 点阵取模原理之横向取模与纵向取模
    1.1 针式打印机
    - 针式打印机16针是纵向排列,每次打印垂直的16bit,然后右移一bit,继续下列打印;字节的MSB表示最上面的点,字节LSB表示最下面的点
    - 由于汉字字模的点阵是横向排列的,而提供给打印头的信息却需要按纵向排列,所以必须再对字模缓冲区中存放的字模数据进行变换,变成打印机按图形方式工作时所需要的数据格式才能送出
    - 参考Nokia5110和JLX12864的字符显示原理

    Figure 1-1 针式打印机纵向排列点阵字模

    Figure 1-2 针式打印机打印头运动方向

    2 LED显示屏控制卡  - 点阵横向取模
    2.1 芯片
    ASAP1826T - AlphaScale,仰邦LED控制卡
    AT89C52 - 最早的LED条屏控制卡,直到09年才兴起U盘LED控制卡
    AT91SAM9 - Smart ARM-based Microcontroller,中航U盘控制卡
    gd32f105 - GigaDevice
    stm32f105 - 72MHz,中航U盘控制卡

    2.2 LED控制卡接口
    - LED用汉字字模点阵是16 x 16,每行16点占用2个字节,总共16行,所以占用32个字节
    - HUB08控制2行汉字显示(16 x 16点阵),R1和G1控制第一行汉字的列,R2和G2控制第二行汉字的列
    - HUB12控制1行汉字的显示(16 x 16点阵)

    行译码:74HC138,A(LSB)、B、C、D (MSB)4根线译码出点阵的16行
    列译码:74HC595,串并转换,接口类似于SPI接口,每8个clk一个字节;Q7’串行输出引脚,若输入位数比8多,则通过此引脚连接下一个74HC595,作为下一个级联74HC595的DS(Data Serial);R1和G1处理上半部的串行输入(16 x 64),R2和G2处理下半部的串行输入(16 x 64)。SPI每次传输1个字节。

    2.3 LED驱动芯片
    max7219

    3 MCU LCD
    3.1 段码LCD
    - 车载空调屏幕
    - 测温仪

    3.2 字符型Nokia5110
    V=0 水平寻址
    V=1 垂直寻址

    - 接口SPI
    - 内部集成GRAM,Driver IC是PCD8544
    - 液晶5110每次写入命令是写一个竖着的8个bit即一个字节,这是它的一个最基本的写入单元,故SPI每次传输1个字节
    - 最上面的点是每个字节的LSB,最下面的点是每个字节的MSB;与针式打印机的LSB和MSB的方向是反的
    - 坐标范围为X 0~83(1010011),Y 0~5(101)

    3.3 字符型JLX12864
    - 接口SPI
    - 内部集成GRAM
    - 12864表示分辨率是128 x 64,类似于Nokia5110,只是模块额外集成了一个SPI接口的字库

    3.4 8080并行接口LCD

    4 Android LCD
    4.1 MIPI DSI几个重要的概念
    MIPI DSI分为物理层和链路层。
    物理层的传输模式分为:HS模式和低功耗LP模式,LP模式只使用Lane0通道,时钟通道关闭,此时Lane0既传输数据,也传输时钟,并且数据是单端模式。

    链路层的模式分为:
    - Command模式,原理类似于带有内部GRAM的Nokia5110
    - Video模式,原理类似于传统的RGB TFT-LCD

    Command模式数据格式:
    命令类型(如0x05/0x15/0x39)+ 指令 + 参数
    0x05:只有指令,没有参数
    0x15:只有一个参数
    0x39:有多个参数

    当链路层选择Command模式时,物理层可以为HS模式,也可以为LP模式;但链路层选择Video模式时,物理层只能选择HS模式。所以初始化MIPI DSI屏幕时,如果要使用低速模式配置DSI屏幕的寄存器,那么链路层就选择Command模式,而物理层选择LP模式。

    4.2 Android多屏显示不同内容
    ActivityOptions.java
    ActivityOptions.setLaunchDisplayId()
    ActivityOptions.getLaunchDisplayId()

    4.3 AMOLED
    AMOLED需要NOR Flash,因为AMOLED的Demura(Mura表示亮度不均匀)校准数据需要保存到NOR Flash中,开机后,驱动IC将NOR Flash中的数据读出,加载到驱动IC中的SRAM。

    5 显示SerDes
    5.1 SerDes透传I2C或者UART数据
    FCC:Forward Control Channel bit,正向传递I2C的SCL/SDA或者UART的TX/RX数据位,编码到一帧32b中的第bit 30,32b的数据使用8b/10b编码成40b
    RCC:Reverse Control Channel bit,反向传递I2C的SCL/SDA或者UART的TX/RX数据位,编码成1 us的脉冲,所以最大速率为1 Mbps
    PCB:Packet Parity Check bit,奇偶校验位,编码到一帧32b中的bit 31,32b的数据使用8b/10b编码成40b

    5.2 SerDes初始化
    1)SerDes的Serializer中需要配置Deserializer、背光、触摸屏的I2C地址。
    2)SerDes的Serializer中需要配置屏幕分辨率参数,包括但不限于长、宽、前肩、后肩、pclk等。

    5.3 backlight
    ILight.setLight(Type type,
            LightState state)

    2-byte frame_len +
    3-byte frame_hdr (0, (tx_seq << 1) | type, 0x7f << 1) +
    1-byte ch_id +
    1-byte reserved +
    2-byte data_len +
    2-byte data (id + brightness) +
    2-byte crc (not including frame_len)
    Note: 3-byte frame_hdr bit field definitions are different from standard HDLC frame.
    U-frame RST frame_hdr: 0x00, 0x8f, 0x03
    U-frame ACK frame_hdr: 0x00, 0x63, 0x03

    echo "\x31\x99" > \
    /dev/backlight_node
    cat /dev/backlight_node | \
    busybox hexdump -C

    5.4 Lattice ECP5-45
    4ch-eDP  8ch-947/RGB-921
    Diamond IDE
    q <= #1 1b0 : delay one clock to set 0 to q.

    5.4.1 MT2712 LVDS
    every LVDS TX period: 7 bit
    LVDS pair0: R0 - R5, G0
    LVDS pair1: G1 - G5, B0 - B1
    LVDS pair2: B2 - B5, HS, VS, DE
    LVDS pair3: R6 - R7, G6 - G7, B6 - B7, RSVD

    5.4.2 Display Port
    Blanking Start
    VB-ID
    Mvid[7:0]
    Maud
    Blanking End
    64-byte pixel

    6 Linux DRM
    6.1 前言
    fb驱动主要是嵌入式设备用,Android最开始也是用fb,但是渐渐就发现它不好用了,主要是对多硬件图层的支持不好,不过那时候DRM对嵌入式系统也不友好,Google中间还开发了一个ADF(Atomic Display Framework)的驱动框架代替fb,不过没什么人响应,后面DRM里面加了Atomic KMS的功能,对多图层的支持基本能满足Android的需求了,而且很多芯片厂家既要做Android又要做Chrome,所以都直接转向DRM了,要不然就要维护两套驱动,所以DRM现在就成了Android上的标准图形驱动。

    6.2 Broxton Graphics
    Intel Open Source HD Graphics Programmer's Reference Manual
    page 14
    Pipe A and Pipe B have four planes and a cursor. Each plane can be used as a sprite, primary, or overlay. Pipe C has three planes and a cursor. Each plane can be used as a sprite, primary, or overlay.
    The plane blending follows a fixed Z-order. Plane 1 is the bottom most plane and higher numbered planes stack on top of it.

    6.3 A-KMS pipeline
    fb -> CRTC -> encoder -> connector,connector是hotpluggable。
    fb -> CRTC -> encoder -> bridge,最后一步的桥会创建connector,譬如encoder是dpi,lvds是桥,负责输出。

    A-KMS工具:libdrm/tests/modetest

    6.4 kernel
    1)struct drm_device
    struct drm_device {}代表一个显卡,该显卡中的所有connector组成一个list,所有encoder组成一个list,所有crtc组成一个list,所有fb组成一个list。
    2)创建connector和encoder,并且关联起来。
    component_add()
    component_ops->bind()
    3)创建connector时,会解析cmdline中与connector有关的参数。
    drm_connector_init()
    drm_connector_get_cmdline_mode()

    6.5 DRM加载静态EDID配置
    1)应用程序调用libdrm代码中的drmModeGetConnector()函数,通过ioctl传递宏DRM_IOCTL_MODE_GETCONNECTOR通知Linux内核要获取相关数据(包括EDID)。

    Linux内核中,如果定义了宏CONFIG_DRM_LOAD_EDID_FIRMWARE,内核会先调用drm_load_edid_firmware()函数,从/vendor/firmware路径下的对应文件中读取EDID数据;若读取失败或未定义宏CONFIG_DRM_LOAD_EDID_FIRMWARE,内核通过DDC通道和显示器进行通信,获取EDID数据。
    2)
    zcat /proc/config.gz | grep CONFIG_DRM_LOAD_EDID_FIRMWARE
    BOARD_KERNEL_CMDLINE += \
    drm_kms_helper.edid_firmware=\
    HDMI-A-1:edid/1920x720.bin,\
    HDMI-A-2:edid/1920x1080.bin \
    video=HDMI-A-1:e \
    video=HDMI-A-2:e
    3)
    cat /sys/module/drm_kms_helper/parameters/edid_firmware
    cat /sys/class/drm/card0-HDMI-A-1/status
    echo 0x1f > \
    /sys/module/drm/parameters/debug
    4)
    drm_edid_load.c
    Kramer EDID Designer
    Descriptor #1: LCD Timing Table

    7 Abbreviations
    AOD: Always On Display, 1Hz refresh rate
    APIX:Automotive Pixel link,类似于美信的GMSL和德州仪器的FPDLINK,BMW MGU使用
    Chrom-GRC:STM32 Graphics Resource Cutter,图形资源切割,当使用圆形显示器(如智能手表上的显示器)时,Chrom-GRC会丢弃由于屏幕形状而不可见的像素
    DBL:Camera SerDes double-input mode,大多数摄像头输出的是RawData格式的数据,位数比较低。因此,可以把两个像素的数据放到一个帧里进行传输。即24位或32位的数据里包含两个像素的数据。这种每帧传输两个像素的方式称为双输入模式
    D/C:Data/Command Pin
    DE: Data Enable
    DPI:Display Parallel Interface
    DSI:Display Serial Interface
    HDMI ARC:Audio Return Channel,音频回传通道,pin14和pin19传输差分数据,pin17作为差分地
    MISO:mi s əu
    MOSI:m əu si
    OpenLDI: TI SerDes Open LVDS Display Interface
    PSRAM:Pseudo SRAM,一种伪静态SRAM,实际就是SPI SRAM
    QUP:高通平台的SPI总线和I2C共用core和引脚,称为QUP(QCOM Universal Peripheral);而UART和QUP又共用引脚,并且称为BLSP
    RS:Register Select
    SerDes:sir-deez
    TE:MIPI Command Mode Tearing Effect

  • 相关阅读:
    【Java牛客刷题】入门篇(04)
    深入浅出PyTorc——进阶训练技巧
    算法与数据结构-字符串匹配算法
    深入理解锁
    vue datav dv-scroll-board
    【ROS入门】机器人系统仿真——相关组件以及URDF集成Rviz
    corn表达式 具体详解与案例
    java培训技术数据绑定流程原理
    自然语言处理任务的开发流程
    ide unknown command (empty parse result): / 问题及解决方案
  • 原文地址:https://blog.csdn.net/zoosenpin/article/details/34410025