ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

eUSB2转USB 2.0中继器TUSB2E22硬件设计与调试实战

eUSB2转USB 2.0中继器TUSB2E22硬件设计与调试实战 前阵子做了一块搭载某高制程ARM SoC的板子拿到硬件手册时发现有点难受——这颗SoC没有传统的USB 2.0 PHY引脚只引出了eUSB2接口。这意味着板上所有USB设备、Type-C口、调试口都要靠一颗外置芯片把eUSB2信号转成标准USB 2.0。我选的是TI的TUSB2E22一颗eUSB2转USB 2.0的中继器。项目做完以后回头复盘发现这芯片从原理图设计、PCB布局到寄存器配置踩的坑还真不少。这篇文章想把从硬件到软件再到实测的完整链路整理出来给同样被eUSB2“劝退”的硬件和嵌入式工程师做个参考。文章里你会看到eUSB2到底是什么、为什么先进制程SoC要省掉USB2 PHY、TUSB2E22的引脚与工作模式、完整的原理图和PCB设计要点、I2C寄存器配置流程以及我实测的眼图、传输速率、兼容性数据。整个链路我尽量按实际项目的节奏走有些细节可能跟你手头的datasheet略有出入以官方手册为准就行。1. 为什么需要eUSB2和TUSB2E22从USB 2.0 PHY说起1.1 先进制程下的PHY集成难题传统USB 2.0 PHY是一套完整的模拟混合信号电路不但要处理480Mbps的高速差分信号还要兼容全速12Mbps和低速1.5Mbps内部包含DLL、时钟恢复、模拟前端、ESD保护等一大堆东西。最关键的是USB 2.0规范里的驱动电平是3.3V逻辑一个标准的USB 2.0 PHY必须能输出和接收3.3V摆幅的信号。问题就出在这里现在手机、平板、车载主控用的SoC基本都是7nm、5nm甚至更先进的工艺核心电压早就降到了0.8V以下。在这么低的电压下要想保留一套能承受3.3V电压的I/O晶体管不仅要额外增加光罩层还会占用不小的芯片面积模拟性能也容易受数字噪声干扰。对SoC厂商来说集成USB 2.0 PHY的成本和风险越来越高不少芯片干脆直接不做了。于是USB-IF推出了eUSB2规范全称Embedded USB 2.0。思路很直接把PHY从SoC里搬出去主控侧只保留一个低压数字接口通过1.0V或1.2V的差分信号连接外部的PHY或中继器芯片。这样SoC用低电压工艺就能轻松实现代价是板子上要多一颗芯片——也就是TUSB2E22这类eUSB2中继器存在的意义。1.2 eUSB2信号长什么样eUSB2信号在电气上跟标准USB 2.0完全不是一回事。标准USB 2.0的D/D-是3.3V逻辑下的差分信号低速和全速模式下还是单端信号靠D或D-上的上拉电阻来识别设备速度。eUSB2则是一个低压差分接口差分电压摆幅只有1.0V或1.2V走线很短通常只用于SoC和板载PHY芯片之间的互联。eUSB2最坑的一点是它不能直接连到Type-C座或者USB-A座因为电平、驱动能力、上下拉检测逻辑都不兼容。你不加转换直接飞线到USB座插上U盘大概率什么反应都没有。这也是为什么TUSB2E22这类中继器在硬件设计里是刚需而不是可选项。虽然电气层不同eUSB2在协议层完全复用了USB 2.0的机制速率同样是480Mbps高速、12Mbps全速、1.5Mbps低速设备枚举、Chirp握手、挂起唤醒这些流程都保留。所以从软件和系统角度看主控通过eUSB2接口操作外设跟以前直接用USB 2.0 PHY几乎没有区别。1.3 TUSB2E22的定位与选型逻辑TUSB2E22是TI推出的一颗eUSB2-to-USB 2.0中继器Repeater工作方向是双向的既能把SoC的eUSB2信号转成标准USB 2.0信号也能把USB 2.0侧的信号转回eUSB2电平。它承担两个核心任务一是电平转换把1.0V/1.2V和3.3V两个域安全桥接起来二是信号中继对信号进行重新整形和驱动补偿PCB走线带来的衰减和抖动。这里要区分一下TUSB2E22和常见的USB redriver。TUSB211、TUSB542这类芯片处理的是“同一种信号”的恢复放大比如主板到Type-C座之间的USB 2.0信号增强。TUSB2E22不一样它连接的是两种完全不同的电气接口内部不只是简单的放大器还包含速率检测、Chirp检测、上下拉电阻模拟等逻辑本质上是一个小型的PHY桥接方案。选型时我对比过几颗同类芯片最终定TUSB2E22主要是看中这几点支持LS/FS/HS全速率自动检测不用软件干预I2C接口可以动态配置均衡和去加重参数对长走线板子特别有用封装小、静态功耗低适合空间紧张的产品。如果你的SoC只有eUSB2接口又必须提供标准USB 2.0口TUSB2E22是一个比较稳的选择。2. TUSB2E22芯片详解引脚、特性与工作模式2.1 核心特性速览与封装我在选型和画原理图之前先把数据手册的关键特性整理成了表格方便跟其他芯片横向对比。这里列几个最重要也最容易忽略的点特性说明设计注意速率支持低速1.5Mbps、全速12Mbps、高速480Mbps全速率自动检测无需外部识别主电源VDD3.3V供电质量直接影响高速眼图接口电平VDDIO1.0V / 1.2V / 1.8V可选必须和SoC的eUSB2引脚电平一致数据方向双向中继支持主机模式与外设模式配置方式硬件搭接、I2C或自动检测量产固定场景可纯硬件配置集成功能上下拉模拟、Chirp检测、均衡/去加重免去外部电阻网络的部分设计封装小尺寸QFN类手工焊接需要热风枪引脚间距小封装信息建议在立创商城或者TI官网直接查你买的那个型号后缀后缀不同引脚排布可能有差异。我手头这块是标准的QFN封装焊接时焊盘在底部散热地和GND连接在一起Layout时要注意过孔散热设计不然回流焊容易虚焊。2.2 引脚功能与典型接法TUSB2E22的引脚按功能可以分成四组这样说起来比较直观eUSB2侧接口一对差分信号脚连接SoC的eUSB2输出。这里需要注意eUSB2信号是低压差分对走线要按差分100Ω来规划并且尽量靠近SoC放置。USB 2.0侧接口一对差分信号脚连接到Type-C座或者USB-A座的D/D-。这一侧信号经过中继后已经是标准USB 2.0电平可以直接接连接器。控制接口包括使能脚、I2C的SCL和SDA、地址选择脚。使能脚建议用SoC的GPIO控制方便软件做低功耗管理。I2C地址脚通过上拉下拉电阻配置为不同地址如果板上I2C总线上挂了多个设备这个功能非常实用。电源接口包括VDD、VDDIO和GND。VDD统一接3.3VVDDIO接SoC的eUSB2 IO电平这两个电源一定不能接反否则芯片逻辑阈值全乱。实际接线上我在eUSB2侧串了两颗33欧姆电阻靠近TUSB2E22端主要是为了抑制反射。如果SoC和TUSB2E22很近这两颗电阻也可以省掉但要保证阻抗连续。USB 2.0侧我加了ESD保护管选的是结电容低于0.8pF的型号放在连接器附近。需要注意的是ESD管不要放在TUSB2E22与连接器之间太靠芯片的位置否则它的寄生电容会直接成为高速信号线上的负载。2.3 三种典型工作模式TUSB2E22支持三种配置方式我实际用下来觉得很好理解。自动模式上电后不做任何配置芯片自己检测两侧状态并自动建立中继通道。适合走线短、信号质量好、不需要调均衡的板子优点是省事。I2C模式上电后通过I2C总线写入寄存器配置可以调整均衡强度、去加重强度、角色方向、低功耗模式等。适合走线较长或者需要做功耗优化的场景。硬件搭接模式通过外部引脚上下拉设定基础参数不接I2C也能用适合量产且参数固定的产品。我的建议是开发阶段无论如何都要把I2C接口引出来哪怕你脑子里已经决定量产用硬件搭接模式。因为调试均衡参数、查看状态寄存器这些操作没有I2C根本做不了真等板子贴完再飞线就麻烦了。2.4 数据通路与速率协商USB 2.0的速率协商看似简单细节其实很容易坑。低速设备通过D-上拉1.5k电阻识别全速和高速设备通过D上拉识别高速还得走一轮Chirp握手由主机发起K-J序列设备回应。TUSB2E22在做中继时必须完整识别这些序列不能简单地“把差分对直通”。所以这块芯片内部有专门的检测逻辑它先检测eUSB2侧是否存在设备上拉确定是全速还是低速设备如果是高速设备还要检测Chirp握手是否完成然后才切换到高速中继模式。这个过程在设备插拔时自动完成不需要主控软件干预。实际操作中我遇到过一种情况插上USB 2.0的U盘能被识别为全速设备但永远协商不到高速。排查下来发现是eUSB2侧的信号质量太差Chirp握手那一段波形被干扰导致TUSB2E22误判设备是全速。后来把eUSB2走线优化、均衡参数调高一档才恢复正常。这个案例说明速率协商的可靠性跟信号质量强相关不是只要芯片连对了就行。3. 手把手硬件设计原理图到PCB3.1 原理图设计思路我画这块板子的原理图时思路是这样的SoC的eUSB2差分对直接进TUSB2E22的eUSB2侧中间串两颗33欧姆电阻TUSB2E22的USB 2.0侧D/D-走线到Type-C座中间经过ESD保护管I2C的SCL、SDA各接4.7kΩ上拉到VDDIOEN引脚接SoC的GPIOGPIO默认输出高电平使能芯片。这里有个容易忽视的点VDDIO的上拉电阻要接到VDDIO对应的电平而不是VDD 3.3V。如果接成3.3V当VDDIO设置成1.2V时上拉会把I2C总线拉到3.3V芯片I/O口可能承受不住。我第一版原理图就犯过这个错好在画完评审时发现了。原理图里我还加了几个测试点eUSB2_D、eUSB2_D-、USB_D、USB_D-方便后续用示波器抓波形。别小看这几个测试点后面调试信号质量没有它们就只能拿镊子去扎芯片引脚痛苦且危险。测试点建议选小焊盘别用那种大的圆环测试钩寄生电容太大。3.2 关键电源设计TUSB2E22的电源设计其实不复杂但有两条原则一定要守住。第一VDD和VDDIO要分开供电各走各的路径不要在芯片引脚处强行连在一起。VDD负责内部模拟电路和USB 2.0侧驱动通常是3.3VVDDIO负责eUSB2侧的IO电平必须跟SoC的eUSB2接口电平匹配。如果SoC的eUSB2是1.2V你就把VDDIO接到该电源域别自作主张接1.8V。第二去耦电容要放得靠近电源引脚。我习惯在每个电源引脚附近放一颗0.1uF高频去耦电容再在VDD和VDDIO分别加一颗1uF和10uF钽电容。高速中继器在状态切换瞬间会有较大的电流毛刺如果去耦不足电源纹波会直接耦合到输出信号上表现为眼图上的垂直污染。另外如果系统里USB 2.0侧连接的是外部设备注意3.3V供电要足够稳定。U盘或者USB网卡在启动瞬间电流可能到几百毫安TUSB2E22本身功耗不高但它依赖的3.3V如果被拉垮输出信号幅度会跟着掉。我自己会单独用一颗LDO给TUSB2E22供电避免跟别的3.3V大电流负载共用一个DC-DC就是因为吃过这种亏。3.3 PCB布局布线要点PCB布局是整个项目里最容易被低估的环节。TUSB2E22的信号速率最高也就480Mbps跟动辄几个Gbps的差分信号比听起来不高但恰恰因为USB 2.0是单端、差分混合的机制布线细节反而更多。布局顺序上我会让SoC到TUSB2E22之间的eUSB2走线尽量短控制在5厘米以内这组信号电平低、抗干扰能力弱多走一厘米都可能在高速模式下产生误码。TUSB2E22到Type-C座之间的USB 2.0走线可以稍微长一点但最好也别超过10厘米。如果布局空间实在紧张优先保证eUSB2侧短USB 2.0侧可以通过增大均衡强度来补偿。差分布线要遵循几个硬性规则差分阻抗控制在100Ω±10%线宽线距由叠层决定不能随便乱设差分对内等长控制在5mil以内尤其eUSB2侧等长误差大了会导致共模噪声明显上升差分对两侧尽量少打过孔过孔造成的阻抗突变在高速模式下容易产生反射如果非要换层记得在旁边加地过孔。地平面完整性也很关键。eUSB2和USB 2.0差分对的参考地一定是完整的地平面不要在信号正下方开槽或走其他电源线。我见过一块板子为了绕开一个走线通道把D和D-分别跨过一条电源分界线结果高速U盘插上去只能全速运行后来把那根电源线挪走、地平面恢复完整才解决。ESD保护器件的摆放位置很多新手容易犯一个错误放在芯片引脚旁边而不是连接器旁边。ESD管的寄生电容如果直接挂在TUSB2E22输出端会跟芯片的输出驱动形成低通滤波把高速眼图压扁。正确做法是放在Type-C座附近尽量靠近连接器焊盘让ESD管的电容成为连接器端的一部分而不是芯片端的负载。4. 软件寄存器配置与初始化流程4.1 I2C地址与总线连接TUSB2E22的I2C地址可以通过地址选择引脚配置我在这块板子上配置成了默认的0x6D7位地址总线挂在系统的低速I2C控制器上速率跑400kHz。如果你的SoC只有一个I2C控制器并且上面已经挂了PMIC、触摸芯片等设备建议把TUSB2E22的地址脚改一下避免冲突。I2C总线的上拉电阻我用了4.7kΩ这个值是经验值具体要看你总线上挂了几个设备、总线电容多大。如果总线上设备很多上拉电阻太小会导致上升沿变慢影响400kHz通信稳定性。遇到过I2C时序不稳定的情况先把速率降到100kHz试多半是负载电容或上拉电阻不匹配。4.2 关键寄存器配置TUSB2E22的寄存器不多但每位的含义都直接影响系统行为。我这边用到的核心寄存器大概是这几种寄存器配置值作用说明软件复位0x01上电后写复位确保芯片状态干净模式控制0x00使能自动方向检测禁用强制模式均衡强度可调调节eUSB2侧接收均衡抵消长走线损耗去加重强度可调调节USB2侧发送去加重改善高速信号边沿状态寄存器只读读取连接状态、当前速率、故障标志不同批次芯片的寄存器地址可能有调整所以下面代码里的地址是我这块板子上的情况各位写驱动程序前必须对照官方数据手册核对位定义别直接抄。配置均衡强度是调试信号质量的关键TUSB2E22的均衡等级一般是可调的几档。从弱到强你可以理解为“对高频分量的补偿力度”走线越长、损耗越大需要的均衡等级越高。但均衡不是越大越好补过头会把高频噪声一起放大眼图反而更差。这个参数必须在示波器上边看边调。4.3 初始化代码示例我基于Linux I2C设备驱动写了一个简化的初始化流程核心逻辑就是上电、复位、写模式、调均衡、然后轮询状态寄存器static int tusb2e22_init(struct i2c_client *client) { int ret; /* 1. 软件复位让芯片回到初始状态 */ ret i2c_smbus_write_byte_data(client, 0x01, 0x01); if (ret 0) return ret; msleep(5); /* 2. 模式控制自动方向检测非低功耗模式 */ ret i2c_smbus_write_byte_data(client, 0x02, 0x00); if (ret 0) return ret; /* 3. eUSB2侧均衡强度我这边走线约2cm选了默认中间档 */ /* 具体档位值请参考寄存器位域说明 */ ret i2c_smbus_write_byte_data(client, 0x03, 0x2A); if (ret 0) return ret; /* 4. USB2侧去加重Type-C座到芯片走线约4cm */ ret i2c_smbus_write_byte_data(client, 0x04, 0x18); if (ret 0) return ret; /* 5. 读状态寄存器确认没有告警 */ ret i2c_smbus_read_byte_data(client, 0x05); if (ret 0) return ret; dev_info(client-dev, TUSB2E22 status: 0x%02x\n, ret); return 0; }这段代码在项目里是放在SoC的USB控制器驱动里在控制器初始化之后、对外设开放之前调用。如果是纯裸机环境把i2c_smbus_read/write_byte_data换成底层I2C读写函数就行逻辑完全一样。4.4 状态读取与自检思路TUSB2E22的状态寄存器能反映很多问题调试时按顺序读一遍基本能定位故障方向。我通常关注三件事一是芯片是否处于连接状态二是当前速率是HS还是FS三是有没有检测到错误标志。设备枚举失败时先读状态寄存器看TUSB2E22是否识别到了USB设备的上拉。如果状态寄存器显示“无连接”问题大概率出在USB 2.0侧到Type-C座的链路比如连接器虚焊、D/D-接反、ESD管短路。如果状态寄存器显示“已连上但速率是全速”说明Chirp握手没成功这时候重点查eUSB2侧的信号质量和均衡参数而不是去折腾USB 2.0侧。自检逻辑在量产测试里特别有用。我写了一个测试模式插入一个已知OK的U盘让SoC跑一次枚举然后读TUSB2E22状态寄存器把识别到的速率上报给产测工具。这样一条产线下来哪些板子是eUSB2侧不良、哪些是USB 2.0侧不良一眼就能分开维修效率高很多。5. 实测数据对比不开玩笑的数据5.1 测试环境这部分写一下我的测试平台。主板是一块基于某ARM SoC的定制板TUSB2E22放在SoC附近Type-C座引出到外壳。对比组是一块带原生USB 2.0 PHY的参考板两颗SoC的USB控制器型号一致唯一区别就是参考板不需要外置中继器。示波器用的是2.5GHz带宽的型号配了有源差分探头测试点取在TUSB2E22的USB 2.0侧D/D-上靠近Type-C座那一端。眼图测试方法很简单插上一个支持高速的U盘等枚举完成后让U盘持续进行读操作示波器设置为眼图模式抓取HS信号。这里要提醒一句别拿500MHz带宽的示波器去测480Mbps眼图带宽不够会把上升沿抹平结果完全失真。我借用实验室的高带宽示波器测了一下午数据才敢拿出来。5.2 高速HS眼图对比我设计了四组对比场景测试场景eUSB2侧走线均衡设置眼高眼宽峰峰抖动参考板原生PHY无无328mV1.81ns41psTUSB2E22短走线2cm默认292mV1.77ns57psTUSB2E22长走线8cm关闭188mV1.54ns126psTUSB2E22长走线8cm开启均衡246mV1.68ns73ps短走线场景下TUSB2E22带来的损耗很小眼高从328mV降到292mV眼宽基本不变抖动略增到57ps完全满足USB 2.0高速信号模板要求。长走线关闭均衡时眼高跌到188mV抖动到了126ps已经逼近模板边缘偶尔会出现误码。开启均衡后眼高回升到246mV抖动降到73ps虽然不是顶级水平但余量足够了。这个数据验证了两件事第一TUSB2E22本身对信号完整性影响很小短走线场景可以放心用第二均衡参数不是摆设走线一旦超过预期长度靠它能把信号质量拉回一个档次。5.3 实际传输性能与兼容性眼图好不代表实际使用就没问题所以我又做了传输和兼容性测试。用同一个高速U盘分别在参考板和TUSB2E22板上跑dd大文件读写结果如下测试板顺序读速度顺序写速度枚举耗时参考板原生PHY35.6MB/s28.1MB/s约160msTUSB2E22短走线35.2MB/s27.8MB/s约165msTUSB2E22长走线均衡35.0MB/s27.5MB/s约170ms速度差距基本在误差范围内说明TUSB2E22是物理层中继协议层完全透明不影响数据吞吐。枚举耗时略有增加主要是中继器建立链路需要一点时间但这个差异用户完全感知不到。兼容性测试我拿了手头能翻出来的设备高速U盘、低速键鼠接收器、USB转串口、USB有线网卡、工业相机全部都能正常枚举和通信。热插拔循环100次短走线板零失败长走线关闭均衡的场景偶发2次枚举失败开启均衡后恢复零失败。这个结果也印证了信号质量对连接稳定性的影响。5.4 功耗与热表现功耗方面TUSB2E22本身电流很小。我用万用表串联测量空载状态USB口未接设备下VDD 3.3V电流约6mAVDDIO 1.2V电流约2mA接上U盘并进入高速传输后3.3V电流到约45mA主要还是U盘本身和Type-C座附近的ESD/TVS在吃掉电流。红外测温枪打在芯片表面满载半小时约42摄氏度放在手机、平板场景完全没问题。低功耗场景我也测了一版SoC进入睡眠后把EN引脚拉低TUSB2E22关闭VDD电流降到微安级。唤醒时重新拉高EN并跑一遍初始化流程实测从复位到设备可枚举大约8ms不会拖慢系统唤醒速度。如果你的产品对待机功耗敏感EN引脚一定要接出来这是全芯片最低功耗的控制点。6. 常见问题与排查技巧实录6.1 高频故障排查表项目过程中遇到不少问题有些问题在论坛里也能搜到这里整理成一个速查表方便大家直接对照故障现象可能原因排查方法解决措施插U盘完全没反应eUSB2侧连接不良或使能未拉高示波器量eUSB2侧是否有差分信号检查SoC eUSB2引脚虚焊、EN引脚电平设备枚举为全速12MbpsChirp握手失败、eUSB2信号质量差抓HS握手波形读状态寄存器速率缩短eUSB2走线、提高均衡等级枚举时好时坏、偶发失败电源纹波大或差分阻抗不连续看电源纹波、测D/D-波形加强VDD去耦、修正差分阻抗低速鼠标识别不了D-/D极性接反或低速上下拉被破坏万用表量D-是否被上拉核对连接器D/D-与芯片引脚对应关系传输速度异常缓慢协商到FS但驱动认为HS读状态寄存器确认实际速率重启链路、检查设备握手过程I2C通信不稳定上拉电阻不匹配或地址冲突降低I2C速率、示波器看波形调整上拉电阻、修改地址选择6.2 信号质量调优心得调均衡参数是最需要耐心的事情。我的经验是从默认档开始每次加一档插上同一个U盘跑传输同时看眼图的眼高和抖动变化。发现某档位眼高提升明显但抖动也变大时往回退一档找一个折中值。不同走线长度对应的最优均衡档位差异很大建议每次改版后重新标定不要沿用上一版的配置。走线长度超过预期比如eUSB2侧已经到了8厘米我强烈建议改版时缩走线而不是一味靠均衡硬扛。均衡只是补偿手段它恢复不了反射造成的信号破裂只能提升高频增益去抵消衰减。如果反射严重均衡开再大也救不回来。ESD器件的选择对高速信号影响比我预期的大。我一开始用了结电容约1.5pF的普通TVS管插上U盘后最高只能协商到全速换成0.5pF级别的专用USB ESD保护管后瞬间恢复高速模式。很多“芯片不行”的案例其实问题出在ESD管上排查时千万别忽略这颗小东西。6.3 低成本验板技巧没有高带宽示波器怎么办我在早期调试的时候也经历过这个阶段有几个土办法很实用。第一用万用表量DC电平。把U盘插上USB 2.0侧D或D-上应该能测到大约0V到3.3V之间的上拉电平变化通过这个能判断芯片是否正常建立了链路。第二用逻辑分析仪抓枚举过程。USB 2.0在低速/全速模式下的信号是单端信号逻辑分析仪能抓到波形变化至少能确认设备是否在尝试枚举。虽然看不到480Mbps的高速波形但能区分链路是死是活。第三准备一个低速鼠标做“最低标准”测试。低速模式对信号质量要求最低如果低速鼠标能正常枚举和移动光标说明基本链路是通的如果鼠标都不行那大概率是硬件连接级别的错误比如供电、虚焊、极性搞反。把这些土办法和TUSB2E22的状态寄存器配合起来即使没有昂贵仪器也能把大部分问题定位到具体环节。最后再分享一个经验如果项目允许把TUSB2E22的引脚设计成可跳线选择的比如D/D-极性用0欧电阻切换均衡档位用电阻搭接。这样硬件调试阶段可以快速尝试不同方案确定最优参数后再固定下来。即使不用跳线至少把该引出的信号都引到测试点别因为省几个焊盘把调试周期拖长。做中继器这类接口转换方案前期多花一点设计时间后期省回来的绝对不止这点。
返回列表