海思3516dv300使用mipi_tx驱动st7701s屏幕显示(代码片段)

耳东 耳东     2022-11-07     695

关键词:

向海思mpp框架中添加外设是首先要选取一个合适的demo来验证,在还是mpp框架中每一个模块都有着丰富的demo例程,由于笔者只有一块海思3516DV300的主板和一个st7701s 480 * 800分辨率的屏幕,因此选取了sample中的vdec作为测试例程,vdec例程中实现了将H264、H265、JPEG进行解码并将解码数据显示到VO设备上。

1.修改 SAMPLE_H264_VDEC_VPSS_VO demo

添加新的屏幕只需要测试初始化显示效果时可只对VO的部分进行修改,VPSS部分可保留例程原有设置,在此选用vdec的样例2进行修改,对VO配置部分进行修改设置屏幕的接口类型,分辨率

   /************************************************
    step5:  start VO
    *************************************************/
	 RECT_S stDefDispRect  = 0, 0, 480, 800;
	 SIZE_S stDefImageSize = 480, 800;
    stVoConfig.VoDev                 = SAMPLE_VO_DEV_UHD;
    stVoConfig.enVoIntfType          = VO_INTF_MIPI;		// 屏幕使用mipi接口
    stVoConfig.enIntfSync            = VO_OUTPUT_USER;		// 方便配置添加屏幕的分辨率及初始化
    stVoConfig.enPicSize             = enDispPicSize;
    stVoConfig.u32BgColor            = COLOR_RGB_BLUE;
    stVoConfig.u32DisBufLen          = 3;
    stVoConfig.enDstDynamicRange     = DYNAMIC_RANGE_SDR8;
    stVoConfig.enVoMode              = VO_MODE_1MUX;
    stVoConfig.enPixFormat           = PIXEL_FORMAT_YVU_SEMIPLANAR_420;
	#if 0 
    stVoConfig.stDispRect.s32X       = 0;
    stVoConfig.stDispRect.s32Y       = 0;
    stVoConfig.stDispRect.u32Width   = stDispSize.u32Width;
    stVoConfig.stDispRect.u32Height  = stDispSize.u32Height;
    stVoConfig.stImageSize.u32Width  = stDispSize.u32Width;
    stVoConfig.stImageSize.u32Height = stDispSize.u32Height;
	#else  // 使用用户设置的屏幕分辨率
    stVoConfig.stDispRect        = stDefDispRect;
    stVoConfig.stImageSize       = stDefImageSize;
	#endif
    stVoConfig.enVoPartMode          = VO_PART_MODE_SINGLE;
	printf("screen w = %d  h = %d\\n", stVoConfig.stDispRect.u32Width, stVoConfig.stDispRect.u32Height);
    s32Ret = SAMPLE_COMM_VO_StartVO(&stVoConfig);
    if(s32Ret != HI_SUCCESS)
    
        SAMPLE_PRT("start VO fail for %#x!\\n", s32Ret);
        goto END5;
    

2.修改 SAMPLE_H264_VDEC_VPSS_VO ==》SAMPLE_COMM_VO_StartVO

修改屏幕分辨率接口类型,及默认参数的填充

3.修改 SAMPLE_H264_VDEC_VPSS_VO ==》SAMPLE_COMM_VO_StartVO ==》 SAMPLE_COMM_VO_StartDev

同步信息参数可通过文档手册中 ReleaseDoc\\zh\\02.only for reference\\software\\RGB_MIPI屏幕时钟时序计算器.xlsx --> MIPI屏配置VDP时钟时序,将屏幕参数填入输入值中获取输出参数,具体参数说明可参考 ReleaseDoc\\zh\\02.only for reference\\software\\屏幕对接 使用指南 文本

HI_S32 SAMPLE_COMM_VO_StartDev(VO_DEV VoDev, VO_PUB_ATTR_S* pstPubAttr)

	HI_S32 s32Ret = HI_SUCCESS;
	HI_U32 u32Framerate = 60;
	VO_USER_INTFSYNC_INFO_S stUserInfo = 0;

	/* Fill pub attr */
	pstPubAttr->enIntfType = VO_INTF_MIPI;
	pstPubAttr->enIntfSync = VO_OUTPUT_USER;
	pstPubAttr->stSyncInfo.bSynm = 0;		
	pstPubAttr->stSyncInfo.bIop = 1;		
	pstPubAttr->stSyncInfo.u8Intfb = 0;  	
	pstPubAttr->stSyncInfo.u16Vact = 800;	// 垂直有效区域,单位行
	pstPubAttr->stSyncInfo.u16Vbb = 20; 	// 垂直消隐后肩,单位行
	pstPubAttr->stSyncInfo.u16Vfb = 18; 	// 垂直消隐前肩,单位行
	pstPubAttr->stSyncInfo.u16Hact = 480;	// 水平有效区域,单位像素
	pstPubAttr->stSyncInfo.u16Hbb = 66; 	// 水平消隐后肩,单位像素
	pstPubAttr->stSyncInfo.u16Hfb = 60; 	// 水平消隐前肩,单位像素
	pstPubAttr->stSyncInfo.u16Hmid = 1; 	// 底场垂直同步有效像素
	pstPubAttr->stSyncInfo.u16Bvact = 1;	// 底场垂直有效区域,逐行时有效,单位行
	pstPubAttr->stSyncInfo.u16Bvbb = 1; 	// 底场垂直消隐后肩,逐行时有效,单位行
	pstPubAttr->stSyncInfo.u16Bvfb = 1; 	// 底场垂直消隐前肩,逐行时有效,单位行
	pstPubAttr->stSyncInfo.u16Hpw = 60; 	// 水平同步信号宽度,单位像素
	pstPubAttr->stSyncInfo.u16Vpw = 10; 	 // 垂直同步信号宽度,单位行
	pstPubAttr->stSyncInfo.bIdv = 0;		// 数据有效信号极性,0为高有效,1为低有效
	pstPubAttr->stSyncInfo.bIhs = 0;		// 水平有效信号极性,0为高有效,1为低有效
	pstPubAttr->stSyncInfo.bIvs = 0;		// 垂直有效信号极性,0为高有效,1为低有效	


	s32Ret = HI_MPI_VO_SetPubAttr(VoDev, pstPubAttr);
	if (s32Ret != HI_SUCCESS)
	
		SAMPLE_PRT("failed with %#x!\\n", s32Ret);
		return HI_FAILURE;
	

	/* Fill user sync info */
	stUserInfo.stUserIntfSyncAttr.enClkSource = VO_CLK_SOURCE_PLL;
	stUserInfo.stUserIntfSyncAttr.stUserSyncPll.u32Fbdiv = 60;		//PLL整数倍频系数 0-0xfff
	stUserInfo.stUserIntfSyncAttr.stUserSyncPll.u32Frac= 0x535A85;
	stUserInfo.stUserIntfSyncAttr.stUserSyncPll.u32Refdiv = 4;
	stUserInfo.stUserIntfSyncAttr.stUserSyncPll.u32Postdiv1 = 3;
	stUserInfo.stUserIntfSyncAttr.stUserSyncPll.u32Postdiv2 = 2;
	stUserInfo.u32DevDiv = 2;
	stUserInfo.u32PreDiv = 1;

	/* Set user interface sync info */
	s32Ret = HI_MPI_VO_SetUserIntfSyncInfo(VoDev, &stUserInfo);
	if (s32Ret != HI_SUCCESS)
	
		printf("Set user interface sync info failed with %x.\\n",s32Ret);
		return HI_FAILURE;
	
	s32Ret = HI_MPI_VO_SetDevFrameRate(VoDev, u32Framerate);

	s32Ret = HI_MPI_VO_Enable(VoDev);
	if (s32Ret != HI_SUCCESS)
	
		SAMPLE_PRT("failed with %#x!\\n", s32Ret);
		return HI_FAILURE;
	
	
	return s32Ret;

4.修改 SAMPLE_H264_VDEC_VPSS_VO ==》SAMPLE_COMM_VO_StartVO ==》 SAMPLE_COMM_VO_GetWH

在 VO_OUTPUT_USER 部分返回屏幕对应的分辨率和帧率

5.修改 SAMPLE_H264_VDEC_VPSS_VO ==》SAMPLE_COMM_VO_StartVO ==》 SAMPLE_COMM_VO_StartMipiTx

添加对应的屏幕屏幕配置

switch(enVoIntfSync)
    
        case VO_OUTPUT_576P50:
            pstMipiTxConfig = &MIPI_TX_720X576_50_CONFIG;
            break;
        case VO_OUTPUT_720P60:
            pstMipiTxConfig = &MIPI_TX_1280X720_60_CONFIG;
            break;
        case VO_OUTPUT_1080P60:
            pstMipiTxConfig = &MIPI_TX_1920X1080_60_CONFIG;
            break;
        case VO_OUTPUT_1024x768_60:
            pstMipiTxConfig = &MIPI_TX_1024X768_60_CONFIG;
            break;
        case VO_OUTPUT_1280x1024_60:
            pstMipiTxConfig = &MIPI_TX_1280x1024_60_CONFIG;
            break;
        case VO_OUTPUT_720x1280_60:
            pstMipiTxConfig = &MIPI_TX_720X1280_60_CONFIG;
            break;
        case VO_OUTPUT_1080x1920_60:
            pstMipiTxConfig = &MIPI_TX_1080X1920_60_CONFIG;
            break;
		case VO_OUTPUT_USER:
			pstMipiTxConfig = &MIPI_TX_480X800_60_CONFIG; // 用户添加屏幕的配置参数
			break;
        default :
            pstMipiTxConfig = &MIPI_TX_1080X1920_60_CONFIG;
            break;
    

MIPI_TX_480X800_60_CONFIG 配置信息可仿照上面的进行修改

combo_dev_cfg_t MIPI_TX_480X800_60_CONFIG =

    .devno = 0,
    .lane_id = 0, 1, -1, -1,    // 选择屏幕使用的lan数,未使用填-1,如使用4lan时 0, 1, 2, 3
    .output_mode = OUTPUT_MODE_DSI_VIDEO,	// 使用mipi下的dsi
    .output_format = OUT_FORMAT_RGB_24_BIT,
    .video_mode =  BURST_MODE,
    .sync_info = 
        .vid_pkt_size     = 480,   // hact 水平有效长度 单位像素
        .vid_hsa_pixels   = 31,    // hsa 行同步脉冲区像素
        .vid_hbp_pixels   = 12,   // hbp 行同步脉冲后消隐区像素个数
        .vid_hline_pixels = 620,  // hact + hsa + hbp + hfp 每行像素总数
        .vid_vsa_lines    = 10,     // vsa 帧同步脉冲区行数
        .vid_vbp_lines    = 10,    // vbp 帧同步脉冲后消隐区行数
        .vid_vfp_lines    = 2,     // vfp 帧同步脉冲前消隐区行数
        .vid_active_lines = 800,   // vact 垂直有效长度 单位像素  822
        .edpi_cmd_size    = 0,
    ,
    .phy_data_rate = 367, // >= (hact + hsa + hbp + hfp) * (vact + vsa + vbp + vfp) * output format bit * framerate /lane_num/(10^6) Mbps
    .pixel_clk = 30578, // = (hact + hsa + hbp + hfp) * (vact + vsa + vbp + vfp) * framerate / 1000 KHz
;

海思3516dv300使用mipi_tx驱动st7701s屏幕显示(代码片段)

向海思mpp框架中添加外设是首先要选取一个合适的demo来验证,在还是mpp框架中每一个模块都有着丰富的demo例程,由于笔者只有一块海思3516DV300的主板和一个st7701s480*800分辨率的屏幕,因此选取了sample中的vdec作为测试... 查看详情

海思hi3516dv300---部署yolov5检测+sort跟踪算法

海思Hi3516DV300-部署1.部署yolov5检测+Sort跟踪算法---统计地铁中人流量(双向计数+tof相机)2.yolov5s模型转换onnx模型3.在虚拟机中安装caffe(caffe模型的转化是在虚拟机中完成的)4.onnx模型转换caffe模型5.caffe模型... 查看详情

hi3516开发笔记:海思hi3516dv300芯片介绍,入手开发板以及demo测试

...L、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…海思开发专栏上一篇:没有了下一篇:《Hi3516开发笔记(二):Hi3516虚拟机基础环境串口调试、网络连接以及sftp文件传输》敬请期待…前言  目前主... 查看详情

hisi3516dv300芯片基于hwmon驱动框架的温度获取驱动源码分析(代码片段)

1、内核hwmon驱动框架参考博客:《内核hwmon驱动框架详解以及海思芯片温度驱动分析》;2、驱动实现的效果/sys/devices/virtual/hwmon/hwmon0#pwd/sys/class/hwmon/hwmon0/sys/devices/virtual/hwmon/hwmon0#lspowersubsystemtemp1_inputuevent/sys 查看详情

基于海思hi3516dv300的u-boot-2016.11分析(代码片段)

1.先看链接脚本文件u-boot.lds,文件位于u-boot-2016.11\arch\arm\cpu\armv7\hi3516dv300\hw_compressedOUTPUT_FORMAT("elf32-littlearm","elf32-littlearm","elf32-littlearm")OUTPUT_ARCH(arm)/*设置输出文件的架构体系为arm架构*/ENTRY(_star 查看详情

设置海思芯片mmz内存os内存详解(代码片段)

1、前言(1)本文是基于hi3516dv300芯片的uboot和内核进行讲解;(2)dv300芯片的板子上实际接了2G内存,dv300芯片实际最大也只支持2G内存;2、hi3516dv300芯片的内存地址范围(1)通过查阅数据手册可知《Hi3516DV300专业型SmartIPCameraSo... 查看详情

海思hi3516dv300之ubuntu20.04环境搭建和编译

一、环境搭建1、SDK版本为:Hi3516CV500R001C02SPC020/01.software/board/Hi3516CV500_SDK_V2.0.2.0.tgz2、安装相关库:sudoaptinstalllsb-corelib32stdc++6u-boot-toolszlib1g-devliblzo2-devuuid-devpkg-config texlivebisongperf3、修改sh为bash:Ubuntu默认sh为dash,... 查看详情

海思hi3516dv300之ubuntu20.04环境搭建和编译

一、环境搭建1、SDK版本为:Hi3516CV500R001C02SPC020/01.software/board/Hi3516CV500_SDK_V2.0.2.0.tgz2、安装相关库:sudoaptinstalllsb-corelib32stdc++6u-boot-toolszlib1g-devliblzo2-devuuid-devpkg-config texlivebisongperf3、修改sh为bash:Ubuntu默认sh为dash,... 查看详情

#物联网征文#ffhhi3516dv300驱动开发——编写led灯控制程序(代码片段)

Hi3516DV300驱动开发——编写LED灯控制程序前言概述前面的文章只是涉及到内核态驱动程序的实现,并未涉及到用户态应用程序,以及用户态应用程序与内核态驱动程序之间的数据交互流程,在本示例将演示如何在开发板上运行一... 查看详情

华为鸿蒙开发板-hi3516dv300硬件设计原理图&pcb&硬件

点击下载:华为鸿蒙开发板-Hi3516DV300硬件设计原理图&PCB&硬件 查看详情

海思hi3516ev200gpio驱动开发

https://blog.csdn.net/Sweets_JIE/article/details/107966029?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-6.control&depth_1-utm_source=distribute.pc_ 查看详情

海思平台osdrv顶层makefile使用说明(代码片段)

本目录下的编译脚本支持arm-himix200-linux,arm-himix200-linux工具链对应glibc库。具体命令如下(以hi3516dv300举例)注意:   由于开源工具整改,部分开源工具不再提供源码包,客户编译OSDRV时需要自行下载:   a:linux-4.9.3... 查看详情

海思hi3516a简介

1.简介Hi3516A是集成新一代ISP的专业HDIP摄像头SOC,采用最新的H.265视频编解码器,同时采用低功耗架构,使得Hi3516A处于行业领先水平。2.系统框图650)this.width=650;"src="http://s1.51cto.com/wyfs02/M02/88/19/wKioL1fp3vbT-0XbAAEvRFAyM24271.jpg"title="3516a_a... 查看详情

海思hi3516amipi

...接收端,发送端为smartsens的360万像素的SC3035-M,接收端为海思的Hi3516A。MIPI(MobileIdustryProcessorInterface)是MIPI联盟发起的移动应用处理器制定的标准,广泛应用于摄像头接口、显示屏接口等。2.MIPI发送端MIPI发送端为smartsens的SC3035-M摄... 查看详情

hi3516开发笔记:hi3516虚拟机基础环境搭建之串口调试网络连接以及sftp文件传输(代码片段)

...L、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…海思开发专栏上一篇:《Hi3516开发笔记(一):海思HI3516DV300芯片介绍,入手开发板以及Demo测试》下一篇:敬请期待…前言  搭建Hi3516的基础虚拟... 查看详情

海思3516abt1120视频输入相关总结

海思3516Abt1120视频输入相关总结原创蓝小胥最后发布于2018-07-1916:54:20阅读数5365收藏展开因为实验室项目需要将FPGA里的模拟视频数据通过bt1120输入给海思3516A,因此我这个刚进实验室的项目小白硬着头皮开始了3516A的学习之旅。所... 查看详情

学习海思hi3516的调试方法远程登陆和推送程序

Hi3516开发板已经支持了telnet和tftp协议,在调试中可以远程支持登陆调试,推送调试程序;1.远程登陆开发板,需要支持telnet协议;可以使用支持telnet的桌面工具,比如mobaxterm,手上的开发板IP地址:... 查看详情

学习海思hi3516的调试方法远程登陆和推送程序

Hi3516开发板已经支持了telnet和tftp协议,在调试中可以远程支持登陆调试,推送调试程序;1.远程登陆开发板,需要支持telnet协议;可以使用支持telnet的桌面工具,比如mobaxterm,手上的开发板IP地址:... 查看详情