hi3516a与hi3516e_led player6.0怎么使用

hi3516a与hi3516e_led player6.0怎么使用背景公司新做了一块3516Dv300的开发板,其中有MIPITx接口,刚好公司库房还有好几百块的LCD屏,LCD屏是800×480的,还是原装屏,不用掉怪可惜的了,所以就让硬件的同事化了个转接板,使用的芯片是ICN6211,这货最大分辨率可以支持到1920×1200,感兴趣的小伙伴自己下个手册看看。调试过程MIPI屏一般都有一组寄存器需要初始化,这个可以根据使用的芯片资料来初始化,大部分厂家会提供初始化寄存器,使用的MIPICommandMode,至于怎么使用,大家自己去Google。我们

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

背景

公司新做了一块3516Dv300的开发板,其中有MIPI Tx接口,刚好公司库房还有好几百块的LCD屏,LCD屏是800×480的,还是原装屏,不用掉怪可惜的了,所以就让硬件的同事化了个转接板,使用的芯片是ICN6211,这货最大分辨率可以支持到1920×1200,感兴趣的小伙伴自己下个手册看看。

调试过程

MIPI屏一般都有一组寄存器需要初始化,这个可以根据使用的芯片资料来初始化,大部分厂家会提供初始化寄存器,使用的MIPI Command Mode,至于怎么使用,大家自己去Google。我们这边使用ICN6211可以I2C来初始化。

1. 屏参填充

屏的调试最为复杂的地方就是填写各种时许、前后消影、时钟等信息,这个必须要和自己的的屏匹配起来.我是用的屏的型号是AT070TN94,找到下面的信息:

hi3516a与hi3516e_led player6.0怎么使用

打开ICN6211 CONFIG工具,配置如下:

hi3516a与hi3516e_led player6.0怎么使用将生成的的寄存器初始化转换为海思工具配置

#!/bin/sh
i2c_write  0  0x58 0x20  0x20
i2c_write  0  0x58 0x21  0xE0
i2c_write  0  0x58 0x22  0x13
i2c_write  0  0x58 0x23  0xD2
i2c_write  0  0x58 0x24  0x01
i2c_write  0  0x58 0x25  0x2E
i2c_write  0  0x58 0x26  0x00
i2c_write  0  0x58 0x27  0x16
i2c_write  0  0x58 0x28  0x01
i2c_write  0  0x58 0x29  0x17
i2c_write  0  0x58 0x34  0x80
i2c_write  0  0x58 0x36  0xD2
i2c_write  0  0x58 0xB5  0xA0
i2c_write  0  0x58 0x5C  0xFF
i2c_write  0  0x58 0x2A  0x01
i2c_write  0  0x58 0x56  0x90
i2c_write  0  0x58 0x6B  0x71
i2c_write  0  0x58 0x69  0x29
i2c_write  0  0x58 0x10  0x40
i2c_write  0  0x58 0x11  0x88
i2c_write  0  0x58 0xB6  0x20
i2c_write  0  0x58 0x51  0x20
#i2c_write  0  0x58 0x14  0x043  #color bar
#i2c_write  0  0x58 0x2a  0x049  #color bar
i2c_write  0  0x58 0x09  0x10

特别注意的是#color的2行,这2行打开可以验证你的硬件连接是否是OK的,硬件正常的化就可以看到一个ColorBar彩条,这是关进的一步。

2.修改代码

使用的测试DEMO为sample_tde,注意将hifb的宽高设置为800×480,他的默认参数是720×576,申请fb的地方也注意修改下,和时许相关的地方为:

  • fb参数修改
    这一块的修改非常重要,不然你的图像VO色彩是对的,fb及Qt界面的色彩不对,这个地方花费了我一天半的时间。具体的修改为fb打开后配置如下参数:

    VO_CSC_S  stVoCSC;
    s32Ret = HI_MPI_VO_GetGraphicLayerCSC(GRAPHICS_LAYER_G0, &stVoCSC);
    stVoCSC.enCscMatrix = VO_CSC_MATRIX_IDENTITY;
    s32Ret = HI_MPI_VO_SetGraphicLayerCSC(GRAPHICS_LAYER_G0, &stVoCSC);
  • VO参数修改

    
    917 HI_S32 SAMPLE_COMM_VO_GetDefConfig(SAMPLE_VO_CONFIG_S *pstVoConfig)
    918 {
    919     RECT_S  stDefDispRect  = {0, 0, 800, 480};  //800x480
    920     SIZE_S  stDefImageSize = {800, 480};  //800x480
    921     HI_U32  u32ChipId;
    922     if(NULL == pstVoConfig)
    923     {
    924         SAMPLE_PRT("Error:argument can not be NULL\n");
    925         return HI_FAILURE;
    926     }
    927 
    928     pstVoConfig->VoDev             = SAMPLE_VO_DEV_UHD;
    929 
    930     HI_MPI_SYS_GetChipId(&u32ChipId);
    931 
    932     if(HI3516C_V500 == u32ChipId)
    933     {
    934         pstVoConfig->enVoIntfType = VO_INTF_BT1120;
    935     }
    936     else
    937     {
    938         pstVoConfig->enVoIntfType =VO_INTF_MIPI;
    939     }
    940     pstVoConfig->enIntfSync        = VO_OUTPUT_USER;  //VO_OUTPUT_1080P60;
    941     pstVoConfig->u32BgColor        = COLOR_RGB_WHITE;//COLOR_RGB_YELLOW;
    942     pstVoConfig->enPixFormat       = PIXEL_FORMAT_YVU_SEMIPLANAR_422;
    943     pstVoConfig->stDispRect        = stDefDispRect;
    944     pstVoConfig->stImageSize       = stDefImageSize;
  • VO自定义时许修改
    自定义时许修改最为复杂的部分是PLL计算,好在海思提供了RGB_MIPI屏幕时钟时序计算器.xlsx 这个工具实在太好用了,至少要节省你一天的调试时间,给伟大的海思点个赞。

    422 HI_S32 SAMPLE_COMM_VO_StartDev(VO_DEV VoDev, VO_PUB_ATTR_S* pstPubAttr)
    423 {
    424     HI_S32 s32Ret = HI_SUCCESS;
    425     VO_USER_INTFSYNC_INFO_S  stUserInfo;
    426     if(pstPubAttr->enIntfSync == VO_OUTPUT_USER) {
    427         pstPubAttr->stSyncInfo.bSynm = 0;
    428         pstPubAttr->stSyncInfo.bIop = 1;
    429         pstPubAttr->stSyncInfo.u8Intfb = 0;
    430         pstPubAttr->stSyncInfo.u16Vact = 480;
    431         pstPubAttr->stSyncInfo.u16Vbb = 24;
    432         pstPubAttr->stSyncInfo.u16Vfb = 22;
    433         pstPubAttr->stSyncInfo.u16Hbb = 47;
    434         pstPubAttr->stSyncInfo.u16Hact= 800;
    435         pstPubAttr->stSyncInfo.u16Hfb= 210;
    436         pstPubAttr->stSyncInfo.u16Hmid= 0;
    437         pstPubAttr->stSyncInfo.u16Bvact=0;
    438         pstPubAttr->stSyncInfo.u16Bvbb =0;
    439         pstPubAttr->stSyncInfo.u16Bvfb =0;
    440         pstPubAttr->stSyncInfo.u16Hpw = 1;
    441         pstPubAttr->stSyncInfo.u16Vpw = 1;
    442         pstPubAttr->stSyncInfo.bIdv = HI_FALSE;
    443         pstPubAttr->stSyncInfo.bIhs = HI_FALSE;
    444         pstPubAttr->stSyncInfo.bIvs = HI_FALSE;
    445     }
    446     s32Ret = HI_MPI_VO_SetPubAttr(VoDev, pstPubAttr);
    447     if (s32Ret != HI_SUCCESS)
    448     {
    449         SAMPLE_PRT("failed with %#x!\n", s32Ret);
    450         return HI_FAILURE;
    451     }
    452 
    453     if(pstPubAttr->enIntfSync == VO_OUTPUT_USER) {
    454         stUserInfo.u32PreDiv = 1;
    455         stUserInfo.u32DevDiv = 1;
    456         stUserInfo.bClkReverse = HI_FALSE;
    457 #if 1
    458         stUserInfo.stUserIntfSyncAttr.enClkSource = VO_CLK_SOURCE_PLL;
    459         stUserInfo.stUserIntfSyncAttr.stUserSyncPll.u32Fbdiv = 272;
    460         stUserInfo.stUserIntfSyncAttr.stUserSyncPll.u32Frac = 0x6e61cf;
    461         stUserInfo.stUserIntfSyncAttr.stUserSyncPll.u32Refdiv = 4;
    462         stUserInfo.stUserIntfSyncAttr.stUserSyncPll.u32Postdiv1 = 7;
    463         stUserInfo.stUserIntfSyncAttr.stUserSyncPll.u32Postdiv2 = 7;
    464 #else
  • MIPI 配置添加
    这个是给MIPI Tx驱动使用的,需要让MIPI Tx输出该时许,按照参数一路修改下来就可以看到了:

    190 combo_dev_cfg_t MIPI_TX_800X480_60_CONFIG =
    191 {
    192     .devno = 0,
    193     .lane_id = {0, 1, 2, 3},
    194     .output_mode = OUTPUT_MODE_DSI_VIDEO,
    195     .output_format = OUT_FORMAT_RGB_24_BIT,
    196     .video_mode =  BURST_MODE,
    197     .sync_info = {
    198         .vid_pkt_size     = 800,
    199         .vid_hsa_pixels   = 1,
    200         .vid_hbp_pixels   = 46,
    201         .vid_hline_pixels = 1057,
    202         .vid_vsa_lines    = 1,
    203         .vid_vbp_lines    = 23,
    204         .vid_vfp_lines    = 22,
    205         .vid_active_lines = 480,
    206         .edpi_cmd_size    = 0,
    207     },
    208      .phy_data_rate = 459, // 401
    209     .pixel_clk = 33359,
    210 };

3.系统及驱动修改

  • 开机脚本修改 将板子上load3516dv300里面的mipi_tx驱动打开
insmod hi_mipi_tx.ko 
  • sys_config.ko修改
676     //vo_bt1120_mode_mux();
677     //vo_bt656_mode_mux();
678     mipi_tx_lcd_mux(4);   // 打开,其余的关闭
679    // hdmi_pin_mux();
680     //vo_24bit_lcd_mux();
681    // mipi_tx_set_rest();
682     //spi1_pin_mux();
683     //vo_6bit_lcd_mux();
684     //vo_8bit_lcd_reset();
685     //vo_8bit_lcd_mux();
686     //i2s0_pin_mux();
687     return 0;

4. 运行程序

将sample_tde 及目录下的res 拷贝到板子上,或者NFS目录

./sample_tde  0
# enjoy!!

hi3516a与hi3516e_led player6.0怎么使用hi3516a与hi3516e_led player6.0怎么使用

https://www.iyakj.com/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/193665.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 宽度学习(一):宽度学习体系:有效和高效的无需深度架构的增量学习系统[通俗易懂]

    宽度学习(一):宽度学习体系:有效和高效的无需深度架构的增量学习系统[通俗易懂]Motivation深度学习:1,时间长:由于涉及到大量的超参数和复杂的结构,大多数神经网络的训练过程非常耗时。2,重新训练:如果要更改神经网络的结构,或者增加样本,深度学习系统将遇到一个完整的重新训练过程。宽度学习:1,消除了训练过程长的缺点,并且提供了很好的泛化能力。2,如果网络需要扩展,宽度学习网络可以快速重构,无需重新训练过程。Preliminaries1,RVFLNN…

    2022年5月21日
    38
  • CSDN博客&论坛——“我的2013”年度征文活动火爆进行中!【已结束】[通俗易懂]

    2013年即将过去,在这一年里你可能毕业参加工作、可能跳槽到新公司、可能开始涉猎新的技术领域、可能在CSDN遇上技术牛人、可能参与了极富挑战的项目、可能升职做经理总监、可能和志同道合的朋友们创业、也有可能失业了、投资失败了、与恋人分手了……忙忙碌碌的生活是一成不变、枯燥无味、朝九晚五、钢筋森林、面具伪装?还是不拘一格、激情四溢、饶有情趣、幸福甜蜜?

    2022年4月16日
    48
  • javaWeb学习——servlet、filter、listener、intercept的区别

    javaweb开发有很多技术要学习,首先将简单的概念和基础打好,然后才能更好的成长! 自己整理一遍,记忆深刻一点! 一:概念二:实现方式三:执行逻辑图参考:http://www.cnblogs.com/shangxiaofei/p/5328377.htmlhttp://blog.csdn.net/lzwjavaphp/article/details/13771109

    2022年2月25日
    41
  • 升级公告:由社区推动的cBridge 2.0功能迭代升级即将到来

    升级公告:由社区推动的cBridge 2.0功能迭代升级即将到来我们将在北京时间2021年12月3日上午10点推出cBridge2.0的一次功能迭代升级,以满足我们用户和开发者社区提出的一些关键功能需求。此次升级旨在让cBridge2.0更好地为通用的多链dApps和原生资产跨链桥接提供支持。升级期间,cBridge跨链转账服务会暂停约3小时。作为此次升级的一部分,所有LP需要迁移已提供的全部流动性。我们将为LP提供足够的gastoken以支付cBridge2.0目前已支持的链上的全部迁移成本,大家不必担心手续费的问题。迁移可以在升级前…

    2022年5月4日
    59
  • 彻底明白vue双向绑定底层原理(源码分析)

    彻底明白vue双向绑定底层原理(源码分析)vue是一个mvvm框架,双向绑定是vue的一个核心功能,所谓双向绑定就是当试图发生改变的时候传递给VM(ViewModel),让数据得到更新,当数据发生改变的时候传给VM(ViewModel),使得视图发生变化!概念都知道,但是vue怎么做到的呢?看下面的一张图(图是搬运别人的)可能你现在看不明白,observer是什么东西,watchter,Dep又是什么东西?没有关系,接下来只要你看完我这篇文章,保证给你整的明明白白!看上图,从左边开始newMVVM其实就是我newVue(),我们一

    2025年11月15日
    3
  • python文件操作步骤_python读取csv文件

    python文件操作步骤_python读取csv文件文件操作文件操作主要包括对文件内容的读写操作,这些操作是通过文件对象实现的,通过文件对象可以读写文本文件和二进制文件open(file,mode='r',buffering=-

    2022年7月29日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号