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_type | hal_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。
参数表:
| 参数 | 类型 | 方向 | 说明 |
|---|---|---|---|
dsix | dsi_regs_t * | 输入 | DSI host register base. |
phyx | dphy_tx_regs_t * | 输入 | Internal D-PHY TX register base (MIPI_DPHY_TX). |
panel | const lcd_panel_t * | 输入 | Panel descriptor with DSI timing and link configuration. |
返回值表:
| 返回值 | 说明 |
|---|---|
IM_OK | 操作成功。 |
IM_ERR_INVALID_PARAM | 实例、面板或 DSI 配置非法。 |
IM_ERR_BUSY | DSI 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。
参数表:
| 参数 | 类型 | 方向 | 说明 |
|---|---|---|---|
dsix | dsi_regs_t * | 输入 | DSI host register base passed to hal_dsi_init(). |
返回值表:
| 返回值 | 说明 |
|---|---|
IM_OK | 操作成功。 |
IM_ERR_INVALID_PARAM | 实例或参数非法。 |
IM_ERR_NOT_READY | DSI HAL 尚未初始化。 |
2.1.3 hal_dsi_enter_command_mode
error_code_t hal_dsi_enter_command_mode(dsi_regs_t *dsix);
功能说明:进入 command mode,并使用低功耗 lane 发送命令包。
参数表:
| 参数 | 类型 | 方向 | 说明 |
|---|---|---|---|
dsix | dsi_regs_t * | 输入 | DSI host register base passed to hal_dsi_init(). |
返回值表:
| 返回值 | 说明 |
|---|---|
IM_OK | 操作成功。 |
IM_ERR_INVALID_PARAM | 实例或参数非法。 |
IM_ERR_NOT_READY | DSI 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。
参数表:
| 参数 | 类型 | 方向 | 说明 |
|---|---|---|---|
dsix | dsi_regs_t * | 输入 | DSI host register base passed to hal_dsi_init(). |
panel | const lcd_panel_t * | 输入 | Panel descriptor with DSI video timing. |
返回值表:
| 返回值 | 说明 |
|---|---|
IM_OK | 操作成功。 |
IM_ERR_INVALID_PARAM | 实例或参数非法。 |
IM_ERR_NOT_READY | DSI 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 命令数据包。
参数表:
| 参数 | 类型 | 方向 | 说明 |
|---|---|---|---|
dsix | dsi_regs_t * | 输入 | DSI host register base passed to hal_dsi_init(). |
vc | uint8_t | 输入 | Virtual channel ID, range 0-3. |
packet | const lcd_panel_dsi_packet_t * | 输入 | Packet descriptor. Long packets require payload != NULL. |
timeout_us | uint32_t | 输入 | Maximum FIFO wait time in microseconds. |
返回值表:
| 返回值 | 说明 |
|---|---|
IM_OK | 操作成功。 |
IM_ERR_INVALID_PARAM | 参数、VC 或 packet 描述非法。 |
IM_ERR_NOT_READY | DSI HAL 尚未初始化。 |
IM_ERR_TIMEOUT | 等待 FIFO 或读响应超时。 |
IM_ERR_UNSUPPORTED | packet 类型不受该接口支持。 |
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。
参数表:
| 参数 | 类型 | 方向 | 说明 |
|---|---|---|---|
dsix | dsi_regs_t * | 输入 | DSI host register base passed to hal_dsi_init(). |
vc | uint8_t | 输入 | Virtual channel ID, range 0-3. |
packet | const lcd_panel_dsi_packet_t * | 输入 | Read packet descriptor. |
data_out | uint8_t * | 输出 | Output buffer for response bytes. |
data_len | uint32_t | 输入 | Number of response bytes to read. |
timeout_us | uint32_t | 输入 | Maximum FIFO wait time in microseconds. |
返回值表:
| 返回值 | 说明 |
|---|---|
IM_OK | 操作成功。 |
IM_ERR_INVALID_PARAM | 参数、VC 或 packet 描述非法。 |
IM_ERR_NOT_READY | DSI HAL 尚未初始化。 |
IM_ERR_TIMEOUT | 等待 FIFO 或读响应超时。 |
IM_ERR_UNSUPPORTED | packet 类型不受该接口支持。 |
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 初始化数据包。
参数表:
| 参数 | 类型 | 方向 | 说明 |
|---|---|---|---|
dsix | dsi_regs_t * | 输入 | DSI host register base passed to hal_dsi_init(). |
panel | const lcd_panel_t * | 输入 | Panel descriptor with dsi_init_packets. |
timeout_us | uint32_t | 输入 | Maximum FIFO wait time in microseconds per FIFO access. |
返回值表:
| 返回值 | 说明 |
|---|---|
IM_OK | 操作成功。 |
IM_ERR_INVALID_PARAM | 参数、VC 或 packet 描述非法。 |
IM_ERR_NOT_READY | DSI HAL 尚未初始化。 |
IM_ERR_TIMEOUT | 等待 FIFO 或读响应超时。 |
IM_ERR_UNSUPPORTED | packet 类型不受该接口支持。 |
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。
参数表:
| 参数 | 类型 | 方向 | 说明 |
|---|---|---|---|
dsix | dsi_regs_t * | 输入 | DSI host register base passed to hal_dsi_init(). |
返回值表:
| 返回值 | 说明 |
|---|---|
IM_OK | 操作成功。 |
IM_ERR_INVALID_PARAM | 实例非法。 |
IM_ERR_NOT_READY | DSI 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。
参数表:
| 参数 | 类型 | 方向 | 说明 |
|---|---|---|---|
dsix | dsi_regs_t * | 输入 | DSI host register base passed to hal_dsi_init(). |
返回值表:
| 返回值 | 说明 |
|---|---|
IM_OK | 操作成功。 |
IM_ERR_INVALID_PARAM | 实例非法。 |
IM_ERR_NOT_READY | DSI 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 寄存器。
参数表:
| 参数 | 类型 | 方向 | 说明 |
|---|---|---|---|
dsix | dsi_regs_t * | 输入 | DSI host register base passed to hal_dsi_init(). |
status_out | uint32_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 寄存器。
参数表:
| 参数 | 类型 | 方向 | 说明 |
|---|---|---|---|
dsix | dsi_regs_t * | 输入 | DSI host register base passed to hal_dsi_init(). |
status_out | uint32_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 寄存器。
参数表:
| 参数 | 类型 | 方向 | 说明 |
|---|---|---|---|
dsix | dsi_regs_t * | 输入 | DSI host register base passed to hal_dsi_init(). |
status0_out | uint32_t * | 输出 | Output INT_ST0 value. |
status1_out | uint32_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 寄存器状态输出到日志。
参数表:
| 参数 | 类型 | 方向 | 说明 |
|---|---|---|---|
dsix | dsi_regs_t * | 输入 | DSI host register base. |
返回值表:
| 返回值 | 说明 |
|---|---|
IM_OK | 操作成功。 |
IM_ERR_INVALID_PARAM | DSI 实例非法。 |
IM_ERR_UNSUPPORTED | 未启用 debug helper。 |