Android Qcom USB Driver学习(六)

该系列文章总目录链接与各部分简介: Android Qcom USB Driver学习(零)

眼图基础知识与详解
10分钟教会你看眼图
USB2.0 HUB眼图调试经验总结
一篇文章教你如何全面了解眼图测试!
预加重与去加重对眼图的影响
关于 USB 通信阻抗匹配的问题
硬件调试——眼图几个经典案例
眼图常见问题分析包含双眼皮的情况

PHY Tunning

devicetree:
qusb_phy0: qusb@1613000 {
                compatible = "qcom,qusb2phy";
                reg = <0x01613000 0x180>,
                      <0x003cb250 0x4>,
                      <0x01b40258 0x4>,
                      <0x01612000 0x4>;

                qcom,qusb-phy-init-seq = <0xF8 0x80   QUSB_TUNE1  0x01613000+0x80 = 0x01613080
			                  0xB3 0x84   QUSB_TUNE2
			                  0x83 0x88   QUSB_TUNE3
			                  0xC0 0x8C   QUSB_TUNE4    (0x90  TUNE5)
			                  0x30 0x08
			                  0x79 0x0C
			                  0x21 0x10
			                  0x14 0x9C
			                  0x9F 0x1C
			                  0x00 0x18>;
			   ...

kernel:
kernel/msm-4.19/drivers/usb/phy/phy-msm-qusb.c
qusb_phy_probe
    qusb_phy_create_debugfs
        qphy->root = debugfs_create_dir(dev_name(qphy->phy.dev), NULL);
        debugfs_create_x8("tune1", 0644, qphy->root, &qphy->tune1);
        debugfs_create_x8("tune2", 0644, qphy->root, &qphy->tune2);

qusb_phy_init
    if (qphy->qusb_phy_init_seq)
        qusb_phy_write_seq(qphy->base, qphy->qusb_phy_init_seq,
            qphy->init_seq_len, 0);

/* If tune modparam set, override tune value */
    if (qphy->tune1) {
        writel_relaxed(qphy->tune1,
            qphy->base + QUSB2PHY_PORT_TUNE1);
    }
  
    if (qphy->tune2) {
        writel_relaxed(qphy->tune2,
            qphy->base + QUSB2PHY_PORT_TUNE2);
    }
       ...

override:
cd /sys/kernel/debug/1613000.qusb
tune1  tune2  tune3  tune4  tune5
echo 0xxF8 > tune1

Eye diagram

在这里插入图片描述在这里插入图片描述

    信号不可能每次高低电平的电压值都保持完全一致,也不能保证每次高低电平的上升沿、下降沿都在同一时刻。如图,由于多次信号的叠加,眼图的信号线变粗,出现模糊(Blur)的现象。所以眼图也反映了信号的噪声和抖动:
    在纵轴电压轴上,体现为电压的噪声(Voltage Noise = 眼幅高与眼高之间的差值);
    在横轴时间轴上,体现为时域的抖动(Jitter = 眼交叉比),太大会造成误码率增加,越小信号质量越好,发生误码的机率越低。
    由于噪声和抖动,眼图上的空白区域变小。在除去抖动和噪声的基础上,眼图上空白的区域在横轴上的距离称为眼宽(Eye Width),在眼图上叠加的数据足够多时,眼宽很好的反映了传输线上信号的稳定时间;同理,眼图上空白的区域在纵轴上的距离称为眼高(Eye Height),在眼图上叠加的数据足够多时,眼高很好的反映了传输线上信号的噪声容限,同时,眼图中眼高最大的地方,即为最佳判决时刻。
    套住模板只是眼图的最基本的要求,如果有覆盖到红色区域的,一般眼图的质量是最差的,可能更多的需要硬件去rework;如果出现双眼皮的情况,在上面转载的最后的两篇博客中写道,有可能是阻抗不匹配,也有可能有串扰需要加重处理。

tune1           HS output impedance from 45 Ω Nominal in FSLS mode
                Tx swing等于输出电流乘以并联QCM/QCS USB 2.0 PHY 输出阻抗和接收器终端电阻的电阻,
                在低速ls和全速模式fs下是电压驱动的,但在高速hs模式下是电流驱动的,所以仅能调整fsls的输出阻抗,
                一般DP DM上有45Ω接地,USB线的特性阻抗为90Ω,想源端与USB线匹配就需要串电阻,具体阻值是要根据驱动器的输出阻抗来决定
tune2           HS output current to increase Vlogic_high level   +  HSTX slew-rate
                slew-rate应该是影响眼图的斜率,tune1 + tune2 + tune4 结合可以调整眼图的质量,增加usb的驱动能力
tune3           Receiver sensitivity, adjust the squelch threshold to compensate for a USB bus series loss
                接受灵敏度作用时PCB上传输线的长度的增加,信道的损耗会变大,眼图的高度会变小,但不是说所有走线越短越好。
tune4           add pre-emphasis to amplitude or no pre-emphasis
                在高速信号传输中,信号链路对高频信号的衰减大于对低频信号的衰减,这就会导致高速信号中高频和低频之间巨大的幅度差,
                反应在眼图上就是减小了眼高,并增大了Jitter(眼皮的厚度),预加重目的就是为了提升信号中的高频部分,尽量平衡高频和低频的分量
tune5           Disconnection voltage,the software does not override this register
                这个就字面意思上,应该时不需要去tunning的吧

qcom,tune2-efuse-correction: The value to be adjusted from fused value for improved rise/fall times.
高通的有些平台可能会将生产时的fuse校准值写入 TUNE1 或 TUNE2 寄存器,所以还需要dtsi中做特殊处理
如果是qusb v2 driver的版本,支持一组单独的参数qusb-phy-host-init-seq在host模式下

    眼图测试还分近端和远端,一般近端的要求会比远端的苛刻,并不说是只跟数据线的距离有关
    以上是我的个人理解的基础知识,不同平台用的寄存器含义是不同的,所以基础原理我觉得差不多,具体问题具体平台需要具体分析。

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值