前言

概述

本文为实现开机画面提供了基本的功能函数和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接口输出时,由于这些接口使用到的管脚数量较多,管脚的复用关系可能较为复杂,接口的某些管脚可能与内核中某些模块的管脚存在冲突,用户需要提前分析并排除这些冲突,比如关闭内核中与接口存在冲突的模块。否则开机画面可能受内核启动过程的影响而显示异常。