3556v200 MIPI屏调试指南
1 概述 :
a、 海思屏幕调试目前调通的只有MIPI接口屏幕,此文档只对海思平台MIPI屏幕调试做说明,目的做到不用过多的熟悉海思给出的文档,参照此文档实现新屏适配。
b、 调试屏幕还需依赖海思提供的以下两个文档:
RGB_MIPI屏幕时钟时序计算.xlsx
Hi3556V200 2K Mobile Camera SoC 用户指南.pdf
c、 屏幕相关代码路径:reference\hal\screen,此目录下海思sdk给出了几个调试好的屏幕,我们参考ota7290b进行说明。
其中我们主要关注以下成员,其他成员保持ota7290b公版代码不变
HAL_SCREEN_OTA7290B_Init
HAL_SCREEN_OTA7290B_GetAttr
HAL_SCREEN_OTA7290B_SetBackLightState
HAL_SCREEN_OTA7290B_GetBackLightState
HAL_SCREEN_OTA7290B_SetLuma
HAL_SCREEN_OTA7290B_GetLuma
1、HAL_SCREEN_OTA7290B_Init
此函数主要做以下事情:
a、第一步加载mipi_rx驱动,mipi_tx_module_init()为为海思sdk提供的mipi_rx驱动里写好的接口,在我们调试其它屏幕时这一步请与ota7290b保持一致,不需要变更。
b、第二步对屏幕进行复位操作,这一步需要特别注意,需要和屏厂确认时序,在以往点屏过程中这里容易出错,在这里操作gpio直接利用海思封装好的himm,himd接口进行读写寄存器,特别注意读写寄存器时要进行位操作,避免影响其他寄存器。
c、第三步打开屏幕背光,这里应根据项目需求确定是GPIO高低电平还是采用脉宽调制,操作时要注意采用不同形式对其gpio进行引脚重用和脉宽调制配置,具体操作参照ota7290b进行实现。
d、第四部主要是通过HI_MIPI_TX_SET_DEV_CFG将 combo_dev_cfg_t结构体配置下去****(*ioctl(s_s32HALSCREENFd,HI_MIPI_TX_SET_DEV_CFG, &mipiDevCfg)****)*
下面通过一个示例说明mipiDevCfg中的各项参数怎么配置
示例:
假设从屏幕厂商中拿到的数据为:
- MIPI Tx 输出模式为 DSI_VIDEO
- 数据格式为 BURST_MODE
- 输出数据类型为 OUT_FORMAT_RGB_24_BIT
且给出了屏幕所需要的时序信息:
- 水平有效区(HACT): 854(像素)
- 水平后消隐(HBP): 12(像素)
- 水平前消隐(HFP): 6(像素)
- 水平同步时序(HSA): 2(像素)
- 垂直有效区(VACT): 480(行数)
- 垂直后消隐(VBP): 48(行数)
- 垂直前消隐(VFP): 40(行数)
- 垂直同步时序(VSA): 24(行数)
- 设备帧率为 60fps
直接将我们从屏厂得到的屏幕时序信息填入RGB_MIPI屏幕时钟时序计算.xlsx中MIPI屏幕属性一项中可以自动计算出相应的MIPI设备属性参数值即mipiDevCfg结构体的sync_info、phy_data_rate、pixel_clk这几项的值。表中VO用户时序参数值后续我们会用到。
成员名称 | 描述 |
---|---|
devno | MIPI Tx 设备号,配 0 |
lane_id | 4lane:配成{0,1,2,3} 3lane:配成{0,1,2,-1}2lane:配成{0,1,-1,-1} 1lane:配成{0,-1,-1,-1}未使用的 lane 设置为-1 |
output_mode | MIPI Tx 输出模式。参数选择范围: OUTPUT_MODE_CSI、OUTPUT_MODE_DSI_VIDEO、OUTPUT_MODE_DSI_CMD。三种参数分别表示了 MIPI Tx 不同的数据输出模式。具体选择哪种输出模式, 参考屏幕说明书。 |
output_format | VIDEO 模式下的数据格式。参数选择范围: BURST_MODE、NON_BURST_MODE_SYNC_PULSES、NON_BURST_MODE_SYNC_EVENTS。三种模式下,传递的数序和数据包位置不同, 具体根据特定屏要求赋值。 参考屏幕说明书。如果 output_mode_t 属性为 OUTPUT_MODE_DSI_CMD,本属性配置不生效。 |
video_mode | MIPI Tx 输出数据类型。参数选择范围: OUT_FORMAT_RGB_16_BIT、OUT_FORMAT_RGB_18_BIT、OUT_FORMAT_RGB_24_BIT、OUT_FORMAT_YUV420_8_BIT_NORMAL、OUT_FORMAT_YUV420_8_BIT_LEGACY、OUT_FORMAT_YUV422_8_BIT。参数表示的是 MIPI Tx 发送的数据包中数据的格式, 根据特定屏要求赋值。 参考屏幕说明书 |
e、第五步主要是配置 MIPI Tx 屏幕初始化序列
SDK 提供了结构体 cmd_info_t,如需将该结构体中每一项都赋值, 可通过HI_MIPI_TX_SET_CMD 配置下去,建议在 HI_MIPI_TX_ENABLE 之前调用, 此时mipi 工作于 LP 模式,数据以低速发送,兼容性较好,cmd_info_t 结构体定义如下所示。
MIPI 命令一般由,数据类型+数据地址+数据索引+数据 1 +数据 2+…+数据 N,数据索引为数据的个数。 数据地值和数据一般为 16 位。
cmd_info_t 结构体赋值示意表:
成员名称 | 描述 |
---|---|
devno | MIPI Tx 设备号,配 0 |
data_type | 写命令数据类型, 即 DCS(DisplayCommandSet)(指令集)中的Data Type。 根据数据个数选择数据类型。类型 1、当只有寄存器地址没有数据时, 数据类型选择 0x5或者 0x13, 一般情况下通用,具体使用哪个请咨询厂商或者查询屏幕说明书;类型 2、 有寄存器地址和一个数据时, 数据类型选择 0x15 或者 0x23, 一般情况下通用, 具体使用请咨询厂商;类型 3、 有寄存器地址且数据个数大于等于两个数据类型一般用 0x39 或者 0x29, 一般情况下通用,具体使用请咨询厂商 |
cmd_size | 数据类型个数。但是只有大于或等于两个数据时才用来表示数据个数。类型 1、 当没有数据时, 为寄存器地址;类型 2、 当一个数据时, 低八位为地址,高八位为数据。 |
cmd | 命令数据指针。类型 1、类型 2、 当小于两个数据时,可置为 NULL;类型 3、 否则为数据。 |
下面举例说明三种配置方式:
- MIPI TX 只发送地址 cmd_info_t 结构体配置示例。当需要发送地址 0x11 时, 配置如下所示。
- MIPI TX发送地址和多个数据cmd_info_t结构体配置示例。当需要往0xe1地址上依次写数据 0xf0,0x03…0x23时配置如下所示。
f、第六步调ioctl(s_s32HALSCREENFd, HI_MIPI_TX_ENABLE)使能mipi_tx设备。
2、HAL_SCREEN_OTA7290B_GetAttr
该接口主要用于配置海思平台VO 输出序列,如下图中位置直接将"RGB_MIPI屏幕时钟时序计算.xlsx"中得到的VO用户时序参数值填上即可。
3、HAL_SCREEN_OTA7290B_SetBackLightState
此接口用于设置当前屏幕背光打开还是关闭,应注意区分背光控制方式(gpio? PWM?),相关操作参考ota7290b。
4、HAL_SCREEN_OTA7290B_GetBackLightState
此接口用于得到当前屏幕背光的状态,相关操作参考ota7290b。
5、HAL_SCREEN_OTA7290B_SetLuma
此接口用于调整屏幕亮度,相关操作参考ota7290b。
6、HAL_SCREEN_OTA7290B_GetLuma
此接口用于得到屏幕亮度,,相关操作参考ota7290b。
注:
以上gpio,pwm相关寄存器需要参考"Hi3556V200 2K Mobile Camera SoC 用户指南.pdf"