DPI(并行显示接口)
所有带有 40 路接头连接器和计算模块的树莓派板上均可使用高达 24 位的并行 RGB 接口。此接口允许将并行 RGB 显示以 RGB24 (红色,绿色和蓝色为 8 位)或 RGB666 (每种颜色 6 位)或 RGB565 (红色为 5 位,红色为 6 位,绿色为 5 位)的方式连接到树莓派 GPIO。
该接口由 GPU 固件控制,可以由用户通过特殊的 config .txt参数并启用正确的 Linux 设备树覆盖来进行编程。
GPIO引脚
在树莓派 GPIO的存储体 0 上可选的替代功能之一是 DPI (显示并行接口),它是一个简单的时钟并行接口(最多 8 位 R ,G和 B ;时钟,启用,hsync和 vsync )。该接口可用作 GPIO 组 0 上的备用功能 2 (ALT2):
请注意,有多种方法可以在 565 、 666 或 24 位模式下在 DPI 输出引脚上显示颜色值(请参见下表和下面的" dpi_output_format"参数的" output_format"部分):
禁用其他 GPIO 外设
请注意,必须禁用所有其他使用冲突 GPIO 引脚的外设覆盖。在 config .txt中,请小心注释掉或反转所有启用 I2C 或 SPI 的 dtparams :
dtparam = i2c_arm =关闭
dtparam = spi = off
控制输出格式
输出格式(时钟,颜色格式,同步极性,启用)可以通过魔术数(无符号整数或以 0x 开头的十六进制值)传递给 config .txt中的 dpi _output_format参数,该参数由以下字段创建:
output_format =(dpi_output_format >> 0)&0xf;
rgb_order =(dpi_output_format >> 4)&0xf;
output_enable_mode =(dpi_output_format >> 8)&0x1;
invert_pixel_clock =(dpi_output_format >> 9)&0x1;
hsync_disable =(dpi_output_format >> 12)&0x1;
vsync_disable =(dpi_output_format >> 13)&0x1;
output_enable_disable =(dpi_output_format >> 14)&0x1;
hsync_polarity =(dpi_output_format >> 16)&0x1;
vsync_polarity =(dpi_output_format >> 17)&0x1;
output_enable_polarity =(dpi_output_format >> 18)&0x1;
hsync_phase =(dpi_output_format >> 20)&0x1;
vsync_phase =(dpi_output_format >> 21)&0x1;
output_enable_phase =(dpi_output_format >> 22)&0x1;
输出格式:
1:DPI_OUTPUT_FORMAT_9BIT_666
2:DPI_OUTPUT_FORMAT_16BIT_565_CFG1
3:DPI_OUTPUT_FORMAT_16BIT_565_CFG2
4:DPI_OUTPUT_FORMAT_16BIT_565_CFG3
5:DPI_OUTPUT_FORMAT_18BIT_666_CFG1
6:DPI_OUTPUT_FORMAT_18BIT_666_CFG2
7:DPI_OUTPUT_FORMAT_24BIT_888
rgb_order:
1:DPI_RGB_ORDER_RGB
2:DPI_RGB_ORDER_BGR
3:DPI_RGB_ORDER_GRB
4:DPI_RGB_ORDER_BRG
output_enable_mode:
0:DPI_OUTPUT_ENABLE_MODE_DATA_VALID
1:DPI_OUTPUT_ENABLE_MODE_COMBINED_SYNCS
invert_pixel_clock:
0:RGB数据在上升沿改变,在下降沿稳定
1:RGB数据在下降沿改变,在上升沿稳定。
hsync/vsync/output_enable_polarity:
0:HDMI模式的默认设置
1:倒置
hsync/vsync/oe阶段:
0:DPI_PHASE_POSEDGE
1:DPI_PHASE_NEGEDGE
注意,单个位字段均充当"反转默认行为"。
控制时间和分辨率
在 2018 年 8 月或更晚版本的固件中,以前用于设置 DPI 计时的hdmi_timings
config.txt条目已被新的dpi_timings
参数取代。如果不存在 dpi _timings参数,系统将退回到使用 hdmi _timings参数以确保向后兼容。如果都不存在并且请求自定义模式,则使用 VGAp60 的默认参数集。
dpi_group和 dpi _mode config.txt参数用于设置预定模式(HDMI使用的 DMT 或 CEA 模式),或者用户可以生成自定义模式。
要生成自定义 DPI 模式,请在[此处]启动(https://www.raspberrypi.org/forums/viewtopic.php?f=29&t=24679)。
如果设置自定义 DPI 模式,则在 config .txt中使用:
dpi_group = 2
dpi_模式= 87
这将告诉驱动程序为 DPI 面板使用自定义的" dpi_timings"(旧固件使用" hdmi_timings")时序。
dpi_timings参数指定为以空格分隔的一组参数:
dpi_timings = <h_active_pixels> <h_sync_polarity> <h_front_porch> <h_sync_pulse> <h_back_porch> <v_active_lines> <v_sync_polarity> <v_front_porch> <v_sync_pulse> <v_back_porch> <v_sync_offset <pixel> <aspect_ratio>
<h_active_pixels> =水平像素(宽度)
<h_sync_polarity> =反转 hsync 极性
<h_front_porch> =从 DE acitve边缘开始的水平前填充
<h_sync_pulse> =像素时钟中的 hsync 脉冲宽度
<h_back_porch> =从 DE 活动边缘开始的垂直后填充
<v_active_lines> =垂直像素高度(行)<v_sync_polarity> =反转 vsync 极性<v_front_porch> =从 DE 活动边缘开始的垂直前向填充
<v_sync_pulse> =像素时钟中的 vsync 脉冲宽度
<v_back_porch> =从 DE 活动边缘开始的垂直后填充
<v_sync_offset_a> =零
<v_sync_offset_b> =零
<pixel_rep> =保留为零
<frame_rate> =屏幕刷新率,以 Hz 为单位
<隔行扫描> =保留为零
<pixel_freq> =时钟频率(宽度*高度*帧速率)
<aspect_ratio> = *
*纵横比可以设置为八个值之一(选择最接近屏幕的值):
HDMI_ASPECT_4_3 = 1
HDMI_ASPECT_14_9 = 2
HDMI_ASPECT_16_9 = 3
HDMI_ASPECT_5_4 = 4
HDMI_ASPECT_16_10 = 5
HDMI_ASPECT_15_9 = 6
HDMI_ASPECT_21_9 = 7
HDMI_ASPECT_64_27 = 8
叠加层
Linux设备树叠加层用于将 GPIO 引脚切换到正确的模式(替代功能 2 )。如前所述,GPU负责驱动 DPI 显示。因此,没有 Linux 驱动程序。覆盖只是简单地正确设置了 GPIO alt功能。
提供了一个"全脂" DPI覆盖(dpi24.dtb),它将所有 28 个 GPIO 设置为 ALT2 模式,提供了全 24 位彩色总线以及 h 和 v 同步,使能和像素时钟。注意,这使用了 bank 0 GPIO引脚的"全部"。
提供了第二个覆盖(vga666.dtb),用于在 666 模式下驱动 VGA 监视器信号,不需要时钟和 DE 引脚(GPIO 0和 1 ),仅需要 GPIO 4-21即可用于颜色(使用模式 5 )。
这些覆盖图相当简单,用户可以对其进行编辑以创建自定义覆盖图,从而仅启用其特定用例所需的引脚。例如,如果使用的是使用 vsync ,hsync,pclk和 de 的 DPI 显示,但处于 RGB565 模式(模式 2 ),则可以编辑 dpi24 .dtb覆盖,以便不将 GPIO 20-27切换到 DPI 模式,并且因此可以用于其他目的。
示例 config .txt设置
Gert VGA666适配器
此设置适用于Gert VGA适配器。
请注意,上述 GitHub 链接中的文档中提供的说明有些过时,因此请使用以下设置。
dtoverlay = vga666
enable_dpi_lcd = 1
display_default_lcd = 1
dpi_group = 2
dpi_模式= 82
800x480液晶面板
注意:此产品已使用Adafruit的 DPI 附加板和 800x480 LCD面板进行了测试。
dtoverlay = dpi24
overscan_left = 0
overscan_right = 0
overscan_top = 0
overscan_bottom = 0
framebuffer_width = 800
framebuffer_height = 480
enable_dpi_lcd = 1
display_default_lcd = 1
dpi_group = 2
dpi_模式= 87
dpi_output_format = 0x6f005
dpi_timings = 800 0 40 48 88 480 0 13 3 32 0 0 0 0 60 0 32000000 6