高通平台 mipi转接屏调试 (以转lvds icn6202例)

mipi to lvds显示调试

调试前准备:

获取屏的规格书 获悉的关键信息

  • VDD 需要 3.3v 
  • RST 3.3v 拉低进 rst 
  • LVDS 4 组数据 差分信号,clk 一组差分信号
  • SELB 决定 数据格式 6bit or 8bit 

  • Dclk 典型值 51.2M
  • H 水平方向典型值 1024
  • V 垂直方向典型值 600
  • H total典型值 1344 
  • 预分配 :h-front-porch 160,  h-back-porch 150, h-pulse-width 10
  • V total典型值 635  
  • 预分配 :v-back-porch 15,    v-front-porch 15,  v-pulse-width 5

获取转接芯片规格书及寄存器信息data sheet

  • VDD18,VDD18_LVDS,VDD18_PLL,VDD18_RX。

四个电源管脚统一电压1.8V。

芯片工作电流在20-40mA左右,跟实际使用的分辨率相关,待机时拉低EN,电流10uA以下

  • VCORE

建议外接四颗电容,两颗1uF,两颗10nF。最少不应少于两颗外接电容,一颗1uF,一颗10nF。电容尽量靠近芯片的VCORE管脚。

  • DSI INPUT

支持1-4路MIPI DSI数据链路。不用的MIPI数据链路保持管脚悬空即可。支持RGB888,RGB666,RGB565输入。MIPI DSI接口支持Video Mode进行视频数据传输,MIPI Command Mode进行寄存器配置。当使用MIPI Command Mode配置寄存器时,可以省掉IIC接口。另外,将MIPI CLK配置为连续的High Speed模式,可以作为参考时钟使用,省掉外部晶振。

  • REF_CLK2

参考时钟管脚,外接晶振。要求是交流耦合,需要在晶振和管脚间串接一颗1nF电容。外接晶振作为芯片的参考时钟,芯片内部有PLL锁相环,对晶振的精度要求不高。外接参考时钟仅作为备选方案,推荐客户使用MIPI CLK作为参考时钟。这种情况下,REF_CLK管脚接地即可。

  • SDA,SCL

IIC通信管脚。配置芯片寄存器使用。芯片寄存器有两种配置方式,一种通过IIC一种通过MIPI Command Mode。当使用MIPI配置寄存器时,IIC接口可以省掉。

  • ADDR_SEL

IIC地址选择管脚,拉高IIC地址为0x5A,拉低IIC地址为0x58。(八位地址)

  • IRQ

芯片中断管脚。建议连接到主控的中断或者GPIO管脚。当芯片工作状态异常可以输出中断信号,复位芯片等。

  • GPIO0,GPIO1

调试管脚。PCB空间充裕可以拉出测试点,供调试时使用。

  • IC_EN

使能管脚。EN拉低芯片复位,EN拉高芯片工作。EN管脚拉低后,芯片进入低功耗模式,待机电流10uA以下。EN拉低再拉高后,芯片需要重新配置寄存器。

  • ATEST,TEST_EN,BIST_EN

悬空或者接地。无功能。

  • LVDS OUTPUT

LVDS输出管脚。支持VESA,JEIDA标准,支持18bit模式,24bit模式。LVDS链路管脚可交换,组内PN可交换。

  • 寄存器0x00, 如果通信正常,读取改寄存器,应该会返回0xc1,可以帮助我们debug状态。

其他寄存器信息,可以在实际实际调试过程中来查看。

获取硬件原理图,pcb

浏览原理图,获悉的关键信息:

 ​​​​​

  • SELB 为low,即数据格式是8bit

  • Soc 需输出4lane mipi信号到转接芯片,组间信号无调整,一一对应。
     
  • 转接芯片输出的4组 lvds data,1组lvds clk,需要注意的是,客户这里是将 N,P 做了交叉,所以配置转接芯片寄存器时,需要额外注意。(通过观察主板实物来看,这样做的目的应该是为了更好的layout走线,避免走线交叉)

4转接芯片 icn6202

  • IC en脚是芯片的使能脚,直连到soc gpio8, 如果有使用i2c方式配置,需要添加设备驱动,我们可以自行添加 ic_en的控制逻辑,如果使用mipi配置,我们可以在高通的mdss_dsi0的驱动中添加,这里也可以利用原有的rst脚来替代。
  • Vdd 是1.8v,来自于 LDO6。
  • ADDR_SEL 是i2c地址的选择脚,做兼容使用, 这里接gnd 写地址是0x58, 读地址是0x59,即7位i2c地址应该是0x2c。
  • I2c 是接到sensor i2c,对应 sc20的 i2c1上。
  • VCORE有提供测试点,可帮助我们通过量取电压值debug 芯片的状态。
  • REFCLK2 是外接了 26M 晶振, 这里的晶振电路要参考 参考设计的。
  • RST脚是1.8v,lcd 需要3.3v,客户添加了一个三极管,这里就必须要注意了,这个电路逻辑是反向的,soc输出1.8v 三极管导通,rst 为low,soc 输出0v,三极管不导通,rst为高。
  • 背光通过 pwm来控制,pwm来自 pm8909_mpps 2

调试流程

  从此图可移看出来,相对于传统的调试mipi的数据框架中,使用转接芯片是在原有的流程中转接ic接收了来自soc的mipi信号转而输出lvds信号给到panel, 这个过程中,soc依旧是输出同样的mipi数据信号以及一些管脚配置。 那么我们可以认为,此状态下,soc就是将转接ic(icn6202)当做panel来配置,至于 转接ic输出何种信号,当根据后端所连接的panel的具体类型来做相应的配置,soc不关心实际panel的类型。那么整个配置流程便可以拆解为两个部分,第一部分是 转接ic的驱动配置,第二部分是soc mipi信号输出的配置,下面是对这两个部分的简单介绍。

Icn6202的配置

  • 点亮屏首先需要点亮背光,虽然背光这部分不属于转接ic的配置,但是为了单独验证icn6202的配置,第一步依旧是关注背光。
    根据前面获取的信息,背光是靠PWM方式来控制的,客户的主板上有了升压电路,是长供电所以我们只关心pwm的配置,pwm来自pm8909_mpps 2,是msm8909的默认配置
    主要的配置如下:qcom,mdss-dsi-bl-pmic-control-type = "bl_ctrl_pwm";
qcom,mdss-dsi-bl-pmic-pwm-frequency = <100>;

qcom,mdss-dsi-bl-pmic-bank-select = <0>;

qcom,mdss-dsi-pwm-gpio = <&pm8909_mpps 2 0>;

bl-pmic-control-type 会在panel驱动中做解析,选择bl_ctrl_pwm 即会选择相应的背光控制逻辑,pane驱动中 已经向led子系统注册了相关的节点,根据我们选择的bl_ctrl_pwm 会进入相应的brightness_set函数中,这个函数中会根据pwm-gpio 选择 pm8909mpp2,设置为pwm输出,根据

pwm-frequency设置频率, 根据传入的亮度值设置占空比; pm8909mpp2的设置是在msm8909-pm8909-mtp.dtsi 中设置的,主要如下:

mpp@a100 { /* MPP 2 */
		/* Backlight PWM */
		qcom,mode = <1>;		/* Digital output */
		qcom,invert = <0>;		/* Disable invert */
		qcom,src-sel = <4>;		/* DTEST1 */
		qcom,vin-sel = <0>;		/* VPH_PWR */
		qcom,master-en = <1>;		/* Enable MPP */
	};

具体pmic相关寄存器的设置选择,及panel驱动中背光控制的代码控制实现这里就不详细描述了。

  • 根据芯片规格书的描述,icn支持两种配置方式,i2c 和 mipi comman的方式,在还未点亮之前,我们需要不断的debug其状态,且根据上面提到的流程分割,这部分暂时不关心soc的mipi 配置(通过上面我们获取的调试信息,icn6202的clk来自外部晶振,即可完成独立工作),减少可能会出现的问题点,推荐先使用i2c的方式。

Icn6202的配置流程比较的人性化,ic厂提供了一个生成寄存器配置的工具,用于转换,对lvds的配置如下图。

这里需要注意,根据前面获取的信息,填入屏幕参数后,lvds的P N SWAP5组信号都要使能 SWAP;且需要选择8bit。

点击绿色的生存按钮即可生成,要根据我们panel的要求来写入固定的数据到相应的寄存器,所以ic厂并没有提供参考驱动代码,这里我们可以自己实现。

主要需要我们来实现一个i2c的读写函数,根据寄存器手册,读写都是一个byte,实现如下:

 驱动加载的主要逻辑如下:

​​​​​​​Icn6202 init 即是写入需要配置的寄存器参数, 由于当前还未配置soc的mipi输出,根据寄存器手册的描述我们可以先通过配置icn6202进入测试模式,bittest color bar,通过设置转换工具也可以知道,需要写入的寄存器是0x10 = 0x47,0x2A = 0x41,完整的配置如下:

​​​​​​​

综上在驱动加载的过程中,首先判断读ID是否读取成功,给LDO6上电,拉低RST(反向到3.3),先拉低再拉高EN脚,让ic复位, 写入如上的寄存器(调试过程中,最好回读一下这些寄存器,看看。也可以根据芯片的描述监听irq信号去debug)。

  理论上 硬件ok的话,测试lcd会显示彩条, 如果未能显示,需要检查REFCLK2,使用示波器测量是否得到26M的clk信号,检测其晶振电路,检查vcore ~=1.28v.确保芯片工作ok。 再测量屏上的信号,vcom3.3v,背光电压,rst(这个要格外注意客户反向了这路电),pwm;这个过程中遇到问题 务必回过头再详细阅读规格书,datasheet以及硬件电路设计,一般我们调试的主板都是客户设计的,基带不能面对面沟通,需要自己细心去发现需要注意的点。

都ok的应该就会输出如下彩条了。

​​​​​​​

Mipi输出设置​​​​​​​

这部分流程就是点亮高通屏相同的流程了,这里就不再详细描述高通平台配置屏的具体详细流程,对应该平台可参考高通的文档80-nu323-3_b,

简单梳理下.调试在配置流程中要以注意的地方

  • 填入panel需要的 的相应参数,这些参数应该和我们再转机ic中配置的保持一致,如下:

根据芯片的描述设置对应的特性, 如dsi-traffic-mode,timing等,如果客户硬件设计转接ic的clk不来自外部晶振,从mipi clk恢复的话,还需要设置 mipi clk强制为高速模式,通过量取mipi clk的波形来观察是否设置成功。

​​​​​​​

  • 前面提到,除了使用i2c的配置方式,我们还可以使用mipi command的方式来做转接ic配置

这里需要提到一点,一般这些lcd的参数都已经固化,不需要我们来额外的去配置,那我们可以修改高通初始化panel的时候发送init command的流程来配置转接ic。

首先我们需要了解高通配置 init command的dsi数据包的格式,80-nu323-3中相关描述如下:
​​​​​​​

对应的将彩条测试通过的那组参数对应的填到 command数组中

​​​​​​​

同理在 lk中 也做相应的配置即可, 这里就不再详细描述。

  • 建议使用device/qcom/common/display/tools/parser.pl 脚本生成填充 配置panel,bootloader,kernel中需要的配置文件。
  • 使用mipi command配置,即不需要加载自行实现的i2c驱动了,注意将rst脚换成我们的转接ic 的en,同时注意ldo6的上下电,如果客户使用的不是ldo6这路电,需要在 原有的逻辑上加上对应的一路电。

通过以上配置,硬件上ok的话,即可输出正常的android画面。 调试过程中,多使用示波器测量相应的信号电平及波形,确认了本文提及的一些点后,基本上都可以成功点亮。

​​​​​​​

  • 1
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值