初始化 DSI 总线

esp_lcd_dsi_bus_handle_t dsi_bus = NULL;

esp_lcd_dsi_bus_config_t bus_config = {

.bus_id = 0, // DSI 控制器编号

.num_data_lanes = 2, // 数据通道数量(1-2)

.phy_clk_src = MIPI_DSI_PHY_CLK_SRC_DEFAULT, // PHY 时钟源

.lane_bit_rate_mbps = 1300, // 每通道比特率(Mbps)

};

ESP_ERROR_CHECK(esp_lcd_new_dsi_bus(&bus_config, &dsi_bus));

其中数据通道数量(num_data_lanes)值取决于 LCD IC 所使用并支持的通道数,部分 LCD IC 可通过寄存器配置所使用的通道数,而一些 LCD IC 所使用的通道数是固定的。值的注意的是,ESP32-P4 最大支持 2 lanes,即支持 1-lane 和 2-lane 两种 LCD 通道配置。

每通道比特率(lane_bit_rate_mbps)计算方法:

示例计算:

分辨率: 800×1280(hspw=4, hbp=20, hfp=20;vspw=4, vbp=20, vfp=20)

刷新率: 60Hz

色深: 24bpp

数据通道数: 2

计算原始数据速率

pixel_clock = 水平总像素 × 垂直总像素 × 刷新率

raw_data_rate = pixel_clock × bits_per_pixel

示例计算:

pixel_clock = (800+20+20+4) × (1280+20+20+4) × 60 = 62.4MHz

raw_data_rate = 62.4M × 24 = 1497.6Mbps

考虑 DSI 协议开销

8b/10b 编码: 实际数据率需要乘以 1.25

协议包头和 ECC: 额外增加约 10-15% 开销

protocol_data_rate = raw_data_rate × 1.25 × 1.15

示例计算:

protocol_data_rate = 1497.6 × 1.25 × 1.15 = 2153.55Mbps

分配到各数据通道

lane_bit_rate = protocol_data_rate ÷ num_data_lanes

示例计算:

lane_bit_rate = 2153.55 ÷ 2 = 1076.78Mbps

预留带宽余量(建议 20%)

final_bit_rate = lane_bit_rate × 1.2

示例计算:

final_bit_rate = 1076.78 × 1.2 ≈ 1292Mbps

因此建议 lane_bit_rate_mbps 值取 final_bit_rate,在示例计算场景下为 1300 左右。注意,在 ESP32P4 平台下,lane_bit_rate_mbps 最大值不能超过 1500,同时推荐最小值不要低于 480。