K230视频输出API参考
1. 概述
VO(Video Output,视频输出)模块主动从内存相应位置读取视频和图形数据,并通过相应的显示设备输出视频和图形。芯片支持的显示/回写设备、视频层和图形层情况。
LAYER层支持:
LAYER0 | LAYER1 | LAYER2 | |
---|---|---|---|
输入格式 | YUV420 NV12 | YUV420 NV12 | YUV420 NV12 YUV422 NV16 ? |
最大分辨率 | 1920x1080 | 1920x1080 | 1920x1080 |
叠加显示 | 支持可配置叠加顺序 | 支持可配置叠加顺序 | 支持可配置叠加顺序 |
Rotation | √ | √ | - |
Scaler | √ | - | - |
Mirror | √ | √ | - |
Gray | √ | √ | - |
独立开关 | √ | √ | √ |
OSD 层支持
OSD0 | OSD1 | OSD2 | OSD3 | |
---|---|---|---|---|
输入格式 | RGB888 RGB565 ARGB8888 Monochrome-8-bit RGB4444 RGB1555 | RGB888 RGB565 ARGB8888 Monochrome-8-bit RGB4444 RGB1555 | RGB888 RGB565 ARGB8888 Monochrome-8-bit RGB4444 RGB1555 | RGB888 RGB565 ARGB8888 Monochrome-8-bit RGB4444 RGB1555 |
最大分辨率 | 1920x1080 | 1920x1080 | 1920x1080 | 1920x1080 |
叠加显示 | 支持可配置叠加顺序 | 支持可配置叠加顺序 | 支持可配置叠加顺序 | 支持可配置叠加顺序 |
ARGB 265 等级ALPHA | √ | √ | √ | √ |
独立开关 | √ | √ | √ | √ |
1.1 硬件描述
本次硬件介绍是以evblp3 做的介绍
1.1.1 Mipi接口
在evblp3 上的硬件引脚如下:
- 屏幕触摸iic用的iic4 (scl:gpio7,sda gpio8)
- 屏幕触摸 rst:gpio29, int:gpio30
- 屏幕的rst:gpio9,backlight:gpio31
- Mipi的引脚和屏幕的引脚一一对应
1.1.2 实物图
- 图中1为mipi接口,采用的是软排线
- 图中2为mipi信号测试点、包含四路data线和一路clk线
1.2 软件描述
视频输出软件配置分为3部分配置:phy 配置、dsi配置、VO配置,
1.2.1 PHY的配置流程
phy的频率需要配置三个参数、计算PLL、配置voc、配置freq,根据这三个参数就可以确定txphy的频率,每一个的参数计算如下。
1.2.1.1 计算phy的pll
数据速率由 PLL 输出时钟相位频率的两倍给出:数据速率 (Gbps) = PLL Fout(GHz) * 2,输出频率是输入参考频率和倍频/分频比的函数。 计算phy 的pll共分为4种范围做的计算,不同的频率对应着不同的频率,它可以通过以下方式确定:
M | m+2 |
---|---|
N | n+1 |
Fclkin | 24M |
For:
然而在这个需要遵循下边的限制:
For:
For:
For:
上边的每一个for 对应着一个pll的等级、不同的等级对应着不同的计算公式和限制,计算示例如下:
Example:
mipi 的速率为 445.5M:所以pll的速率就是222.75M,应该选择第二个公式,计算如下
222750000 = 1M / 2N = (m+2) / 2(n+1) * 24000000 , 整理完成公式如下:
222.75n + 198.75 = 12m ,通过excel 计算如下:
得出来的m = 295 ,n = 15。
配置pll中的m 和n都是整数值、如果所有的值都不是整数,就需要在m 和 n的值做加1和减1处理、反推回去看哪个频率理你需要的最近,再去验证是否可用,不可以就重复上边的操作。
1.2.1.2 配置phy的voc
配置phy 的voc 可以根据表格查询即可:
Example:
mipi 的速率为 445.5M:所以pll的速率就是222.75M,voc = 010111 = 0x17
1.2.1.3 配置freq
配置phy 的freq 可以根据表格查询即可:
Example:
mipi 的速率为 445.5M:pll的速率就是222.75M,freq 选择0100101, 配置这个的时候需要将最高位bit[7] = 1,所有freq = 10100101= 0xa5
1.2.2 DSI的配置
DSI(Display Serial Interface)是MIPI 定义的一组通信协议的一部分联盟,主要实现 MIPI DSI 规范中定义的所有协议功能的数字控制器,包含了具有两个和四个通道的双向 PHY。
DSI在软件中主要配置屏幕显示用的timing和发送命令的功能。
1.2.2.1 配置显示器的timing
每个厂家的屏幕都会有一组时序用来做屏幕的控制,主要包含了帧的控制时序和一行的控制时序,如下图所示:
DSI中也会用到这些参数、配置的时序和屏幕一致即可。
1.2.2.2 DSI的命令下发
需要dsi 先进入lp模式、然后就可以发送命令,需要的api如下:
发送的数据是按照8位发送的,会根据数量自动选择发送长包还是短包。
1.2.2.3 DSI 的自测模式
DSI 自测模式会按照自己配置的dsi timing 产生color bar 的数据发送出去,这样不依赖vo从ddr读取数据,测试模式显示如下图:
DSI 和vo之间采用的是24位接口,所以配置出来的color bar 是上图的效果,使用方法只需要配置完成dsi之后使能color bar即可,api如下
1.2.3 VO的配置
VO(video output)主要是VO(Video Output,视频输出)模块主动从内存相应位置读取视频和图形数据,并通过相应的显示设备输出视频和图形,VO这部分包含两个配置、一个是timing 的配置、另一个是视频层的配置
1.2.3.1 VO 时序配置
VO的时序配置和dsi 的时序配置采用的一样的配置参数,具体的行和列一样,看dsi timing 介绍即可
V1.2.3.2 O的layer层配置
VO layer 层目前支持3个layer层、4个osd层。Layer层只能显示yuv的图像格式(layer0 和 layer1 支持的功能在概述中的图表)。
1.2.3.3 VO 的回写功能配置
VO 还支持回写功能、这个可以验证VO配置的是否正确,VO配置完成之后会将数据写回到ddr 当中,方便验证VO的配置是否出现异常
1.2.4 VO模块的调试方法
1.2.4.1 屏幕的测试方法
- 可以通过LP命令配置屏幕进入自测模式、看产生的图像是否正常
- 通过LP命令读取屏幕寄存器看是否有返回
1.2.4.2 DSI 的测试方法
- 配置完dsi之后,让屏幕进入自测模式,量取信号看时候正常,也可以看屏幕是否产生color bar 的图像
- 查看phy的err 状态寄存器、看是否有err 状态,可以通过proc查看
1.2.4.3 VO的测试方法
- VO配置完成之后、打开writeback 功能,查看是否和配置的要求一致
- 读取DSI的err状态寄存器,查看VO和dsi之间数据传输是否出现underflow和overflow,如果出现、适当的调整timing再次尝试
2. API 参考
2.1 TXPHY
该功能模块提供以下API:
2.1.1 kd_mpi_set_mipi_phy_attr
【描述】
设置phy 的频率
【语法】
k_s32 kd_mpi_set_mipi_phy_attr(k_vo_mipi_phy_attr *attr)
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
attr | Phy 的频率结构描述 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功。 |
非0 | 失败,参见错误码。 |
【芯片差异】
无
【需求】
- 头文件: mpi_vo_api.h k_vo_comm.h
- 库文件:libvo.a
【注意】
无
【举例】
无
【相关主题】
无
2.2 DSI
该功能模块提供以下API:
- kd_mpi_dsi_set_attr
- kd_mpi_dsi_enable
- kd_mpi_dsi_send_cmd
- kd_mpi_dsi_read_pkg
- kd_mpi_dsi_set_test_pattern
- kd_mpi_dsi_set_lp_mode_send_cmd
2.2.1 kd_mpi_dsi_set_attr
【描述】
配置dsi 属性参数
【语法】
k_s32 kd_mpi_dsi_set_attr(k_display_mode *attr)【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
attr | dsi 属性参数 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功。 |
非0 | 失败,参见错误码。 |
【芯片差异】
无
【需求】
- 头文件: mpi_vo_api.h k_vo_comm.h
- 库文件:libvo.a
【注意】
无
【举例】
无
【相关主题】
无
2.2.2 kd_mpi_dsi_enable
【描述】
打开dsi
【语法】
k_s32 kd_mpi_dsi_enable(void)
【参数】
无
【返回值】
返回值 | 描述 |
---|---|
0 | 成功。 |
非0 | 失败,参见错误码。 |
【芯片差异】
无
【需求】
- 头文件: mpi_vo_api.h
- 库文件:libvo.a
【注意】
无
【举例】
无
【相关主题】
无
2.2.3 kd_mpi_dsi_send_cmd
【描述】
Dsi 发送命令
【语法】
k_s32 kd_mpi_dsi_send_cmd(k_u8 *data, k_s32 cmd_len)
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
data | 发送的数据 | 输入 |
cmd_len | 数据长度 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功。 |
非0 | 失败,参见错误码。 |
【芯片差异】
无
【需求】
- 头文件: mpi_vo_api.h
- 库文件:libvo.a
【注意】
无
【举例】
无
【相关主题】
无
2.2.4 kd_mpi_dsi_read_pkg
【描述】
Dsi 读取命令
【语法】
k_s32 kd_mpi_dsi_read_pkg(k_u8 *rx_buf, k_s32 cmd_len)
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
rx_buf, | 接受的数据 | 输入 |
cmd_len | 数据长度 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功。 |
非0 | 失败,参见错误码。 |
【芯片差异】
无
【需求】
- 头文件: mpi_vo_api.h
- 库文件:libvo.a
【注意】
无
【举例】
无
【相关主题】
无
2.2.5 kd_mpi_dsi_set_test_pattern
【描述】
配置dsi 进入自测模式
【语法】
k_s32 kd_mpi_dsi_set_test_pattern(void)
【参数】、
无
【返回值】
返回值 | 描述 |
---|---|
0 | 成功。 |
非0 | 失败,参见错误码。 |
【芯片差异】
无
【需求】
- 头文件: mpi_vo_api.h
- 库文件:libvo.a
【注意】
无
【举例】
无
【相关主题】
无
2.2.6 kd_mpi_dsi_set_lp_mode_send_cmd
【描述】
配置dsi 进入lp mode 发送命令
【语法】
k_s32 kd_mpi_dsi_set_lp_mode_send_cmd(void)
【参数】
无
【返回值】
返回值 | 描述 |
---|---|
0 | 成功。 |
非0 | 失败,参见错误码。 |
【芯片差异】
无
【需求】
- 头文件: mpi_vo_api.h
- 库文件:libvo.a
【注意】
无
【举例】
无
【相关主题】
无
2.3 VO
- kd_mpi_vo_init
- kd_mpi_vo_set_dev_param
- kd_mpi_vo_enable_video_layer
- kd_mpi_vo_disable_video_layer
- kd_mpi_vo_enable
- kd_mpi_vo_chn_insert_frame
- kd_mpi_vo_chn_dump_frame
- kd_mpi_vo_chn_dump_release
- kd_mpi_vo_osd_enable
- kd_mpi_vo_osd_disable
- kd_mpi_vo_set_video_osd_attr
- kd_mpi_vo_set_wbc_attr
- kd_mpi_vo_enable_wbc
- kd_mpi_vo_disable_wbc
- kd_display_reset
- kd_display_set_backlight
- kd_mpi_vo_set_user_sync_info
- kd_mpi_vo_draw_frame
2.3.1 kd_mpi_vo_init
【描述】
Vo 初始化默认参数
【语法】
k_s32 kd_mpi_vo_init(void);
【参数】
无
【返回值】
返回值 | 描述 |
---|---|
0 | 成功。 |
非0 | 失败,参见错误码。 |
【芯片差异】
无
【需求】
- 头文件: mpi_vo_api.h
- 库文件:libvo.a
【注意】
无
【举例】
无
【相关主题】
无
2.3.2 kd_mpi_vo_set_dev_param
【描述】
Dsi 发送命令
【语法】
k_s32 kd_mpi_vo_set_dev_param(k_vo_pub_attr *attr)
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
attr | 视频输出设备公共属性结构体指针。 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功。 |
非0 | 失败,参见错误码。 |
【芯片差异】
无
【需求】
- 头文件: mpi_vo_api.h k_vo_comm.h
- 库文件:libvo.a
【注意】
无
【举例】
无
【相关主题】
无
2.3.3 kd_mpi_vo_enable_video_layer
【描述】
配置layer 层属性参数
【语法】
k_s32 kd_mpi_vo_enable_video_layer(k_vo_layer layer)
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
layer | 视频输出视频层号 取值范围 【0 – K_MAX_VO_LAYER_NUM】 | 输入 |
attr | 视频层属性结构体指针 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功。 |
非0 | 失败,参见错误码。 |
【芯片差异】
无
【需求】
- 头文件: mpi_vo_api.h