海思 HiMMP 开机图像显示,以及开机图片影响到应用层的视频层的显示

hisi3520dv400

一,图片存在哪里?
1)存在nand flash上,使用tftp服务器,将图片下载到其中;

mw.b 82000000 ff 100000
tftp 82000000 1080.jpg
nand erase ec00000 100000
nand write 82000000 ec00000 100000

从flash上读取图片显示

nand read 9f200000 ec00000 100000#从nand flsh上读取数据
setenv jpeg_addr 0x9f200000
setenv jpeg_size 0x100000
setenv vobuf 0x9f300000
decjpg
startvo 0 32 12
startvl 0 0x9f300000 1920 0 0 1920 1080#启动视频层 [layer addr stride x y w h]

2)图片存在SD卡中

由于hisi3520dv400没有SD卡直接接口,需要使用usb转sd

usb start#初始化
fatls usb 0#查看文件

fatload usb 0 9f000000 1.jpg#从SD卡中加载数据
setenv jpeg_addr 0x9f00000 #设置图片解码地址
setenv jpeg_size 100000#设置图片大小
setenv vobuf 0x9f100000#设置输出显示地址
decjpg#解码
startvo 2 1 0#startvo [dev type sync] 
startvl 3 9f100000 768 0 0 720 576#启动视频层 [layer addr stride x y w h]

问题:uboot显示后,如果不stopvo 0,则应用层的视频不会显示出来。如果stopvo 则图片在显示后立刻关闭,达不到开机托显示的效果

解决方法一:
在Uboot中找到stopvo的寄存器写入关闭值,没有成功,好像地址不能直接访问,具体原因没有找到

HI_BOOL HAL_DISP_SetIntfEnable(HAL_DISP_OUTPUTCHANNEL_E enChan, HI_BOOL enIntf)
{
    volatile U_DHD0_CTRL DHD0_CTRL;
    volatile HI_U32 addr_REG;
    if(enChan <= CHANNEL_DHD_END)
    {
        addr_REG = Vou_GetChnAbsAddr(enChan,(HI_U32)&(pVoReg->DHD0_CTRL.u32));
        DHD0_CTRL.u32 = HAL_ReadReg((HI_U32*)addr_REG);
        DHD0_CTRL.bits.intf_en = enIntf;
        HAL_WriteReg((HI_U32*)addr_REG, DHD0_CTRL.u32);
    }
    else
    {
        HAL_PRINT("Error channel id found in %s: L%d\n",__FUNCTION__, __LINE__);
        return HI_FALSE;
    }
    return HI_TRUE;
}

解决方法二:
在mpp中增加stopvo再start的程序

...//省略初始化
//stop
SAMPLE_COMM_VO_StopChn(VoLayer[0], VO_MODE_1MUX);
SAMPLE_COMM_VO_StopLayer(VoLayer[0]);
SAMPLE_COMM_VO_StopDev(VoDev[0]);

SAMPLE_COMM_VO_StopChn(VoLayer[1], VO_MODE_1MUX);
SAMPLE_COMM_VO_StopLayer(VoLayer[1]);
SAMPLE_COMM_VO_StopDev(VoDev[1]);
SAMPLE_COMM_VO_HdmiStop();

//重新初始化
...

视频可以正常显示出来了。

你可能感兴趣的:(海思)