USB HS-PHY眼图调试

news2024/10/7 16:21:42

1 USB2 PHY AFE
1.1 USB 2.0 FS PHY
github ultraembedded / core_usb_fs_phy

NOP USB transceiver for all USB transceiver which are either built-in into USB IP or which are mostly autonomous.

1.2 电阻参数
USB host端:D+和D-各接一个15kΩ的下拉电阻;
USB slave端:高速和全速D+接一个1.5kΩ电阻上拉到3.3V;低速在D-上接一个1.5kΩ电阻上拉到3.3V。高速chirp KJ握手(Chirp KJ的频率大概是10KHz)成功后,自动断开D+上的1.5kΩ上拉;当高速设备进入suspend时,使能D+上的1.5kΩ上拉到3.3V,退出suspend时,断开D+上的1.5k上拉。

集线器的全速驱动器和设备的全速驱动器在功能上等效成每个都是45Ω电阻,合成90Ω的差分电阻产生一个0系数的反射。这样才产生了cable的特征阻抗是90Ω的需求。

HS模式DP/DM对地单端阻抗为45Ω(由全速驱动器形成的一个阻抗为45Ω的终端电阻),串联的匹配电阻必须是0,否则眼图有问题;LS/FS的DP/DM上必须有大于0的匹配电阻。 HS模式DP/DM的DC-level是17.78mA x (45Ω//45Ω) = 17.78mA x 22.5Ω = 400mV,其中17.78mA是电流源(一般需要PHY外接参考电阻), 所以差模电压是800mV。DC-level of LS/FS is 3.3V。

HS PHY DP/DM上串联10Ω电阻带来的信号完整性问题如下计算所示。

Center

Udevice = 17.78mA*(45//(10+45)) = 440.1mV, Uhost = (45/(45+10))*440.1 = 360.1mV

1.3 Capture the USB2.0 Reset Signals
Capture the USB signals Dm and Dp with a scope (preferably 1 GHz or better) during the reset.
Set timebase to 20 ms/div, trigger on falling edge of Dp with trigger level set to 1.5V. Trigger position at the left of the screen.

1.4 Chirp握手
1)Chirp K信号
Chirp K的电压幅值为800 mV = (host 45 Ohm // device 1.5 K Ohm) x 17.78 mA,持续时间约1到7 ms。
2)Chirp KJ信号
设备检测到Hub发送的3对KJ序列后,切换到高速收发器,此后Hub发送的KJ序列电压幅值降为400 mV = (host 45 Ohm // device 45 Ohm) x 17.78 mA,Chirp KJ的频率大概是10KHz。

1.5 Tx和Rx Tuning
1.5.1 far end and near end
far end: more than 10cm cable, iPhone connected to HU via cable
near end: less than 10cm cable, USB flash drive connected to HU
bad cable: Remove ESD

1.5.2 4个放大器
发送放大器,接收放大器,静噪检查放大器(检测地板电压),断开检测放大器(检测天花板电压)。

1.5.3 Tx
USB2 Pre-emphasis:预加重,可以放大发送信号的高频部分。
rise/fall time:You can raise these values for quick slew rate.

1.5.4 Rx
USB2 squelch:接收探测包络(静噪检测)。例如,设成100mV, 就是说DP/DM的DC-level在100mV 以下的信号USB2 XCEIV 认为都是噪音,因为USB2 的DP/DM的DC-level大概是400mV。

detail:squelch level = envelop, 静噪(包络)检测电压,在PHY parameters里面这个电压可以设置的,假如设置了这个值是100mV,意思就是当PHY Rx 从DP/DM上接收到的电压绝对值小于100mV的信号,PHY认为是噪音,直接丢弃。

Host disconnect threshold adjustment:
USB断开时,由于2个并联的45 Ohm电阻只剩一个,瞬时反射电压是45 Ohm * 17.78 mA = 800 mV,所以一般取一个折中的数据625 mV,大于该阈值就表示USB连接已经断开。

1.6 PHY Retention
一种低功耗Power Gating技术。

1.7 QCOM Chipidea USB2 PHY tuning
HSETT:HS Electrical Test Tool,USB-IF官方测试device眼图的PC软件,运行时,会将Windows默认的EHCI驱动替换成USB-IF官方写的驱动,百佳泰提供USB-IF认证测试。
Device眼图:单眼皮形状。
Host眼图:双眼皮形状。如果眼图是双眼皮,可判断出信号可能有串扰或预(去)加重。
0x82:PARAMETER_OVERRIDE_C
bit 6:0 -- for decreasing rise/fall time(slew-rate) and raising pre-emphysis
// /sys/module/phy_msm_usb/parameters/override_phy_init
// format
// <val addr [...] val addr 0xffffffff>;
&usb_otg {
        [...]
        qcom,hsusb-otg-phy-init-seq =
        <0x44 0x80 0x68 0x81 0xXX 0x82 0x13 0x83 0xffffffff>;
};

2 APL xHCI HS眼图调试
2.1 EHCI眼图调试寄存器设置流程
第一步:把寄存器USBCMD的bit4和bit5设成0
第二步:把寄存器USBCMD的bit0和bit6设成0
第三步:
- 对应的USB port的PORTSC,port suspend(bit7)设置成0
- 然后把测试模式selector(取值范围:>0,<5,这个数字对应眼图夹具上的那个开关的拨弄的编号)写到PORTSC中(selector << 16)

2.2 xHCI每个port的4个寄存器
- EHCI每个port都有一个寄存器PORTSC
- APL (Gen9, A39X0) xHCI中每个2.0和3.0 port entry的寄存器个数(包括PORTSC)都是4,并且每个port entry占了16个字节

2.3 xHCI HS眼图调试寄存器设置流程
第一步:把寄存器USBCMD的bit0设成0
第二步:
- 对应的USB port的PORTSC,port power(bit9)设置成0
- 然后把测试模式selector(取值范围:>0,<5,这个数字对应眼图夹具上的那个开关的拨弄的编号)写到PORTPMSC中(selector << 28)

验证方法:
- 把selector的值设成1,这时候你用万用表去量D+的电压为高(0.4V),而D-的电压为0,就说明寄存器设置对了
- 要测试眼图,只要把selector设成4就行了

注意点:
1)测试Host眼图时Golden Device参考板使用Cypress Ref Board
2)Intel xHCI HS不支持修改DC level(400mV)

2.4 xHCI HS Roothub眼图测试patch
in xhci-hub.c
int xhci_hub_control(struct usb_hcd *hcd,
    u16 typeReq, u16 wValue,
    u16 wIndex, char *buf, u16 wLength)
{
    [...]
    unsigned selector;
    [...]

        case SetPortFeature:
            if (IS_ENABLED(
                CONFIG_USB_EHSET_TEST_FIXTURE))
                selector = wIndex >> 8;
            [...]
            /* p320, s4.19.6 Port Test Modes
             * in xhci spec
             */
            case USB_PORT_FEAT_TEST:
                if (!IS_ENABLED(
                CONFIG_USB_EHSET_TEST_FIXTURE))
                {
                    (void)selector;
                    goto error;
                }

                if (hcd->speed >= HCD_USB3)
                    goto error;

                if (!selector || selector > 5)
                    goto error;

                spin_unlock_irqrestore(&xhci->lock,
                    flags);
                xhci_quiesce(xhci);
                spin_lock_irqsave(&xhci->lock,
                    flags);

                /*
                 * Put all enabled ports into
                 * Disabled state, Port Power = 0
                 * FIXME: only can set
                 * port_array[#wIndex] to PP = 0
                 */
                temp = readl(port_array[wIndex]);

                temp &= ~(1 << 9);
                writel(temp, port_array[wIndex]);
                temp = readl(port_array[wIndex]);

                spin_unlock_irqrestore(&xhci->lock,
                    flags);
                retval = xhci_halt(xhci);
                spin_lock_irqsave(&xhci->lock,
                    flags);

                temp = readl(port_array[wIndex] +
                    PORTPMSC);
                temp &= ~(0xf << 28);
                temp |= selector << 28;
                writel(temp, port_array[wIndex] +
                    PORTPMSC);

                break;
    [...]
}

3 EMC测试
3.1 出问题的RF频点
步长20MHz,380MHz和440Mhz容易出问题。

3.2 EMC干扰后,USB设备断开走的代码路径
- U盘,走hub.c的usb_reset_device();USB设备使用过程中复位与设备第一次连接复位的区别是udev->config非空;获得syspath路径函数kobject_get_path(kobj, GFP_KERNEL)
- USB转以太网,走hub.c的EM interference
- 表现与手工插入、移除一样

3.3 寄存器判断 - xHCI
宏中有大写C(change)的表示描述的是wPortChange。
每次insertion有多次portsc寄存器打印,是因为:
- USB reset前,调用hub_port_debounce()多次轮训portsc寄存器,确认设备连接
- USB reset时,调用hub_port_wait_reset()多次轮训portsc寄存器确认复位是否成功(检查portsc.bit1是否为1,1表示成功,否则失败)

wPortStatus(对应到xHCI portsc.bit0 - portsc.bit15):
bit0 - 有无设备连接,portsc.bit0
bit1 - 端口是否使能,portsc.bit1
bit4 - 端口是否有复位信号,portsc.bit4
bit8 - 端口电源,portsc.bit9,for USB2
bit8...bit5 - PORT_LINK_STATE,portsc.bit8...portsc.bit5,for USB3
wPortChange(对应到xHCI portsc.bit17 - portsc.bit31):
bit0 - 端口连接改变位,portsc.bit17
bit1- 端口使能/禁止改变位,portsc.bit18

4 TDR
- 时域反射计:又称为电缆雷达,测量传输线、FPC、USB线缆等的阻抗是否均匀
- TDR测试设备:USB VNA(Vector Network Analyzer),矢量网络分析仪
- TDR测试时的激励脉冲(TDR阶跃脉冲发生器)的周期需要与真实波形的周期一样,譬如480MHz的USB HS数据
- iAP2或者U盘数据传输的过程中出现usb_reset_device(),可以在这个函数中对cable dpdm进行放电处理,这样可以消除由于cable的TDR测试不合格并且长时间运行导致容抗或者阻抗变化(USB眼图中,容抗越大,上升沿和下降沿越慢)而致使的USB设备断开后无法重新re-enumerate
- 差分信号为什么在高速传输中电压往往会很低呢?原因就是为了获得更短的上升沿时间,这样数据传输速率就上去了

5 URLs
daisho USB
http://www.greatscottgadgets.com/daisho/

6 Abbreviations
AFE:USB PHY Analog Front-end
ARC:Argonant RISC Core
BYOD:bring-your-own-device,CarPlay和Android Auto就属于BYOD
CCGP:Windows USB Common Class Generic Parent,Linux内核类似的驱动就是usb_generic_driver(generic.c)
CCGP MI_:Common Class Generic Parent Multi Interface
Cross-talk:测试串扰使用的字节一般是0x55和0xAA
CYPRESS TD_Poll:Task Dispatch
Daisho:大小
DWC2:Design Ware Controller 2,Apple的嵌入式设备,包括iPad和iPhone都是使用的DWC2
giveback:归还 - ehci_urb_done() -> usb_hcd_giveback_urb()。USB PD中的giveback(= 1)指sink会响应source的GotoMin请求,返还部分电力给source。
halt:停车或者站住,来自于德语;USB endpoint停止运行,返回stall handshake。recovery方法:control ep接收下一次SETUP PID时,自动清除halt标志;其它ep使用clear_feature复位ep halt。
HSSQ:USB PHY High-speed Squelch
HX3C:USB Type-C Hub with PD
IAAD:EHCI Interrupt on Async Advance
ISP1161:Philips' Integrated host Solution Pairs 1161,“Firms introduce USB host controllers”,https://www.eetimes.com/document.asp?doc_id=1290054
nds:Nintendo Dual Screen,ULPI NXT、DIR、STP
PIPE:PHY Interface for PCI Express
SL811HS:Cypress/ScanLogic 811 Host/Slave,性能上与ISP1161(Integrated host Solution Pairs 1161)相当
SSUSB-QMP:QCOM Multiple Protocol Phy
suspendM:UTMI suspend Macrocell
TDI:TransDimension Inc.,该公司首先发明了将TT集成到EHCI RootHub中的方法,这样对于嵌入式系统来说,就省去了OHCI/UHCI的硬件,同时降低了成本,作为对该公司的纪念,Linux内核定义了宏ehci_is_TDI(ehci);产品UHC124表示USB Host Controller;收购了ARC USB技术;现已被chipidea收购,chipidea又被mips收购
TDR: Time Domain Reflectrometer
TT:Transaction Translator(事务转换器,将USB2.0的包转换成USB1.1的包)
TVS:Transient Voltage Suppressor,特殊二极管,连到VBUS、DP/DM、GND,防止浪涌电流(Surge)
USB BH reset:Bigger Hammer or Brad Hosler,表示warm reset;you may be confused why the USB 3.0 spec calls the same type of reset "warm reset" in some places and "BH reset" in other places. "BH" reset is supposed to stand for "Big Hammer" reset, but it also stands for "Brad Hosler". Brad died shortly after the USB 3.0 bus specification was started, and they decided to name the reset after him. The suggestion was made shortly before the spec was finalized, so the wording is a bit inconsistent.
USB3 BULK Stream ID:对应到SCSI Tag或者SATA Tag
USB Host枚举时-71错误码可能原因:DP和DM走线太长导致眼图差;DP和DM接反了
USB PET:USB Protocol and Electric Test Instrument
VNA:Vector Network Analyzer,矢量网络分析仪
共模电感:会导致USB眼图变差,所以要选择好一点的共模电感

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/495955.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构学习记录——堆的建立(最大堆的建立、思路图解、代码实现、代码解释)

目录 最大堆的建立 方法1 方法2 思路图解 代码实现 代码解释 PercDown BuildHeap 最大堆的建立 建立最大堆&#xff1a;将已经存在的N个元素按最大堆的要求存放在一个一维数组中。 方法1 通过插入操作&#xff0c;将N个元素一个一个地插入到一个初始为空的堆中去。…

CSA发布|《洞察2022 云上数据安全与重要事项 》

云安全联盟大中华区就云上数据安全和重要事项的洞察和建议等相关问题展开调查并发布《洞察2022 云上数据安全与重要事项 》&#xff08;以下简称《报告》&#xff09;。报告的主要内容是关于云上数据安全和重要事项的洞察和建议。它包括了对云安全现状的分析、云安全风险的评估…

git的学习

文章目录 一、Git 的简介二、Git 工作流程三、Git 工作区、暂存区和版本库总结 一、Git 的简介 Git 是一个开源的分布式版本控制系统&#xff0c;用于敏捷高效地处理任何或小或大的项目。 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软…

【c语言】字符串比较 | API仿真

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 给大家跳段街舞感谢支持&#xff01;ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ …

RabbitMQ可靠性消息发送(java实现)

本博客属于 《RabbitMQ基础组件封装—整体结构》的子博客 一、整体架构 step1&#xff1a;消息落库&#xff0c;业务数据存库的同时&#xff0c;也要将消息记录存入数据库&#xff0c;二者要保证原子性&#xff1b; step2&#xff1a;Producer发送消息到MQ Broker&#xff1b…

Formik使用详解

Formik使用详解 1 引言 在现代Web应用程序中&#xff0c;表单是一种不可避免的输入机制&#xff0c;但是处理表单的过程可能会变得非常复杂。Formik是一个React表单库&#xff0c;它的目标是简化表单处理的过程。本文将介绍Formik的主要功能和用途&#xff0c;以及如何使用它来…

怎么成为一名架构师?架构师第一步。基层开发人员逆袭成为架构师真的很难吗?

文章目录 写在前面一、企业需要什么样的架构师1、从招聘软件上了解2、架构师的主要职责与能力 二、成为一名架构师很难吗1、架构师的定义2、当前大部分开发团队的现状3、为什么要有架构师4、技术人员如何自我突破 三、晨钟暮鼓的几句话 写在前面 一个团队中&#xff0c;每个人…

JAVA基础:Scanner类中next(), nextLine(), hasNext(), hasNextLine()

一、next() : 只读缓冲区中空格之前的数据,并且光标指向本行。二、nextLine() : 读取除回车以外的所有符号(整行内容)&#xff0c;光标定位在下一行三、hasNext() &#xff1a;检查下一个标记&#xff08;token&#xff09;&#xff0c;也就是以空格、制表符或换行符为分隔符的…

[JAVA EE]创建Servlet——实现Servlet接口笔记1

创建Servlet的方式之一&#xff1a;实现servlet接口 servlet的生命周期&#xff1a; 1、实例化&#xff1a;创建servlet实例对象 2、初始化&#xff1a;调用init方法完成初始化工作 3、服务&#xff1a;调用service方法来处理用户请求 4、销毁&#xff1a;调用destroy方法…

Java算法比赛常用方法

1. 开方&#xff1a;Math.sqrt(x); 2. x的a方&#xff1a;Math.pow(x,a); 3. 绝对值&#xff1a;Math.abs(x)&#xff1b; 4. BigInteger&#xff1a;大数&#xff08;加&#xff0c;减&#xff0c;乘&#xff0c;除&#xff0c;取余&#xff09; c.add(d) ; c.subtract(d)…

如何用100天彻底学会Python?

Python 是一门功能强大、易于学习且历史悠久的编程语言。如果你希望在短时间内彻底学会 Python&#xff0c;需要制定一个全面的学习计划&#xff0c;并进行刻意的练习和实践。 以下是一份建议的学习计划&#xff0c;帮助你在 100 天内掌握 Python 技能。 第 1-10 天&#xff…

从bootamition出发分析OpenHarmony下Gralloc buffer管理机制

从bootamition出发分析OpenHarmony下Gralloc buffer管理机制 引言 这个文档主要记录从bootamition角度出发&#xff0c;分析OpenHarmony下对gralloc buffer的管理&#xff01;由于OpenHarmony图形子系统过于复杂&#xff0c;且个人由于能力有限&#xff0c;这里我仅从gralloc b…

2023.03青少年机器人技术等级考试理论综合试卷(五级)

2023年3月青少年机器人技术等级考试理论综合试卷&#xff08;五级&#xff09; 一、单选题(共 20 题&#xff0c;共 80 分) 1. 0x35 & 7 的结果是&#xff1f;&#xff08;A &#xff09; A. 5 B. 55 C. 50 D. 54 2.一般状况下&#xff0c;关于主控板的工作电压&#xff0c…

「 Redis 」大key对持久化有什么影响?

「 Redis 」大key对持久化有什么影响&#xff1f; 参考&鸣谢 Redis 大 Key 对持久化有什么影响&#xff1f; XiaoLinCoding 解决了Redis大key问题&#xff0c;同事们都夸他牛皮 大白斯基 快手面试官&#xff1a;Redis变慢了&#xff0c;如何快速排查&#xff1f; Java 那些…

Vue 2.0 学习笔记

Vue学习笔记 文章目录 Vue学习笔记[toc]一、数据代理实现二、事件相关1.事件修饰符2.键盘事件 三、计算属性与监视1.计算属性-computed2.监视-watch 四、条件渲染1.v-show2.v-if&#xff0c;v-else-if 五、循环遍历1.v-for语法2.key的作用与原理 六、内置指令1.v-cloak指令&…

使用GitHub分享项目

一、注册账户 访问GitHub网站&#xff0c;点击“Sign up”按钮开始注册账号。然后按照提示输入你的用户名、电子邮箱地址和密码&#xff0c;提交成功后通过邮箱或你注册的手机号码进行验证身份。 二、上传项目 想分享自己的项目&#xff0c;首先需要在GitHub上创建一个新的仓库…

React + ts学习笔记

前提准备&#xff1a; 环境配置 安装node.js 官网安装&#xff1a;当前使用版本18.15.0 安装新的react应用&#xff1a; 运行命令新建react-app npx create-react-app study-ts-app当前版本&#xff1a; “react”: “^18.2.0”,“react-dom”: “^18.2.0”, 如果出现如…

优维低代码实践:第一个微应用

优维低代码技术专栏&#xff0c;是一个全新的、技术为主的专栏&#xff0c;由优维技术委员会成员执笔&#xff0c;基于优维7年低代码技术研发及运维成果&#xff0c;主要介绍低代码相关的技术原理及架构逻辑&#xff0c;目的是给广大运维人提供一个技术交流与学习的平台。 优维…

vue-element-admin踩坑合集+完整包(项目源码 +依赖)

目录 Nodejs版本&#xff1a; 安装依赖时遇到的报错&#xff1a; 启动报错&#xff1a; vue-element-admin完整包地址&#xff1a; 在部署安装使用vue-element-admin开源项目的时候&#xff0c;会遇到各种各样的问题。 这里是本人遇到的一些坑。。。。。。 Nodejs版本&am…

【技术碎片】【Java】计算椭圆的外接矩形坐标

目录 前言原生实现&#xff08;错误方法&#xff09;精确实现&#xff08;数学解&#xff09;参考 前言 遇到一个需要计算一般椭圆&#xff08;斜椭圆&#xff09;的外接矩形坐标的问题&#xff0c;在此记录一下 已知椭圆的中心点坐标centerX centerY&#xff0c;椭圆的长轴&…