首页 > 其他分享 >Android Qcom USB Driver学习(六)

Android Qcom USB Driver学习(六)

时间:2024-08-23 11:50:15浏览次数:13  
标签:qusb 眼图 Driver phy Qcom tune2 Android tune1 qphy

眼图基础知识与详解
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模式下

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

标签:qusb,眼图,Driver,phy,Qcom,tune2,Android,tune1,qphy
From: https://www.cnblogs.com/linhaostudy/p/18375708

相关文章

  • 容器设置日志驱动程序 - docker --log-driver
    环境:在创建docker时候遇到该异常信息:docker:Errorresponsefromdaemon:logger:nologdrivernamed'local'isregistered.在linux系统下使用docker进行容器创建时候,一般情况下会对docekr的日志驱动做设置,以避免文件过大导致磁盘占满的情况,如下记录自己的一些经理,希望对朋......
  • 【Android笔记】Android APK编译打包流程
    前言本文将介绍Android从一个项目打包成APK的过程,其中涉及AndroidJava和Kotlin文件、资源文件、清单文件、依赖jar包和so库等在打包过程中处理。步骤总体的打包流程如下图,下面就介绍下详细的打包步骤。1、将aidl文件编译成java文件在构建过程中,Gradle会调用AIDL编......
  • Android逆向(七) 解密COCOS游戏lua脚本-第1篇
    目录一、系统环境二、详细分析前言:1.lua脚本是什么?2.为什么游戏开发要用lua脚本?正文:获取Lua脚本的几种方法:1.直接在assets目录提取2.在luaL_loadbuffer函数处获取3.在底层的reader函数处获取1.静态分析2.动态分析一、系统环境OS:Windows_NTx6410.0......
  • HTC 10 刷系统 LineageOS 19.1 Android 12
    解锁手机解锁会导致数据全部清除,注意保存Bootloader解锁,S-ON可以不用解锁(好像可以绕过解锁安装twrp,暂时没尝试)HTC官方UnlockBootloaderHTCDesire20pro可以不通过官方网站解锁adbrebootbootloader#进入bootloadersudofastbootflashingunlock#选择UNLOC......
  • 深入理解Android MTP之存储映射分析
    深入理解AndroidMTP之UsbService启动分析 分析了MTP的服务端的启动,本文来分析切换MTP模式后,存储中的数据(文件、目录)是如何映射到PC端的。首先你得知道如何切换MTP模式。当手机通过usb连接电脑时,会出现一个关于usb的通知,点击通知后,会出现一个类似如下的界面这个FileTransfe......
  • android调用h5代码步骤
    要在Android应用中调用H5代码,可以使用WebView来加载并执行H5代码。以下是一个简单的示例:首先,在你的Android项目中的布局文件中添加一个WebView组件:```xml<WebView  android:id="@+id/webview"  android:layout_width="match_parent"  android:layout_height="......
  • 免费【2024】springboot 基于Android的个人财务系统的设计与实现
    博主介绍:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌技术范围:SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数......
  • 免费【2024】基于Android的房屋租赁App的设计与实现
    博主介绍:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌技术范围:SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数......
  • 免费【2024】基于Android的房屋租赁App的设计与实现
    博主介绍:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌技术范围:SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数......
  • 免费【2024】springboot 基于Android的个人财务系统的设计与实现
    博主介绍:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌技术范围:SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数......