NovaTek HDMI out小板调试
涉及知识点:
1.Mboot 添加命令行指令”hdmiout”;
2.Mboot 添加功能宏,可配置编译;// UConfig
3.Mboot 模块I2C编程;
4.DDC/CI 协议

NovaTek out 小板大量服务于传统显示器。目前在hht 658 上面应用的作用是接入vb1信号,
然后透传输出一个vb1信号直接给屏,再输入一路HDMI信号。其小板芯片的控制是通过
DDC/CI 协议控制,配置小板的不同工作状态。

一、DDC/CI协议
ddc/ci协议是Display Data Channel Command Interface的简称,基于DDC/CI协议,用户可以通过鼠标和人性化的软件界面来完成显示器的各项设置和色彩调节,而不必使用传统的OSD菜单。

nova tek DDC/CI部分控制指令如下:
DDCCI命令有如下指令:
//HTX MODE
0x6E,0x51,0x83,0x03,0x41,0x81,0x7F // Auto
0x6E,0x51,0x83,0x03,0x41,0x82,0x7C // 4K
0x6E,0x51,0x83,0x03,0x41,0x83,0x7D // 2K
0x6E,0x51,0x83,0x03,0x41,0x84,0x7A // 720x480P

// 模式转换
0x6E,0x51,0x83,0x03,0x43,0x81,0x7D // mute
0x6E,0x51,0x83,0x03,0x43,0x82,0x7E // Normal

// 屏TCON选择
0x6E,0x51,0x83,0x03,0x42,0x91,0x6C // 2 Tcon(双屏输出)
0x6E,0x51,0x83,0x03,0x42,0x92,0x6F // 1 Tcon(单屏输出)

说明:IIC发送时0x6E为地址,0x51为寄存器,后面的为数据就可以。

二、Mboot I2C控制
1.配置I2C Bus

static SWI2C_BusCfg g_Nov_Tek_I2cBusCfg[MST658_I2C_BUS_NUM]=
{// Bus-0{PAD_DDCR_CK, PAD_DDCR_DA, 80}, //IS_SW_I2C  /SCL_PAD /SDA_PAD /Delay// Bus-1{PAD_TGPIO0 , PAD_TGPIO1 , 80},   //IS_SW_I2C  /SCL_PAD /SDA_PAD /Delay// Bus-2// Others, add other bus here
};

主要是填充一个SWI2C_BusCfg 结构体数组,{PAD_DDCR_CK, PAD_DDCR_DA, 80} 为bus-1 的clk,data, delay 三个参数。第一路总线如下:


第二路总线,如下:


2.I2C 初始化

void MDrv_Nov_Tek_SWI2C_Init(void)
{MApi_SWI2C_Init(g_Nov_Tek_I2cBusCfg, MST658_I2C_BUS_NUM);g_Nov_Tek_Init = 1;
}

MApi_SWI2C_Init 完成I2C 初始化动作。

3.I2C 读写

MS_BOOL MDrv_Nov_Tek_SWI2C_WriteBytes(MS_U16 u16BusNumSlaveID, MS_U8 u8addrnum, MS_U8* pu8addr, MS_U16 u16size, MS_U8* pu8data)
{return MApi_SWI2C_WriteBytes(u16BusNumSlaveID, u8addrnum, pu8addr, u16size, pu8data);
}MS_BOOL MDrv_Nov_Tek_SWI2C_ReadBytes(MS_U16 u16BusNumSlaveID, MS_U8 u8addrnum, MS_U8* pu8addr, MS_U16 u16size, MS_U8* pu8data)
{return MApi_SWI2C_ReadBytes(u16BusNumSlaveID, u8addrnum, pu8addr, u16size, pu8data);
}

三、Mboot 添加功能宏

endifconfig HDMIOUTbool "HDMIOUT"default yhelpSelecting this item will enable HDMI OUT.
if(HDMIOUT)
choiceprompt "Hdmi out"default NOV_TEKconfig NOV_TEKbool "NOV_TEK"default nhelpSelecting this item will enable NOV_TEK cmd.config SUO_XIbool "SUO_XI"default nhelpSelecting this item will enable SUO_XI config.
endchoiceendifconfig Mstar_IR

vendor\mstar\mboot\MBoot\u-boot-2011.06\UConfig.in 文件中添加。接着在
MBoot/sboot/configs/mooney/.config.mooney.android.142b.rom_emmc.64bit.optee.kernel文件中配置即可。

# CONFIG_CAST_CONFIG_PARTITION is not setCONFIG_HDMIOUT=y
CONFIG_NOV_TEK=y

四、Mboot 添加command指令
1.“hdmiout”指令注册

    #if (CONFIG_HDMIOUT == 1)Add_Command_Table("hdmiout_set", 0, STAGE_TOKERNEL);#endif

vendor\mstar\mboot\MBoot\MstarCustomer\MSTAR\src\MsCustomerRegister.c
2.“hdmiout”指令映射

#if (CONFIG_HDMIOUT == 1)
U_BOOT_CMD(hdmiout_set, CONFIG_SYS_MAXARGS, 1,    do_hdmiout_set,"set hdmiout","ursa_type(dec)\n"
);
#endif

MBoot/MstarCustomer/MSTAR/cmd/cmd_CusSystem.c
3.“hdmiout”指令声明

#if (CONFIG_HDMIOUT == 1)
int do_hdmiout_set( cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]);
#endif

MBoot/MstarCustomer/MSTAR/include/CusSystem.h

4.“hdmiout”指令实现

#if (CONFIG_HDMIOUT == 1)
int do_hdmiout_set(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
{#if (CONFIG_NOV_TEK == 1)MDrv_Nov_Tek_Set_Single_Tcon();#elseprintf("No hdmiout boards available!!!!\n");#endifreturn 0;
}#endif

MBoot/MstarCustomer/MSTAR/src/CusSystem.c

完整code如下:

// Alex.Ke (kehuanyu@cultraview.com)#ifndef __NOV_TEK_C__
#define __NOV_TEK_C__//-------------------------------------------------------------------------------------------------
//  Include files
//-------------------------------------------------------------------------------------------------
#include "nov_tek.h"//-------------------------------------------------------------------------------------------------
//  Define
//-------------------------------------------------------------------------------------------------
static MS_BOOL g_Nov_Tek_Init = FALSE;#define NOV_TEK_CMD_DATA_SUM          (sizeof(NOV_TEK_CMD_DATA) / sizeof(MS_U8))
#define NOV_TEK_I2C_ADDR              (0x6E)
#define NOV_TEK_W_REG                 (0x51)
#define MST658_I2C_BUS_NUM            (1)
#define NOV_TEK_CMD_RETRY_TIMES       (3)
#define NOV_TEK_CMD_INTERVAL_TIME     (240)
#define NOV_TEK_Delay(x)              udelay(x*1000)static SWI2C_BusCfg g_Nov_Tek_I2cBusCfg[MST658_I2C_BUS_NUM]=
{#if 0// Bus-0{PAD_DDCR_CK, PAD_DDCR_DA, 80}, //IS_SW_I2C  /SCL_PAD /SDA_PAD /Delay#endif// Bus-1{PAD_TGPIO0 , PAD_TGPIO1 , 80},   //IS_SW_I2C  /SCL_PAD /SDA_PAD /Delay// Bus-2// Others, add other bus here
};static NOV_TEK_CMD_DATA g_HTX_MODE[] =
{{0x00,0x00,0x00,0x00,0x00}, // pre init (not used){0x83,0x03,0x41,0x81,0x7F}, // Auto{0x83,0x03,0x41,0x82,0x7C}, // 4K{0x83,0x03,0x41,0x83,0x7D}, // 2K{0x83,0x03,0x41,0x84,0x7A}, // 720P{0x83,0x03,0x43,0x81,0x7D}, // mute{0x83,0x03,0x43,0x82,0x7E}, // Normal{0x83,0x03,0x42,0x91,0x6C}, // double Tcon{0x83,0x03,0x42,0x92,0x6F}, // single Tcon
};//-------------------------------------------------------------------------------------------------
//  Function define
//-------------------------------------------------------------------------------------------------
void MDrv_Nov_Tek_SWI2C_Init(void)
{MApi_SWI2C_Init(g_Nov_Tek_I2cBusCfg, MST658_I2C_BUS_NUM);g_Nov_Tek_Init = 1;
}MS_BOOL MDrv_Nov_Tek_SWI2C_WriteBytes(MS_U16 u16BusNumSlaveID, MS_U8 u8addrnum, MS_U8* pu8addr, MS_U16 u16size, MS_U8* pu8data)
{return MApi_SWI2C_WriteBytes(u16BusNumSlaveID, u8addrnum, pu8addr, u16size, pu8data);
}MS_BOOL MDrv_Nov_Tek_SWI2C_ReadBytes(MS_U16 u16BusNumSlaveID, MS_U8 u8addrnum, MS_U8* pu8addr, MS_U16 u16size, MS_U8* pu8data)
{return MApi_SWI2C_ReadBytes(u16BusNumSlaveID, u8addrnum, pu8addr, u16size, pu8data);
}MS_BOOL MDrv_Nov_Tek_SendCmd(NOV_TEK_CMD_TYPE eCmdType)
{MS_BOOL bRet = FALSE;NOV_TEK_CMD_DATA *pCmdArray = g_HTX_MODE;if(eCmdType < CMD_NOV_TEK_SET_PRE_INIT || eCmdType >= CMD_NOV_TEK_MAX){bRet = FALSE;printf("[NOVA_TEK] Can not find the command, please check!\n");}else{MS_U8 u8CmdData[NOV_TEK_CMD_DATA_SUM] = {0x00};MS_U8 u8Index = eCmdType;memcpy(u8CmdData, &pCmdArray[u8Index], sizeof(NOV_TEK_CMD_DATA));bRet  = MDrv_Nov_Tek_Write_Cmd(u8CmdData);printf("[NOVA_TEK] Send cmd index: %d, return:%d\n", eCmdType, bRet);}return bRet;
}MS_BOOL MDrv_Nov_Tek_Print_Cmd(MS_U8 *pu8CmdData)
{MS_U8 u8Index = 0;printf("[NOVA_TEK] Write cmd:");while(u8Index < NOV_TEK_CMD_DATA_SUM){printf("0x%02x, ", pu8CmdData[u8Index]);u8Index++;}printf("\r\n");return TRUE;
}MS_BOOL MDrv_Nov_Tek_Write_Cmd(MS_U8 *pu8CmdData)
{MS_U16 u16BusNumSlaveID = NOV_TEK_I2C_ADDR;MS_U8 u8SubAddr = NOV_TEK_W_REG;MS_U8 uRetryCnt = NOV_TEK_CMD_RETRY_TIMES;MS_BOOL bRet = FALSE;if(!g_Nov_Tek_Init){MDrv_Nov_Tek_SWI2C_Init();}MDrv_Nov_Tek_Print_Cmd(pu8CmdData);while(uRetryCnt--){bRet = MDrv_Nov_Tek_SWI2C_WriteBytes(u16BusNumSlaveID, 1, &u8SubAddr, NOV_TEK_CMD_DATA_SUM, pu8CmdData);NOV_TEK_Delay(NOV_TEK_CMD_INTERVAL_TIME);printf("[NOVA_TEK] uRetryCnt : %d  bRet = %d.\n", (NOV_TEK_CMD_RETRY_TIMES-uRetryCnt),bRet);if(bRet == TRUE){break;}}return bRet;
}//-------------------------------------------------------------------------------------------------
//  Member Function
//-------------------------------------------------------------------------------------------------
MS_BOOL MDrv_Nov_Tek_Set_Pre_Init(void)
{return MDrv_Nov_Tek_SendCmd(CMD_NOV_TEK_SET_PRE_INIT);
}MS_BOOL MDrv_Nov_Tek_Set_Auto(void)
{return MDrv_Nov_Tek_SendCmd(CMD_NOV_TEK_SET_AUTO);
}MS_BOOL MDrv_Nov_Tek_Set_4K(void)
{return MDrv_Nov_Tek_SendCmd(CMD_NOV_TEK_SET_4K);
}MS_BOOL MDrv_Nov_Tek_Set_2K(void)
{return MDrv_Nov_Tek_SendCmd(CMD_NOV_TEK_SET_2K);
}MS_BOOL MDrv_Nov_Tek_Set_720P(void)
{return MDrv_Nov_Tek_SendCmd(CMD_NOV_TEK_SET_720P);
}MS_BOOL MDrv_Nov_Tek_Set_Mute(void)
{return MDrv_Nov_Tek_SendCmd(CMD_NOV_TEK_SET_MUTE);
}MS_BOOL MDrv_Nov_Tek_Set_Normal(void)
{return MDrv_Nov_Tek_SendCmd(CMD_NOV_TEK_SET_NORMAL);
}MS_BOOL MDrv_Nov_Tek_Set_Dual_Tcon(void)
{return MDrv_Nov_Tek_SendCmd(CMD_NOV_TEK_SET_DUAL_TCON);
}MS_BOOL MDrv_Nov_Tek_Set_Single_Tcon(void)
{return MDrv_Nov_Tek_SendCmd(CMD_NOV_TEK_SET_SINGLE_TCON);
}#endif //__NOV_TEK_C__

备注:
如果过程中还存在播放4K,画面剪切,错位,就需要打开屏参文件的bPanel2DFreerunFlag 的参数选项。

Nova Tek Hdmiout 小板调试总结相关推荐

  1. usb转ttl小板pl2303hx_TTL刷机经验分享,刷机后实现软件随便安装,电视直播免费看...

    前言 之前已经介绍过很多方法,把闲置运营商盒子刷出全网通盒子,实现软件任意装,电视免费看,网络视频任意点播.刷机方法针对不同盒子,方法各异,但适应性最强的就是TTL刷机了.这些分享一点刷机经验和注意事 ...

  2. FPGA之道(20)FPGA设计的上板调试与项目总结

    文章目录 前言 FPGA设计的上板调试 "实践是检验真理的唯一标准" 如何解决问题 如何找到问题 "时间是检验真理的第二标准" 项目总结.备份与后期维护 前言 ...

  3. iTOP-4412开发板-串口转接小板的使用文档

    本文档介绍如何使用 迅为iTOP-4412 精英版如何使用串口转接板,串口小板如下所示. 和串口转接板模块相关的资料如下: "iTOP-4412-Android-串口测试文档(升级版)_V2 ...

  4. USB转JTAG小板 (一)

    为什么有 usb 转 jtag 小板因为 arm的 DP 有 jtag-DP , riscv 有 jtag-dtm , 而上位机 有 USB , 所以 要 额外的 小板 用于 转换 usb 和 jta ...

  5. 基于运放AD8606的信号缓冲小板

    这是用于面包板实验的基于 AD8606 的信号缓冲电路板. 01设计与制作1 设计的电路板中包括有一个中间电压Splitter.一个直接电压信号涮涮,一个电容后额输入.一个同向电压跟随输出. ▲ 实验 ...

  6. 微星主板超频_微星垄断AMD、Intel平台内存超频记录 ITX小板惊人

    微星主板日前又创造了Intel平台的超频世界记录了,将内存频率进一步推向DDR4-5902MHz,更让人惊讶的是这次还是在微星Z390I GAMING EDGE AC这样一块ITX小板上创造的. 微星 ...

  7. 微信小程序调试之【不在以下合法域名列表中】

    在微信小程序中进行网络通信,只能和指定的域名进行通信.目前,微信小程序提供如下四种类型的网络请求. 普通HTTPS请求(wx.request) 上传文件(wx.uploadFile) 下载文件(wx. ...

  8. 原装世嘉土星手柄(Sega Saturn)转USB小板,软硬件全开源

    上次用模块制作了一个SS手柄转USB的控制器, 原装世嘉土星SS手柄(Sega Saturn)改USB接口,实现低延时USB格斗手柄_f78fk_liuyu的博客-CSDN博客_土星手柄接口 使用良好 ...

  9. 浅谈AM5728裸板调试

    一.浅谈ARM裸板调试 1. 连接仿真器,读写寄存器 将硬件仿真器插到ARM板的JTAG口上,然后连接PC,现在的ARM仿真器好像都是通过USB和PC相连了.连接好后,就给板子上电,然后打开PC端的调 ...

最新文章

  1. JavaScript的基础学习篇
  2. 15.for循环的三个表达式是可以省略
  3. tableau实战系列(三十九)-教你如何优雅的做图表展示-南丁格尔玫瑰图
  4. linux中的线程函数
  5. 《乌合之众》读书笔记(part1)--对群体而言,最不公正的也许却是最好的
  6. Flink之状态之状态存储 state backends
  7. [css] 用CSS绘制一个三角形
  8. 人脸识别研究任务及开源项目调研
  9. Python多重继承(一分钟读懂)
  10. 李开复发自前方:From Davos with AI
  11. 1941套站点模版,终生收藏,个个精品
  12. windows 10 安装 spark 环境(spark 2.2.1 + hadoop2.7)
  13. ntp时间同步软件_NTP服务器的搭建和时间同步
  14. 售价对标奢侈品,国货香水“德不配位”?
  15. 分享830个蜘蛛IP段(分析1G日志得)
  16. 程序员全职接单一个月的感触
  17. vue插槽,分分钟理解
  18. 免费PPT模板下载(不定时更新)
  19. 虚拟机服务器磁盘扩容步骤,vmware ESXi 虚拟机扩容磁盘空间
  20. 分销商城系统开发应用概述详解

热门文章

  1. 蓝桥杯第十三届大赛web大学组题目及答案解析
  2. 工作交接_java后端
  3. oo,aop,ioc概念详解
  4. [2022.10.30] Linux系统硬盘迁移方案
  5. EO DTO ViewModel的区别
  6. 微信小程序如何开发购物车的微信支付功能
  7. ECShop 商城小程序「weeshop 」- 基于 ECShop 3.6 版本开发的完整版商城小程序
  8. stem在计算机课程中的应用,浅谈小学信息技术课程中STEAM教育的应用
  9. VB版第三期人物---yoki
  10. 关于Codeforces的一点事