API GUIDE / MIPI DSI / HAL

G32S10 MIPI DSI HAL 接口

HAL 层接口:lcd_panel_dsi_packet_t 描述一条 DSI command packet:

1. 资源模型与公开类型

1.1 初始化数据包

lcd_panel_dsi_packet_t 描述一条 DSI command packet:

字段短包语义长包语义
packet_typehal_dsi_packet_type_t 中的 short write 或 read 类型HAL_DSI_PACKET_GEN_LONG_WRITE 或 HAL_DSI_PACKET_DCS_LONG_WRITE。
cmd0_or_wc_lsb第一个命令/参数字节payload length 的低 8 位。
cmd1_or_wc_msb第二个命令/参数字节payload length 的高 8 位。
payload必须为 NULL指向待发送字节;不可为 NULL。
payload_len必须为 0必须非零,且与两个 word-count 字节一致。

lcd_panel_t.dsi_init_packets 及其计数由 hal_dsi_send_init_packets() 按数组顺序发送。

2. HAL 接口规范

2.1 HAL 接口

2.1.1 hal_dsi_init

error_code_t hal_dsi_init(dsi_regs_t *dsix, dphy_tx_regs_t *phyx, const lcd_panel_t *panel);

功能说明:初始化唯一的 DSI HAL 实例,并配置 host 和 D-PHY。

参数表:

参数类型方向说明
dsixdsi_regs_t *输入DSI host register base.
phyxdphy_tx_regs_t *输入Internal D-PHY TX register base (MIPI_DPHY_TX).
panelconst lcd_panel_t *输入Panel descriptor with DSI timing and link configuration.

返回值表:

返回值说明
IM_OK操作成功。
IM_ERR_INVALID_PARAM实例、面板或 DSI 配置非法。
IM_ERR_BUSYDSI HAL 实例已被占用。
IM_ERR_NOT_READY时钟或底层依赖未就绪。

2.1.2 hal_dsi_deinit

error_code_t hal_dsi_deinit(dsi_regs_t *dsix);

功能说明:反初始化 DSI host 和 D-PHY TX。

参数表:

参数类型方向说明
dsixdsi_regs_t *输入DSI host register base passed to hal_dsi_init().

返回值表:

返回值说明
IM_OK操作成功。
IM_ERR_INVALID_PARAM实例或参数非法。
IM_ERR_NOT_READYDSI HAL 尚未初始化。

2.1.3 hal_dsi_enter_command_mode

error_code_t hal_dsi_enter_command_mode(dsi_regs_t *dsix);

功能说明:进入 command mode,并使用低功耗 lane 发送命令包。

参数表:

参数类型方向说明
dsixdsi_regs_t *输入DSI host register base passed to hal_dsi_init().

返回值表:

返回值说明
IM_OK操作成功。
IM_ERR_INVALID_PARAM实例或参数非法。
IM_ERR_NOT_READYDSI HAL 尚未初始化。

2.1.4 hal_dsi_enter_video_mode

error_code_t hal_dsi_enter_video_mode(dsi_regs_t *dsix, const lcd_panel_t *panel);

功能说明:配置视频时序并进入 video mode。

参数表:

参数类型方向说明
dsixdsi_regs_t *输入DSI host register base passed to hal_dsi_init().
panelconst lcd_panel_t *输入Panel descriptor with DSI video timing.

返回值表:

返回值说明
IM_OK操作成功。
IM_ERR_INVALID_PARAM实例或参数非法。
IM_ERR_NOT_READYDSI HAL 尚未初始化。

2.1.5 hal_dsi_send_packet

error_code_t hal_dsi_send_packet(dsi_regs_t *dsix,
                                 uint8_t vc,
                                 const lcd_panel_dsi_packet_t *packet,
                                 uint32_t timeout_us);

功能说明:发送一条 DSI 命令数据包。

参数表:

参数类型方向说明
dsixdsi_regs_t *输入DSI host register base passed to hal_dsi_init().
vcuint8_t输入Virtual channel ID, range 0-3.
packetconst lcd_panel_dsi_packet_t *输入Packet descriptor. Long packets require payload != NULL.
timeout_usuint32_t输入Maximum FIFO wait time in microseconds.

返回值表:

返回值说明
IM_OK操作成功。
IM_ERR_INVALID_PARAM参数、VC 或 packet 描述非法。
IM_ERR_NOT_READYDSI HAL 尚未初始化。
IM_ERR_TIMEOUT等待 FIFO 或读响应超时。
IM_ERR_UNSUPPORTEDpacket 类型不受该接口支持。

2.1.6 hal_dsi_read_packet

error_code_t hal_dsi_read_packet(dsi_regs_t *dsix,
                                 uint8_t vc,
                                 const lcd_panel_dsi_packet_t *packet,
                                 uint8_t *data_out,
                                 uint32_t data_len,
                                 uint32_t timeout_us);

功能说明:发送一条 DSI 读命令并读取响应 payload。

参数表:

参数类型方向说明
dsixdsi_regs_t *输入DSI host register base passed to hal_dsi_init().
vcuint8_t输入Virtual channel ID, range 0-3.
packetconst lcd_panel_dsi_packet_t *输入Read packet descriptor.
data_outuint8_t *输出Output buffer for response bytes.
data_lenuint32_t输入Number of response bytes to read.
timeout_usuint32_t输入Maximum FIFO wait time in microseconds.

返回值表:

返回值说明
IM_OK操作成功。
IM_ERR_INVALID_PARAM参数、VC 或 packet 描述非法。
IM_ERR_NOT_READYDSI HAL 尚未初始化。
IM_ERR_TIMEOUT等待 FIFO 或读响应超时。
IM_ERR_UNSUPPORTEDpacket 类型不受该接口支持。

2.1.7 hal_dsi_send_init_packets

error_code_t hal_dsi_send_init_packets(dsi_regs_t *dsix,
                                       const lcd_panel_t *panel,
                                       uint32_t timeout_us);

功能说明:按面板定义顺序发送全部 DSI 初始化数据包。

参数表:

参数类型方向说明
dsixdsi_regs_t *输入DSI host register base passed to hal_dsi_init().
panelconst lcd_panel_t *输入Panel descriptor with dsi_init_packets.
timeout_usuint32_t输入Maximum FIFO wait time in microseconds per FIFO access.

返回值表:

返回值说明
IM_OK操作成功。
IM_ERR_INVALID_PARAM参数、VC 或 packet 描述非法。
IM_ERR_NOT_READYDSI HAL 尚未初始化。
IM_ERR_TIMEOUT等待 FIFO 或读响应超时。
IM_ERR_UNSUPPORTEDpacket 类型不受该接口支持。

2.1.8 hal_dsi_enter_ulpm

error_code_t hal_dsi_enter_ulpm(dsi_regs_t *dsix);

功能说明:请求 D-PHY clock lane 和 data lane 进入 ULPM。

参数表:

参数类型方向说明
dsixdsi_regs_t *输入DSI host register base passed to hal_dsi_init().

返回值表:

返回值说明
IM_OK操作成功。
IM_ERR_INVALID_PARAM实例非法。
IM_ERR_NOT_READYDSI HAL 尚未初始化。
IM_ERR_TIMEOUT等待 D-PHY 状态切换超时。

2.1.9 hal_dsi_exit_ulpm

error_code_t hal_dsi_exit_ulpm(dsi_regs_t *dsix);

功能说明:请求 D-PHY clock lane 和 data lane 退出 ULPM。

参数表:

参数类型方向说明
dsixdsi_regs_t *输入DSI host register base passed to hal_dsi_init().

返回值表:

返回值说明
IM_OK操作成功。
IM_ERR_INVALID_PARAM实例非法。
IM_ERR_NOT_READYDSI HAL 尚未初始化。
IM_ERR_TIMEOUT等待 D-PHY 状态切换超时。

2.1.10 hal_dsi_get_dphy_status

error_code_t hal_dsi_get_dphy_status(dsi_regs_t *dsix, uint32_t *status_out);

功能说明:读取 PHY_STATUS 寄存器。

参数表:

参数类型方向说明
dsixdsi_regs_t *输入DSI host register base passed to hal_dsi_init().
status_outuint32_t *输出Output PHY_STATUS value.

返回值表:

返回值说明
IM_OK操作成功。
IM_ERR_INVALID_PARAM实例或输出指针非法。

2.1.11 hal_dsi_get_command_status

error_code_t hal_dsi_get_command_status(dsi_regs_t *dsix, uint32_t *status_out);

功能说明:读取 CMD_PKT_STATUS 寄存器。

参数表:

参数类型方向说明
dsixdsi_regs_t *输入DSI host register base passed to hal_dsi_init().
status_outuint32_t *输出Output CMD_PKT_STATUS value.

返回值表:

返回值说明
IM_OK操作成功。
IM_ERR_INVALID_PARAM实例或输出指针非法。

2.1.12 hal_dsi_get_irq_status

error_code_t hal_dsi_get_irq_status(dsi_regs_t *dsix,
                                        uint32_t *status0_out,
                                        uint32_t *status1_out);

功能说明:读取 INT_ST0 和 INT_ST1 寄存器。

参数表:

参数类型方向说明
dsixdsi_regs_t *输入DSI host register base passed to hal_dsi_init().
status0_outuint32_t *输出Output INT_ST0 value.
status1_outuint32_t *输出Output INT_ST1 value.

返回值表:

返回值说明
IM_OK操作成功。
IM_ERR_INVALID_PARAM实例或输出指针非法。

2.1.13 hal_dsi_dump_regs

error_code_t hal_dsi_dump_regs(dsi_regs_t *dsix);

功能说明:将 DSI host 寄存器状态输出到日志。

参数表:

参数类型方向说明
dsixdsi_regs_t *输入DSI host register base.

返回值表:

返回值说明
IM_OK操作成功。
IM_ERR_INVALID_PARAMDSI 实例非法。
IM_ERR_UNSUPPORTED未启用 debug helper。