前言¶
概述
本文为实现开机画面提供了基本的功能函数和boot命令行,用户可以根据具体应用进行配置。
说明: 未有特殊说明,SS927V100与SS928V100,SS522V100与SS524V100内容完全一致。
产品版本
与本文档相对应的产品版本如下。
产品名称 |
产品版本 |
|---|---|
SS928 |
V100 |
SS626 |
V100 |
SS524 |
V100 |
SS522 |
V100 |
SS522 |
V101 |
SS528 |
V100 |
SS625 |
V100 |
SS927 |
V100 |
读者对象
本文档(本指南)主要适用于以下工程师:
技术支持工程师
软件开发工程师
符号约定
在本文中可能出现下列标志,它们所代表的含义如下。
符号 |
说明 |
|---|---|
|
表示如不避免则将会导致死亡或严重伤害的具有高等级风险的危害。 |
|
表示如不避免则可能导致死亡或严重伤害的具有中等级风险的危害。 |
|
表示如不避免则可能导致轻微或中度伤害的具有低等级风险的危害。 |
|
用于传递设备或环境安全警示信息。如不避免则可能会导致设备损坏、数据丢失、设备性能降低或其它不可预知的结果。 “须知”不涉及人身伤害。 |
|
对正文中重点信息的补充说明。 “说明”不是安全警示信息,不涉及人身、设备及环境伤害信息。 |
修订记录
修订记录累积了每次文档更新的说明。最新版本的文档包含以前所有文档版本的更新内容。
文档版本 |
发布日期 |
修改说明 |
|---|---|---|
00B01 |
2025-09-15 |
第1次临时版本发布。 |
开机画面使用指南¶
功能简介¶
Uboot代码提供功能如下:
提供boot环境下VO设备的开启和关闭,涵盖VO典型接口和时序。
提供boot环境下VO图形层的开启和关闭。
提供boot环境下VO视频层的开启和关闭。
提供boot环境下JPEG硬件解码输出YVU SEMI-PLANAR420格式图像,配合VO视频层显示。
VO图形层支持显示格式为ARGB1555或16位深BMP格式,视频层默认显示格式为YVU SEMI-PLANAR420。
boot命令行¶
startvo:启动VO设备
参数:设备号,接口类型,时序
# help startvo startvo - open vo device with a certain output interface. - startvo [dev intftype sync]
<dev>:设备号,请参见表1
<intftype>:接口类型,请参见表1
<sync>:时序类型
0(PAL), 1(NTSC), 2(960H_PAL), 3(960H_NTSC) 4(640x480_60), 5(480P60), 6(576P50), 7(800x600_60) 8(1024x768_60), 9(720P50), 10(720P60), 11(1280x800_60) 12(1280x1024_60),13(1366x768_60), 14(1400x1050_60),15(1440x900_60) 16(1680x1050_60),17(1080P24), 18(1080P25), 19(1080P30) 20(1080I50), 21(1080I60), 22(1080P50), 23(1080P60) 24(1600x1200_60), 25(1920x1200_60),26(1920x2160_30),27(2560x1440_30) 28(2560x1440_60),29(2560x1600_60),30(3840x2160_24),31(3840x2160_25) 32(3840x2160_30),33(3840x2160_50),34(3840x2160_60),35(4096x2160_24) 36(4096x2160_25),37(4096x2160_30),38(4096x2160_50),39(4096x2160_60) 40(7680x4320_30),41(240x320_50), 42(320x240_50), 43(240x320_60) 44(320x240_60), 45(800x600_50), 46(720x1280_60), 47(1080x1920_60) 48(user)
【注意】
如果设备已经使能,调用此命令则失败,不支持重复使能。
stopvo:关闭VO设备
参数:设备号
# help stopvo stopvo - stopvo - close interface of vo device. - stopvo [dev]
<dev>:设备号,见表1
【注意】
设备禁用前必须先禁用该设备上的视频层。
startvl:启动视频层
参数:视频层号,图像地址(解码后),行宽,显示位置和大小(x,y,w,h)
# help startvl startvl - startvl - open video layer. - startvl [layer addr stride x y w h]
<layer>:视频层号,请参见表1
<addr>:图像地址
<stride>:图像存储行宽(stride)
<x,y,w,h>:显示位置和大小
【注意】
视频层使能前必须保证该视频层所绑定的设备处于使能状态。
stopvl:关闭视频层
参数:视频层号
# help stopvl stopvl - stopvl - close video layer. - stopvl [layer]
<layer>:视频层号,请参见表1
startgx:启动图形层
参数:图形层号,图像地址,行宽,显示位置和大小(x,y,w,h),图像类型
# help startgx startgx - open graphics layer. - startgx [layer addr stride x y w h type]
<layer>:图形层号,请参见表1
<addr>:图像地址
<stride>:图像存储行宽(stride)
<x,y,w,h>:显示位置和宽高
<type>:图像类型,0:ARGB1555格式,1:16位深BMP格式
【注意】
图形层使能前必须保证该图形层所绑定的设备处于使能状态。
stopgx:关闭图形层
参数:图形层号
# help stopgx stopgx - close graphics layer. - stopgx [layer]
<layer>:图形层号,请参见表1
setvobg:设置设备背景色
参数:图形层号
# help setvobg setvobg - setvobg - set vo background color. - setvobg [dev color]
<dev>:设备号,请参见表1
<color>:rgb color space
decjpg:启动JPEG解码
参数:解码输出格式
# help decjpg decjpg - jpgd - decode jpeg picture. - decjpg [format]
<format> : 0: semi-planar yvu420
使用decjpg需要设置环境变量jpeg_addr、jpeg_size、jpeg_emar_buf、vobuf。
jpeg_addr是用于存放JPEG图片原始码流的地址;
jpeg_size是JPEG图片原始码流大小;
jpeg_emar_buf是解码JPEG图片过程中使用到的buffer地址,大小为256KB。
vobuf是解码JPEG图片后输出图像的存放地址。
如:
#setenv jpeg_addr 0x90000000 #setenv jpeg_size 0xb85f9 #setenv jpeg_emar_buf 0x96000000 #setenv vobuf 0xa0000000
表 1 解决方案差异
解决方案 |
设备 |
视频层 |
图形层 |
接口类型 |
|---|---|---|---|---|
SS528V100/SS625V100 |
{0,1,2} |
{0,1,3} |
{4,5,7} |
1: CVBS 2: VGA 8: BT.1120 16: HDMI |
SS524V100 |
{0,1,2} |
{0,1,3} |
{4,5,7} |
1: CVBS 2: VGA 4: BT.656 8: BT.1120 16: HDMI |
SS522V101 |
{0, 2} |
{0, 3} |
{4, 7} |
1: CVBS 2: VGA 4: BT.656 8: BT.1120 16: HDMI 128: RGB_16BIT 256: RGB_18BIT 512: RGB_24BIT |
SS928V100 |
{0, 1} |
{0, 1} |
{3, 4} |
1: CVBS 4: BT.656 8: BT.1120 16: HDMI 32: RGB_6BIT 64: RGB_8BIT 128: RGB_16BIT 256: RGB_18BIT 512: RGB_24BIT 1024: MIPI 2048: MIPI_SLAVE |
SS626V100 |
{0,1,2} |
{0,1,3} |
{4,5,8} |
1: CVBS 2: VGA 4: BT.656 8: BT.1120 16: HDMI 4096: HDMI1 |
说明:
如果使用用户时序,则需要自行修改文件: product\ot_osd\vo\arch\xxx\hal\drv_vo_dev.c或product\ot_osd\vo\arch\xxx\hal\drv_vo_dev.c,该文件中全局变量g_vo_user_sync_timing用于配置时序结构,g_vo_user_sync_info用于配置时钟相关信息。该结构体中各成员配置方法见《MPP 媒体处理软件V5.0开发参考》中“4 视频输出”章节ot_vo_user_sync_info数据项。
HDMI接口不支持用户时序。
如果使用BT.1120接口输出,用户需要自行开发BT.1120驱动。
同源输出:不同接口同源输出设置方法,同源输出支持时序见《MPP媒体处理软件V5.0开发参考.pdf》中“4 视频输出”章节“ot_vo_pub_attr”数据项。
设备和接口时序:设备和接口支持的时序见《MPP 媒体处理软件V5.0 开发参考》中“4 视频输出”章节“ot_vo_pub_attr”数据项。
管脚复用:接口BT.1120、BT.656、VGA、RGB等涉及到的管脚及其复用关系,用户需要自行配置。
如果使用MIPI或者MIPI_SLAVE接口输出,关于MIPI的 “设备配置”说明如下:VO为非用户时序情况下,根据cmd/cmd_vo.c中函数do_start_mipi_tx的第二个参数sync(该值默认与VO时序值一致),系统将匹配一个对应的设备配置(该配置以全局变量形式存在,如g_sample_comm_mipi_tx_1920x1080_60_config),用户可根据需要自行修改设备配置;VO为用户时序情况下,需要用户在product\ot_osd\mipi_tx\xxx\ sample_comm_mipi_tx.c文件的mipi_tx_display函数中自行填充设备配置——填充sample_mipi_tx_config结构体的combo_dev_cfg成员。
如果使用MIPI或者MIPI_SLAVE接口输出,关于MIPI的 “外设配置”说明如下:外设不需要通过MIPI来配置的情况下(如转接设备),系统默认是不发送任何命令给外设的;外设需要通过MIPI来配置的情况下(如MIPI屏幕),需要用户在product\ot_osd\mipi_tx\xxx\ sample_comm_mipi_tx.c文件的mipi_tx_display函数中自行填充屏幕配置——填充sample_mipi_tx_config结构体的cmd_count和cmd_info成员。
系统默认的VO和MIPI等用户时序下的配置仅供参考,实际业务中使用用户时序时,VO和MIPI等的配置,需要根据实际情况进行修改和适配。
绑定关系:视频层和图形层的默认设备绑定关系见《MPP 媒体处理软件V5.0 开发参考》中“4 视频输出”章节ss_mpi_vo_bind_layer接口。
boot函数¶
以下函数可供用户在boot下编码调用:
startvo
int start_vo(unsigned int dev, unsigned int type, unsigned int sync);注意:vo支持的设备号见表1**。**
stopvo
int stop_vo(unsigned int dev);startvl
int start_videolayer(unsigned int layer, unsigned long addr, unsigned int strd, ot_rect layer_rect);注意:
jpeg解码采用硬件解码,输出格式有:semi-planar yvu 420。
strd可以从解码JPEG中获取,执行decjpg(命令)后有打印,即stride。
stride需要16bytes对齐,否则图像将显示错误。
addr即semi-planar yvu 420格式图像(通过解码或其他方式获得)的地址,通过解码获得图像时,可以从环境变量vobuf中获取addr的值。视频层显示时,y分量地址默认使用addr,c分量地址默认按照如下公式计算:c_addr=addr+stride*align(rect.height, 16)。addr需要满足16bytes对齐。
仅支持Baseline码流解码。
地址addr处图像的stride、宽、高与设置的参数strd、layer_rect.width、layer_rect.height不一致时图像将显示错误。
视频层显示区域不允许超过设备显示区域,否则图像将显示错误。
视频层显示区域宽超过3840时约束无法支持semi-planar yvu 420,目前开机画面只支持semi-planar yvu 420,所以开机画面显示区域宽度最大支持3840。
stopvl
int stop_videolayer(unsigned int layer);startgx
int start_gx(unsigned int layer, unsigned long addr, unsigned int strd, ot_rect gx_rect, unsigned int type);注意:
图形层支持显示ARGB1555格式和16位深BMP格式数据,type为0表示载入ARGB1555格式,type为1表示载入16位深BMP格式,需要显示ARGB8888格式时用户需自行修改代码。载入BMP格式图像时,为了正常显示图像,该图像宽度要求8对齐并且需要事先垂直翻转。
strd为图像中一行数据占用的字节数,即stride。
stride需要16bytes对齐,否则图像将显示错误。
当type为0时,addr为图像所在的内存地址,需要满足16bytes对齐,否则图像将显示错误。
当type为1时,addr为图像(含文件头和位图信息头)所在的内存地址,需要满足(addr + bfOffBits) % 16 = 0——addr+ bfOffBits 是将地址addr偏移bfOffBits个字节(其中bfOffBits表示BMP格式文件头信息中的bfOffBits成员,该成员的偏移是0xA),以跳过文件头和信息头直接得到图像数据所在的地址,偏移后的地址需满足16字节对齐。
地址addr处图像的stride、宽、高与设置的参数strd、gx_rect.width、gx_rect.height不一致时图像将显示错误。
图形层显示区域不允许超过设备显示区域,否则图像将显示错误。
stopgx
int stop_gx(unsigned int layer);setvobg
int set_vobg(unsigned int dev, unsigned int rgb);注意:
该接口需要在startvo前设置才生效;如果startvo后设置,则在下一次startvo时生效。
建议rgb的表现形式使用0xRRGGBB格式,这样会更清晰。
decjpg
int jpeg_decode(unsigned int format);注意:
jpeg_decode用于图像解码到内存中。
这个调用需要用到四个参数,jpeg_addr是用于存放源图像的内存地址;jpeg_size是图像的大小,以字节为单位;jpeg_emar_buf是解码过程中使用到的buf地址;vobuf用于存放解码后的图像地址,也就是vo视频层用于显示的起始位置。这四个参数仅支持十六进制数输入。
涉及代码¶
该开机画面只提供了基本的功能函数,用户可以根据具体应用进行配置,尤其是解码部分可以做得更加灵活。
u-boot-2020.01
Makefile
Makefile-otproduct include/configs/xxx.h (或include/configs/xxx.h) cmd/cmd_vo.c cmd/cmd_dec.c cmd/Makefile
cmd/Makefile-otproduct
u-boot-2020.01/product/ot_osd/include
ot_common.h ot_common_video.h ot_debug.h ot_errno.h ot_math.h ot_type.h u-boot-2020.01/product/ot_osd/vo(仅列举一层目录内容)
Makefile include/
mkp/
ext_inc/
arch/
u-boot-2020.01/product/ot_osd/dec(仅列举一层目录内容) ot_type.h
jpegd.c
jpegd_drv.c
jpegd_drv.h
jpegd_entry.c
jpegd_entry.h
jpegd_error.h
jpegd.h
jpegd_image.c
jpegd_image.h
jpegd_reg.h
mjpeg_func.h
mjpeg_idct.c
mjpeg_image.c
mjpeg_mcu.c
u-boot-2020.01/product/ot_osd/mipi_tx/xxx$(或u-boot-2020.01/product/ot_osd/mipi_tx/xxx$)
ot_mipi_tx.h
ot_mipi_tx_mod_init.h
Makefile
mipi_tx.c
mipi_tx_def.h
mipi_tx.h
mipi_tx_hal.c
mipi_tx_hal.h
mipi_tx_reg.h
sample_comm_mipi_tx.c
type.h
说明:
对于SS528V100,上述“xxx”使用“ss528v100”代替,且不支持product/ot_osd目录下mipi_tx配置。
对于SS625V100,上述“xxx”使用“ss625v100”代替,且不支持product/ ot_osd目录下mipi_tx配置。
对于SS524V100,上述“xxx”使用“ss524v100”代替,且不支持product/ ot_osd目录下mipi_tx配置。
对于SS522V101,上述“xxx”使用“ss522v101”代替,且不支持product/ ot_osd目录下mipi_tx配置。
对于SS928V100,上述“xxx”使用“ss928v100”代替。
对于SS626V100,上述“xxx”使用“ss626v100”代替,且不支持product/ ot_osd目录下mipi_tx配置。
命令行示例¶
下面以SS528V100配置设备DHD0 HDMI接口的时序1080p@60输出为例。
特别说明:各解决方案DDR下载地址有所不同,根据解决方案来使用DDR地址。
设置环境变量,配置jpeg解码参数
setenv jpeg_addr 0x92000000; setenv jpeg_size 0x8f0b8; setenv jpeg_emar_buf 0x96000000; setenv vobuf 0xa0000000; saveenv
解码JPEG到内存
decjpg 0配置DHD0设备启动
startvo 0 16 24配置V0启动
startvl 0 0xa0000000 1920 0 0 1920 1080关闭V0
stopvl 0关闭DHD0设备
stopvo 0
支持硬件解码¶
uboot下开机画面支持硬件解码,硬件解码输出semi-planar yvu 420格式后可配置VO视频层显示。
平滑过渡¶
平滑过渡是指开机画面平滑切换至业务画面,期间不关闭显示输出。平滑过渡要求开机画面和业务画面使用相同的接口和时序。
须知:
HDMI平滑过渡要求进入系统后,HDMI相关属性配置和uboot中开机画面配置一致。
HDMI只支持CEA(Consumer Electronics Association,消费电子协会)时序的平滑过渡。
对于HDMI接口,HDMI接口支持的平滑过渡时序取解决方案支持时序与CEA时序交集,部分CEA时序列举如下:
5(480P60), 6(576P50), 9(720P50), 10(720P60), 18(1080P24), 19(1080P25),
20(1080P30), 23(1080P50), 24(1080P60), 30(3840x2160_24),
31(3840x2160_25), 32(3840x2160_30), 33(3840x2160_50), 34(3840x2160_60),
35(4096x2160_24), 36(4096x2160_25), 37(4096x2160_30), 38(4096x2160_50),
39(4096x2160_60)
注意事项¶
开机画面启动之后,在系统运行后加载驱动,可能会受到配置crg的驱动sys_config.ko的影响,如果有影响,则需要修改sys_config.ko。
配置开机画面通过BT.1120接口显示时,需要自行移植实现BT.1120转HDMI的外设驱动。
配置开机画面通过BT.656接口显示时,需要自行移植实现BT.656的外设驱动。
配置开机画面通过RGB接口显示时,需要自行移植实现RGB的外设驱动。
配置开机画面通过MIPI、MIPI_SLAVE接口显示时,需要自行移植实现MIPI、MIPI_SLAVE的外设驱动。
开机画面如果通过HDMI接口显示时,在进入系统后,如果需要保持开机画面的制式继续显示视频内容,需要在正常开启HDMI的流程中去掉设置hdmi属性(ss_mpi_hdmi_set_attr)的部分。
如果在系统启动后,用户自行配置了HDMI硬件指标参数,而不是使用默认的指标参数,请在开机画面场景下使用相关的函数(ss_mpi_hdmi_set_hw_spec, ss_mpi _hdmi_set_mod_param)设置相同的HDMI硬件指标参数。
BT.1120,BT.656,RGB6/8/16/18/24bit,MIPI_TX接口输出时,由于这些接口使用到的管脚数量较多,管脚的复用关系可能较为复杂,接口的某些管脚可能与内核中某些模块的管脚存在冲突,用户需要提前分析并排除这些冲突,比如关闭内核中与接口存在冲突的模块。否则开机画面可能受内核启动过程的影响而显示异常。




