2. 开机画面使用指南

此指南用以说明如何在uboot及alios下,显示出开机画面。

3. uboot

uboot提供以下功能:

  • 提供boot环境下VO设备的开关,包含VO不同接口和时序。

  • 提供boot环境下VL视频层的开关。

  • 提供boot环境下VO设备背景色的设置。

  • VL视频层默认格式为YUV420 PLANAR。

3.1. uboot命令

  • startvo:启动VO设备

    参数:设备号,接口型别,时序。

    _images/image1.png
    • <dev> 设备号,请参考 图表1-1

    • <intf-type> 接口型别,请参考 图表1-1

    • <timing> 时序

    <> MIPI_TX、LVDS、I80不参考时序变量,会根据目前对应driver来设置时序

    CV181X上的标准时序如下:

    2(1080P24),  3(1080P25),  4(1080P30),  5(720P50) ,  6(720P60) ,
    7(1080P50) ,  8(1080P60),  9(576P50),  10(480P60),  11(800x600)
    
  • stopvo:关闭VO设备

    参数:设备号

    _images/image2.png
    • <dev> 设备号,请参考 图表1-1

  • startvl:启动VL视频层

    参数:视频层号,图文件地址,视频地址,图文件大小,VO对齐

    _images/image3.png
    • <layer> 视频层号,请参考 图表1-1

    • <addr_in> 图文件地址

    • <addr_out> 视频地址

    • <size> 图档大小

    • <alignment> VO对齐

  • stopvl:关闭VL视频层

    参数:视频层号

    _images/image4.png
    • <layer> 视频层号,请参考 图表1-1

  • setvobg:设定VO设备背景色

    参数:设备号,背景色

    • <dev> 设备号,请参考 图表1-1

    • <bgcolor> 背景色 (10bit RGB排列,bit[29:20]为R,bit[19:10]为G,bit[9:0]为B)

图表 1-1

处理器类型

设备

视频层

图形层

接口类别

CV181X

[0]

[0]

[0]

64(BT.1120), 1024(LCD_18BIT), 2048(LCD_24BIT), 4096(LCD_30BIT), 8192(MIPI_TX), 65536(I80)

图表 1-2

处理器类型

视频层最大分辨率

图形层最大分辨率

CV181X

1280x720

1280x720

3.2. uboot函数相关代码

cmd/Makefile
cmd/cvi_vo.c
drivers/video/Makefile
drivers/video/cvitek/ (包含以下子目录)
include/cvi_disp.h
include/cvi_mipi.h
include/cvi_lvds.h
include/cvi_i80.h
include/cvi_panels/ (包含以下子目录)

3.3. uboot命令范例

以下以CV181X处理器操作,配置设备DHD的时序MIPI_TX 720*1080@60输出为例。

<> 各DDR放置图片地址不同,请根据处理器来使用DDR地址。

  • 把JPEG档载入到内存

fatload mmc 1:1 0x84080000 logo.jpg
  • 解码JPEG到内存(cvi_jpeg jpg_buf_addr dest_buf_addr jpg_size)

cvi_jpeg 0x84080000 0x82080000 0x80000
  • DHD0设备启动

startvo 0 8192 0  (MIPI_TX)
startvo 0 1024 0  (单路6bit LVDS)
startvo 0 2048 0  (单路8bit LVDS)
startvo 0 4096 0  (单路10bit LVDS,暂不支持)
startvo 0 65536 0  (I80)
  • VL视频层启动

startvl 0 0x84080000 0x82080000 0x80000 16
  • 设置VO背景色为黑色

setvobg 0 0x00000000
  • VL视频层关闭

Stopvl 0
  • DHD0设备关闭

Stopvo 0

3.4. 使用储存装置并启用开机画面

  1. 将开机图档 logo.jpg (I80屏需要BMP格式图文件)拷贝至$ BOOTLOGO_PATH(默认为/build/tools/common/bootlogo/logo.jpg)

  2. 修改build/boards/cv18xx/cv18xx_defconfig配置所需的屏为y,其他需注释掉。

  3. 修改build/boards/cv18xx/u-boot/cv18xx_defconfig配置所需的屏接口为y,其他需注释掉,并且配置CONFIG_BOOTLOGO为y。

  4. 使用下列命令编译BSP。

    export ENABLE_BOOTLOGO=1; source build/envsetup_soc.sh
    Build_all
    

3.5. 注意事项

  • 配置开机画面,通过BT.1120/656接口显示时,外接处理器的驱动需自行移植实现。

  • 如果开机画面使用的是MIPI_TX、LVDS或I80接口时,若有不支持的mipi_dsi、lvds或者i80 panel,可参考include/cvi_panels内的headers,新增相对应的header。只要按include/cvi_panels/cvi_panels.h参照其他panel修改即可对应不同的mipi_dsi、lvds或i80 panel。

  • 使用储存装置并储存开机画面时,需于 CV181x_asic.dtsi 配置一块内存空间(默认为0x82080000),并确保u-boot/include/configs/CV181x-asic.h中的 LOGO_RESERVED_ADDR 设置为同样内存空间。

4. alios

  • alios开机画面目前仅支持MIPI_DSI接口,提供同linux一致的mipi_tx_xx接口(可参考Screen_Docking_Guide.pdf的MIPI_DSI章节)。用户通过在solution中调用这些接口实现VO设备的初始化。

4.1. panel添加及初始化

  1. 在mars_alios/solutions/helloworld/package.yaml中添加config选项并开启如:

    CONFIG_PANEL_HX8394: 1
    
  2. 在mars_alios/components/cvi_mmf_sdk/cvi_middleware/include/panel下添加panel的header,可参考Screen_Docking_Guide.pdf或已支持panel实现combo_dev_cfg_s等数据结构。

  3. 在mars_alios/components/cvi_mmf_sdk/cvi_middleware/include/panel/dsi_panels.h中实现新panel的panel_desc_s结构体。

  4. 如需使用reset、power、backligt功能,需自行添加gpio相关信息如:

    #define VO_GPIO_POWER_PORT 5
    #define VO_GPIO_POWER_INDEX 2
    
  5. 在solution代码中引用dsi_panels.h头文件拿到panel_desc_s及gpio信息。

  6. 并调用csi_gpio_xx()接口设置供电,背光,复位。如:

    csi_gpio_t gpio = {0};
    csi_gpio_init(&gpio, VO_GPIO_POWER_PORT);
    csi_gpio_dir(&gpio, (1 << VO_GPIO_POWER_INDEX), GPIO_DIRECTION_OUTPUT);
    csi_gpio_write(&gpio, (1 << VO_GPIO_POWER_INDEX), 1);
    
  7. 调用mipi_tx_init()、mipi_tx_cfg()、mipi_tx_set_hs_settle()、mipi_tx_enable()初始化mipi_tx设备,如需发送dcs cmd还需调用mipi_tx_send_cmd()。

4.2. 启用开机画面

  1. 将开机图档 logo.jpg 拷贝至build/tools/common/bootlogo/logo.jpg,编译SDK。

  2. 在solution代码中,构建VDEC_STREAM_S结构体,并指定pu8Addr等于宏CVIMMAP_BOOTLOGO_ADDR,该地址保存着logo.jpg数据。

  3. 调用CVI_VB_Init()初始化VB。

  4. 初始化VDEC设备(可参考MediaProcessingSoftwareDevelopmentReference_zh.pdf第八章)。

  5. 调用CVI_VDEC_SendStream()将jpeg数据送VDEC解码。

  6. 调用CVI_VDEC_GetFrame()获取解码完成的VIDEO_FRAME_INFO_S结构体。

  7. 调用CVI_VO_SendLogoFromIon()送显,该接口目前仅支持NV21格式。