GR5526(9)-显示控制器驱动配置参考

[TOC]

1. 显示控制器

显示控制器(Display Controller)是GR5526芯片系列独有的外设模块. 配合将GPU的图形渲染的结果, 刷新到屏幕进行显示. 本文主要用于说明如何配置常见的驱动 时序.

1.1 初始化函数参数

  • DC 模块初始化函数为 graphics_dc_init, 需要构建结构体入参 app_graphics_dc_params_t 如下:

参数 说明
mspi_mode 数据线模式 GDC_MODE_SPI
GDC_MODE_DSPI
GDC_MODE_QSPI
clock_freq DC 时钟频率 GDC_CLOCK_FREQ_48MHz
GDC_CLOCK_FREQ_24MHz
GDC_CLOCK_FREQ_12MHz
GDC_CLOCK_FREQ_6MHz
GDC_CLOCK_FREQ_3MHz
clock_mode DC 时钟模式 一般配置GDC_CLOCK_MODE_0 即可
tcsu_cycle CS片选建立延迟 配置为 GDC_TCSU_CYCLE_1 即可, 不用修改
layer_mode Layer 模式 配置为GDC_ONE_LAYER_MODE即可, 不用修改
mipicfg_format DC图形数据输出格式 GDC_MIPICFG_SPI_RGB565_OPT0
GDC_MIPICFG_SPI_RGB888_OPT0
GDC_MIPICFG_DSPI_RGB565_OPT0
GDC_MIPICFG_DSPI_RGB888_OPT0
GDC_MIPICFG_DSPI_RGB888_OPT1
GDC_MIPICFG_QSPI_RGB565_OPT0
GDC_MIPICFG_QSPI_RGB888_OPT0
GDC_MIPICFG_SPI_RGB332_OPT0
resolution_x 屏幕宽度分辨率
resolution_y 屏幕高度分辨率
pins_cfg 屏幕引脚控制 引脚默认均采用硬件控制, 相关功能引脚只能pinmux 到固件的引脚. 驱动参数输入 主要控制是否使能对应引脚
  • mipicfg_format 各时序格式对应的输出时序图如下:

    ../../_images/dc_mipi_timing.png

    • 注: 上图的时序列, 由 app_graphics_dc_send_single_frame 接口的入参app_graphics_dc_cmd_t之成员变量 frame_timing 决定

    • GDC_MIPICFG_SPI_RGB565_OPT0 (SPI-4)跟GDC_MIPICFG_DSPI_RGB565_OPT0 的区别:

      • 前者 DCX 信号线作为 D0信号线的辅助, 充当的命令数据指示逻辑, 当电平为低时, 表示D0传输的控制命令; 当电平为高时, 表示D0传输的图形数据

      • 后者, DCX 起到 D1的作用, 跟D0 一起进行数据表示, 且每像素数据为9个clk, 最高clk 用于指示当前是命令(0)还是数据(1)

  • 函数调用参考:

        app_graphics_dc_params_t dc_params = {
            .mspi_mode  = GDC_MODE_QSPI,
            .clock_freq = GDC_CLOCK_FREQ_48MHz,
            .clock_mode = GDC_CLOCK_MODE_0,
            .tcsu_cycle = GDC_TCSU_CYCLE_1,
            .layer_mode = GDC_ONE_LAYER_MODE,
            .mipicfg_format = GDC_MIPICFG_QSPI_RGB565_OPT0,
            .resolution_x   = screen_w,
            .resolution_y   = screen_h,
            .pins_cfg = {
                .csn = {
                    .pull = APP_IO_PULLUP,
                    .enable = ENABLE,
                },
                .clk = {
                    .pull = APP_IO_PULLUP,
                    .enable = ENABLE,
                },
                .io0 = {
                    .pull = APP_IO_PULLUP,
                    .enable = ENABLE,
                },
                .io1 = {
                    .pull = APP_IO_PULLUP,
                    .enable = ENABLE,
                },
                .io2 = {
                    .pull = APP_IO_PULLUP,
                    .enable = ENABLE,
                },
                .io3 = {
                    .pull = APP_IO_PULLUP,
                    .enable = ENABLE,
                },
                .dcx = {
                    .pull = APP_IO_PULLUP,
                    .enable = DISABLE,
                },
            },
        };
    
        graphics_dc_init(&dc_params, NULL);
    

1.2 帧数据发送接口参数

DC提供的帧数据发送函数 app_graphics_dc_send_single_frame, 入参说明如下:

参数 说明
uint32_t which_layer DC Layer, 设置为GRAPHICS_DC_LAYER_0,不要修改
app_graphics_dc_framelayer_t 见附图1
app_graphics_dc_cmd_t 见附图2
app_graphics_dc_access_type_e 接口的同步模式:
- GDC_ACCESS_TYPE_SYNC : 同步调用模式, 刷屏完成后函数才返回
- GDC_ACCESS_TYPE_ASYNC : 异步调用模式, 刷屏结果通过回调函数返回
  • 附图1 :

    image-20240730102200952

  • 附图2 :

    image-20240730104038270

  • 接口调用参考 (1) :

    • 控制命令 0x38、控制地址段 24bit 0x002c00, 时序发送模式为: 命令由SPI发送、地址和数据段由QSPI发送

    • 帧缓冲区格式为 GDC_DATA_FORMAT_RGB565, 接口调用方式为异步调用

    app_graphics_dc_cmd_t dc_cmd = {
            .command = 0x38,
            .address = 0x002C00,
            .address_width = GDC_FRAME_ADDRESS_WIDTH_24BIT,
            .frame_timing  = GDC_QSPI_FRAME_TIMING_1,
        };
    
        app_graphics_dc_framelayer_t dc_layer = {
            .frame_baseaddr = buf,
            .resolution_x = w,
            .resolution_y = h,
            .row_stride = -1,
            .start_x = 0,
            .start_y = 0,
            .size_x = w,
            .size_y = h,
            .alpha = 0,
            .blendmode = HAL_GDC_BL_SRC,
            .data_format = (graphics_dc_data_format_e) GDC_DATA_FORMAT_RGB565,
        };
    
        app_graphics_dc_send_single_frame(GRAPHICS_DC_LAYER_0, &dc_layer, &dc_cmd, GDC_ACCESS_TYPE_ASYNC);
    
  • 接口调用参考 (2) :

    • 控制命令 0x20、无地址段、时序发送格式为 - GDC_SPI_FRAME_TIMING_2

    • 缓冲区帧格式为 GDC_DATA_FORMAT_RGB332,接口调用模式为同步调用

    app_graphics_dc_cmd_t dc_cmd = {
            .command = 0x20,
            .address = 0x000000,
            .address_width = GDC_FRAME_ADDRESS_WIDTH_NONE,
            .frame_timing  = GDC_SPI_FRAME_TIMING_2,
        };
    
        app_graphics_dc_framelayer_t dc_layer = {
            .frame_baseaddr = buf,
            .resolution_x = w,
            .resolution_y = h,
            .row_stride = -1,
            .start_x = 0,
            .start_y = 0,
            .size_x = w,
            .size_y = h,
            .alpha = 0,
            .blendmode = HAL_GDC_BL_SRC,
            .data_format = (graphics_dc_data_format_e) GDC_DATA_FORMAT_RGB565,
        };
    
        app_graphics_dc_send_single_frame(GRAPHICS_DC_LAYER_0, &dc_layer, &dc_cmd, GDC_ACCESS_TYPE_SYNC);
    

2. 其他DC 接口时序图

2.1 app_graphics_dc_spi_send

image-20240730111719709

2.2 app_graphics_dc_dspi_send_cmd_in_3wire_1lane

image-20240730111824031

2.3 app_graphics_dc_dspi_send_cmd_data_in_3wire_1lane

image-20240730111700977

2.4 app_graphics_dc_dspi_send_cmd_data_in_4wire_2lane

image-20240730111934257

2.5 app_graphics_dc_dspi_send_cmd_datas_in_4wire_2lane

image-20240730111613871