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();
//重新初始化
...
视频可以正常显示出来了。