1. 项目概述与核心价值
在嵌入式硬件开发,尤其是涉及USB Type-C和Power Delivery(PD)协议栈的复杂系统中,控制器芯片的启动流程和外部通信接口设计往往是决定项目成败的关键。TPS65983B作为德州仪器(TI)推出的一款高度集成的USB Type-C和PD控制器,其内部固件的加载机制——即从外部SPI Flash读取应用程序代码——以及其灵活可配置的I2C从机接口,构成了其稳定运行和与主控系统高效交互的基石。很多工程师在初次接触这类芯片时,容易将注意力全部放在PD协议协商、电源路径开关等“上层”功能上,而忽略了底层启动和基础通信的可靠性设计,这常常导致产品在量产或复杂场景下出现启动失败、通信异常等难以排查的“玄学”问题。
本文将深入拆解TPS65983B的Flash读取流程、I2C接口工作机制及其在典型应用中的设计要点。我将结合多年的硬件开发经验,不仅解读数据手册中的流程图和描述,更会补充大量数据手册未明说、但在实际工程中至关重要的细节、参数计算依据和避坑指南。例如,Flash读取失败后芯片会进入何种状态?I2C地址如何通过硬件电阻精准设定?在多控制器系统中如何共享一颗Flash?这些问题的答案直接关系到你的设计能否一次成功。无论你是在设计一个高性能的USB PD充电器,还是一个支持双Type-C口和DisplayPort输出的笔记本扩展坞,理解这些底层机制都将帮助你构建更健壮、更可靠的系统。
2. Flash存储器读取机制深度解析
TPS65983B的固件并非固化在芯片内部的ROM中,而是存储在外部的SPI Flash存储器里。这种设计带来了极大的灵活性,允许通过更新Flash中的固件来修复bug、增加新功能或适配不同的终端产品,而无需修改芯片硬件。然而,这也对启动过程的可靠性提出了更高要求。芯片上电后,内置的Bootloader(引导代码)会执行一套严谨的读取流程,确保加载到内存中的应用程序代码是完整且正确的。
2.1 双区域读取与容错流程
根据数据手册描述,TPS65983B的Flash读取流程并非简单的线性操作,而是一个具备容错能力的双区域校验机制。其核心思想是:在Flash中划分两个独立的区域(低区和高区),存储两份相同的或不同版本的固件镜像。Bootloader会优先尝试从低区域加载,如果失败,则自动切换到高区域,这极大地提高了系统应对Flash局部损坏或数据错误的鲁棒性。
2.1.1 流程步骤拆解与实操意图
让我们将图9-58的流程图转化为更易理解的实操步骤,并解释每一步的意图:
- 进入Flash读取流程:芯片上电或复位后,硬件逻辑启动,初始化内部SPI控制器,准备与外部Flash通信。
- 读取低区头信息:Bootloader首先定位到Flash存储器的低区域起始地址,读取该区域的头信息(Header)。这个头信息至关重要,它包含了两个关键指针:
- 区域指针(Region Pointer):指示该区域的有效性标志或版本信息。
- 应用程序代码偏移量(Application Code Offset):指明紧接头信息的应用程序代码在Flash中的具体起始位置。这允许固件开发者将配置数据和程序代码分开存放,提供了存储布局的灵活性。
- 读取配置区:根据头信息,读取紧随其后的**配置区(Config Area)**数据。这里可能存放着芯片运行所需的初始参数,如I2C地址配置、GPIO默认状态、电源管理策略等。Bootloader会对这些配置数据进行有效性校验(如校验和)。
- 读取应用程序代码并校验CRC:这是最核心的一步。Bootloader从指定的偏移量开始,读取主要的应用程序代码,并计算其循环冗余校验(CRC)值。然后,它会与存储在Flash中(通常也在头信息或代码末尾)的预期CRC值进行比对。
- 决策与执行:
- 如果配置和代码均有效:Bootloader会复位其内部核心(Core),然后将控制权移交给刚刚加载到内存中的应用程序代码,系统正常启动。
- 如果配置无效或代码CRC校验失败:Bootloader判定低区域读取失败。它不会立即宣告启动失败,而是转向高区域,重复步骤2至4,尝试从高区域加载固件。
- 如果高区域也读取失败:Bootloader判定两个区域的数据均无效,系统无法通过Flash正常启动。此时,芯片将进入**“存储器无效(Memory Invalid)”流程**。
注意:这里的“无效”判断是Bootloader根据预设的校验规则(如特定的魔术字、CRC校验和)做出的。因此,在烧录Flash时,必须确保烧录工具正确生成了这些元数据(Header和CRC),而不仅仅是写入二进制代码。许多初次开发者遇到的“芯片不启动”问题,根源就在于烧录的文件格式不正确。
2.1.2 “存储器无效”流程与后门
当Flash双区域读取均告失败时,TPS65983B并不会“变砖”。它会执行图9-59所示的“存储器无效”流程,这实际上是一个精心设计的安全恢复和后门调试机制。
- 启用基础电源:芯片首先使能
VOUT_3V3引脚,为外部电路提供基础的3.3V电源。 - 释放复位:释放内部复位信号,使芯片部分功能进入可操作状态。
- 检测VBUS和CC状态:芯片会检查USB Type-C接口的VBUS电压和CC(Configuration Channel)引脚状态,判断是否连接了电源或设备。
- 呈现SWD接口:最关键的一步,芯片将其单线调试器(SWD)接口映射到USB Type-C连接器的SBU1和SBU2引脚上。SBU(SideBand Use)引脚在Type-C规范中用于备用模式,此时被复用为调试接口。
- 进入监控状态:芯片持续监控VBUS状态和CC引脚是否连接为Rd(下拉电阻,表示连接了UFP设备,如待调试的主机)。一旦检测到有效的VBUS和Rd/Rd连接(表示有调试器通过Type-C线缆连接),即可通过SWD接口进行固件的强制烧录或深度调试。
这个设计非常巧妙。它意味着即使产品固件完全损坏,工程师仍然可以通过一根标准的Type-C to SWD调试线缆(或经过转接)连接到芯片的SBU引脚,重新烧写Flash,而无需拆焊芯片或使用额外的测试点。在实际项目中,务必在PCB布局时保证SBU引脚到连接器的走线畅通,并考虑在无法启动时通过此方式进行救援。
2.2 UART下载与主从共享Flash机制
在更复杂的系统中,可能会存在多个TPS65983B协同工作,例如一个主控芯片(Primary)和一个或多个从属芯片(Secondary)。为了节省成本和PCB空间,可以采用主从共享一颗外部Flash的方案。
2.2.1 工作流程解析
如图9-61所示,只有Primary TPS65983B直接连接SPI Flash。Secondary TPS65983B的固件,需要通过UART接口从Primary芯片获取。其流程(图9-60)是一个典型的请求-响应协议:
- Secondary启动失败:Secondary芯片上电后,尝试读取自身的Flash(未连接),自然失败,进入等待状态。
- 发送数据请求:Secondary通过UART(
SPI_POCI引脚复用为UART TX)向Primary发送“Request Data”数据包。 - Primary响应:Primary收到请求后,从自己连接的Flash中读取相应的固件数据块,通过UART(
SPI_PICO引脚复用为UART RX)发送“Send Data”数据包给Secondary。 - Secondary接收与校验:Secondary接收数据并保存,然后接收Primary发送的“Send CRC”包进行校验。
- 循环直至完成:此过程循环进行,直到整个固件镜像传输完毕。Secondary校验通过后,即可运行应用程序代码。
2.2.2 硬件配置关键点
- 主从身份标识:Primary TPS65983B必须将其
I2C_ADDR引脚通过一个0Ω电阻直接连接到GND。这是硬件上区分主从的关键。Secondary的I2C_ADDR则按需配置为其他地址。 - UART连接:Primary的
SPI_PICO(主出从入)连接Secondary的SPI_POCI(主入从出),反之亦然,构成交叉的UART收发对。注意,此时这两个引脚不再用于SPI通信,而是被固件复用于UART功能。 - 固件支持:数据手册明确指出,当前固件仅支持1 Primary + 1 Secondary的双设备系统。在设计多端口设备时,需确认最新的芯片版本和固件是否支持更多从设备。
3. I2C从机接口设计与地址配置实战
I2C接口是TPS65983B与外部主控制器(如MCU、应用处理器)进行状态监控和实时控制的主要通道。理解其特性对于实现可靠的系统交互至关重要。
3.1 I2C接口架构与工作模式
TPS65983B提供了三个I2C接口端口:
- Port 1 & Port 2:完全功能的I2C端口,包含
SDA、SCL和IRQZ(中断请求,低有效)引脚。它们既可配置为从机(默认),也可配置为主机。这两个端口在功能上是完全对等的,可以同时被两个不同的主机访问,用于不同的管理目的(例如,一个端口用于电源策略管理,另一个用于固件升级)。 - Port 3 (DEBUG_CTL):这是一个由固件模拟的仅主机(Master)接口,使用
DEBUG_CTL1(SCL)和DEBUG_CTL2(SDA)两个通用GPIO实现。它没有专用的I2C硬件,因此不支持检测起始位、停止位、应答等协议细节,速度较慢,通常用于控制一些简单的从设备,如配置其他芯片的模式或方向选择器。
Port 1和2支持标准模式(100 kHz)和快速模式(400 kHz)。它们具备时钟拉伸(Clock Stretching)功能。这意味着当TPS65983B作为从机,在接收或发送完一个字节后,如果内部尚未准备好处理下一个字节(例如,正在访问内部寄存器),它可以将SCL线拉低,强制主机等待。主机必须检测到SCL被释放(变高)后,才能继续后续传输。这个特性对于保证从机处理数据的可靠性非常有用,但要求主机端的I2C驱动程序必须支持时钟拉伸,否则会导致通信超时。
3.2 I2C从机地址的硬件配置艺术
TPS65983B的7位I2C从机地址并非完全固定,而是可以通过硬件引脚灵活配置,这在一个系统中使用多个TPS65983B时(例如多口充电站或扩展坞)极其重要,避免了地址冲突。
其7位地址由两部分组合而成(见表9-9):
- 高两位(Bit 6, Bit 5):由
DEBUG_CTL2和DEBUG_CTL1这两个GPIO引脚在上电时的数字电平(高/低)决定。这提供了4种组合(00, 01, 10, 11)。 - 中间三位(Bit 4, Bit 3, Bit 2):由
I2C_ADDR引脚的模拟电压(通过外部电阻分压产生)经内部ADC解码后决定。这提供了最多8种组合。
3.2.1 电阻分压计算与选型
I2C_ADDR引脚内部有一个5μA的恒流源流出(见图9-68)。在该引脚与地之间连接一个精密电阻R_I2C,就会产生一个电压V = 5μA * R_I2C。芯片内部的ADC测量这个电压,并将其解码为3位地址码。
表9-10给出了具体的电阻值与地址码的对应关系。例如:
- Master (Primary):
R_I2C = 0Ω,地址位[3:1] = 0x00。 - Slave 1:
R_I2C = Open(开路),地址位[3:1] = 0x0F。 - Slave 4:
R_I2C = 205kΩ,地址位[3:1] = 0x04。
实操要点与计算:
- 电阻精度:数据手册要求使用1%精度的电阻。这是因为ADC解码需要一定的电压容限来区分不同的地址码。使用精度更差的电阻可能导致地址识别错误。
- 电阻值计算:以Slave 7为例,需要38.3kΩ电阻。根据
V = I * R,V = 5μA * 38.3kΩ = 0.1915V。芯片内部ADC的参考电压和比较阈值是固定的,因此必须使用推荐的标称电阻值,不能随意更改。如果你需要自定义地址,必须查阅更详细的芯片勘误表或应用笔记,确认是否支持以及对应的电阻值。 - 上拉电阻:
I2C_SDA和I2C_SCL线上必须连接上拉电阻到LDO_3V3或系统3.3V。阻值通常为2.2kΩ至10kΩ,具体取决于总线电容和通信速度。总线负载重(设备多、走线长)时,应使用较小阻值的上拉电阻以保证上升沿速度。
3.3 I2C读写协议详解
TPS65983B的I2C读写遵循标准的SMBus/I2C块读写协议,支持读写多个连续寄存器,这比单字节读写效率高得多。
写寄存器协议(图9-65):
- 主机发送Start条件。
- 发送7位从机地址 + 写位(0)。
- 从机应答ACK。
- 主机发送8位寄存器号(即要写入的起始寄存器地址)。
- 从机应答ACK。
- 主机发送8位字节计数N(本次要写入的数据字节数)。
- 从机应答ACK。
- 主机连续发送N个字节的数据,每个字节后从机应答ACK。
- 主机发送Stop条件。
读寄存器协议(图9-66):
- 主机发送Start条件。
- 发送7位从机地址 + 写位(0)—— 这是一个“写指针”操作。
- 从机应答ACK。
- 主机发送8位寄存器号(要读取的起始寄存器地址)。
- 从机应答ACK。
- 主机发送Repeated Start条件(Sr)。
- 发送7位从机地址 + 读位(1)。
- 从机应答ACK。
- 从机先发送一个8位的字节计数N(本次要返回的数据字节数)。
- 主机应答ACK。
- 从机连续发送N个字节的数据,主机在前N-1个字节后应答ACK,在最后一个字节后发送NACK。
- 主机发送Stop条件。
注意:许多MCU的硬件I2C外设或标准库函数可能不直接支持这种“先写地址再读”且包含字节计数的块读协议。你可能需要采用更底层的“组合格式(Combined Format)”传输,或使用GPIO模拟I2C时序来实现。在驱动开发初期,务必用逻辑分析仪抓取总线波形,确认协议交互正确。
4. 典型应用设计:从原理图到布局的完整考量
理解了内核机制后,我们将其应用到两个典型场景:全功能充电器和双端口笔记本应用。数据手册提供了框图,但真正的挑战在于将框图转化为可靠、可量产的具体电路。
4.1 全功能USB Type-C PD充电器设计
图10-1展示了一个支持5V/3A、12V/3A、20V/5A输出的充电器。TPS65983B在这里扮演了协议协商和电源路径管理的核心角色。
4.1.1 外部MOSFET路径(PP_EXT)设计精要
对于20V/5A这个大功率路径,芯片内部开关管无法满足要求,必须使用外部MOSFET。设计的关键在于选择合适的外部MOSFET和电流采样电阻。
MOSFET选型:
- 电压额定值:必须高于最大输入电压。PD协议最大为20V,但需考虑浪涌和裕量。选择30V或更高额定电压的MOSFET是稳妥的。
- 电流额定值:需满足连续5A输出,并考虑峰值电流。选择10A以上连续漏极电流的型号。
- 导通电阻RDS(on):这是效率的关键。推荐使用<10 mΩ的MOSFET。如表10-2所示,TI推荐使用5mΩ的型号以减小损耗。
- 布局:必须使用两个背对背(back-to-back)的N沟道MOSFET,以实现双向电流阻断,防止非标设备反向灌电损坏后端电路。
电流采样电阻RSENSE选型:
- 阻值:芯片支持10mΩ或5mΩ。为了最小化功率损耗和压降,5mΩ是首选。
- 功率与精度:在5A电流下,功耗为
P = I² * R = 25 * 0.005 = 0.125W。应选择额定功率至少为0.25W(两倍余量)的1%精度的金属膜或合金采样电阻。 - 布局:该电阻必须采用开尔文连接(四线制测流),将其两端的电压检测线(SENSEP, SENSEN)直接、平行地引回芯片的对应引脚,远离大电流路径,以避免噪声干扰。
损耗计算示例: 假设我们选用两个RDS(on)为5mΩ的MOSFET和一个5mΩ的采样电阻。 总阻抗
R_total = Rsense + Rds1 + Rds2 = 5 + 5 + 5 = 15 mΩ。 在5A输出时,总压降V_drop = 5A * 15mΩ = 75mV。 总功率损耗P_loss = 5A * 75mV = 0.375W。 这部分损耗会转化为热量,需要在PCB上为MOSFET和采样电阻预留足够的铜箔面积或考虑散热措施。
4.1.2 关键外围电路设计清单
- Flash存储器:推荐使用W25Q80(1MB容量)。其电源必须来自芯片的
LDO_3V3输出,上拉电阻亦然。确保LDO_3V3的滤波电容(推荐10μF)足够,以保证Flash供电稳定。 - 振荡器电阻R_OSC:这是一个15kΩ,精度要求为0.1%的电阻。它用于校准内部振荡器,直接影响PD协议BMC(Biphase Mark Coding)通信的时序精度和USB2.0端点的时钟。绝对不能使用1%精度的普通电阻替代,否则可能导致通信不稳定或失败。
- VBUS电容与磁珠:在靠近芯片VBUS引脚处放置一个1μF陶瓷电容进行高频去耦。在VBUS路径上串联一个额定电流6A以上的磁珠,用于抑制高频噪声。同时,在Type-C连接器的VBUS引脚附近放置4个10nF的高频电容到地,构成π型滤波,有效抑制从电缆传入的噪声。
- 端口电源路径电容:
PP_EXT(20V路径):至少需要一个10μF,额定电压25V(推荐30V)的X7R/X5R陶瓷电容。PP_HV(12V路径):一个10μF + 一个0.1μF高频电容并联。PP_5V0和PP_CABLE:这两个路径在内部相连,共用一组电容,推荐一个22μF + 一个0.1μF高频电容。- 重要提示:这些电容是芯片近端的缓冲电容。你的DC-DC转换器输出端必须有更大的 bulk电容(通常是电解电容或固态电容)来应对负载阶跃。芯片和DC-DC之间的走线电感要尽量小。
- CC引脚电容:每个CC引脚(CC1, CC2)都需要一个220pF的电容接地,用于滤波,提高CC通信的抗干扰能力。
4.2 双端口笔记本应用与系统集成
图10-3的应用更为复杂,涉及双端口供电、显示输出切换以及与系统主控的交互。
4.2.1 电源角色与PDO配置
在此设计中,笔记本的每个Type-C端口都需要支持DRP(双角色端口),既能作为电源(Source)给外设供电,也能作为受电端(Sink)从充电器取电。
源(Source)PDO配置(表10-4):
- PDO1(固定5V/3A):始终提供,用于连接U盘、手机等基础设备。
- PDO2(电池供电,10-13V/30W):当笔记本使用电池时,可以以此电压对外供电,功率受电池容量和系统策略限制。
- PDO3(固定20V/3A):仅在检测到DC圆口电源适配器插入时生效。此时,系统由外部电源供电,可以以更高功率对外输出。
受电(Sink)RDO配置(表10-5):
- 通常只协商一个固定档位:20V/3A(最大60W输入),用于给笔记本自身充电。同样,这个配置可能仅在电池供电模式下生效,当插入DC圆口电源时,Type-C端口的受电能力会被系统主控通过I2C禁用。
4.2.2 与系统控制器的I2C交互
这是笔记本设计的核心。系统主控(如EC或PCH)通过I2C与两个TPS65983B通信。
- 动态电源管理:系统主控需要实时监控电池电量、温度、系统负载。当电池电量低时,它可以通过I2C命令,让TPS65983B重新协商PD合约,降低甚至关闭对外的供电能力(PDO2),以优先保障系统运行。
- 固件更新(OTA):操作系统可以通过系统主控,将新的TPS65983B固件镜像发送给主控,再由主控通过I2C写入到TPS65983B的Flash中。这实现了产品出厂后的功能升级和问题修复。
- 显示端口配置:系统主控可以决定哪个Type-C端口输出DisplayPort信号。它通过I2C配置TPS65983B的GPIO,进而控制外部的超高速多路复用器(如HD3SS460),将CPU提供的DisplayPort信号路由到指定的Type-C端口。
4.2.3 DisplayPort切换与HD3SS460控制
TPS65983B本身不切换高速DisplayPort信号,它通过GPIO控制外部的MUX芯片(如HD3SS460)来完成。
- 连接:TPS65983B的
SBU1/2引脚直接连接到HD3SS460的AUX_N/P引脚,用于传输DisplayPort的AUX通道信号。高速的DisplayPort主链路信号则从GPU直接连接到HD3SS460的输入,由HD3SS460切换到对应的Type-C端口。 - 控制逻辑(表10-7):
GPIO_0->AMSEL:选择当前模式是USB3.1还是DisplayPort。GPIO_3->EN:使能多路复用器。DEBUG_CTL2->POL:指示Type-C电缆的方向(正插/反插),以确保信号映射正确。
- 引脚分配:需要根据连接的设备(DP-only设备或DP+USB3设备)和Type-C插头的方向,选择正确的Pin Assignment(C, D, E)。这需要TPS65983B的固件和系统驱动协同工作。
4.2.4 DC圆口检测电路设计
图10-4的简单分压检测和图10-5的比较器检测是两种常见方案。
- 电压分压方案:成本低,但抗干扰能力弱。当DC圆口电压波动或存在噪声时,可能会造成GPIO误检测。需要在GPIO引脚增加一个小电容(如100pF)进行滤波。
- 比较器方案:成本稍高,但非常可靠。比较器输出干净的数字电平,抗噪声能力强,是工业设计的首选。比较器的参考电压(1.8V)可以来自系统的稳定基准源。
- 系统逻辑:检测信号送入TPS65983B的某个GPI引脚,同时也送给系统主控。一旦检测到DC圆口插入,系统主控应通过I2C命令,使能TPS65983B的20V PDO,并可能禁用Type-C端口的受电功能,实现充电源的智能切换。
5. 开发、调试与生产中的常见问题与对策
在实际项目中,从原理图设计到批量生产,会遇到各种各样的问题。以下是我总结的一些典型问题及其排查思路。
5.1 芯片无法启动,VBUS无输出
- 问题现象:板上电后,连接Type-C设备无反应,测量VBUS无电压。
- 排查步骤:
- 检查基础供电:首先测量
VIN_3V3和VDDIO引脚是否有稳定的3.3V电压?LDO_1V8A、LDO_1V8D、LDO_BMC等引脚是否有1.8V输出?这是芯片工作的前提。 - 检查Flash及配置:
- 确认SPI Flash(如W25Q80)的
VCC是否连接到LDO_3V3,且电压正常。 - 用编程器读取Flash内容,确认固件是否成功烧录,特别是头信息和CRC区域是否正确。
- 检查
I2C_ADDR引脚的上拉/下拉电阻是否正确。如果设计为Primary,该引脚必须通过0Ω电阻接地。
- 确认SPI Flash(如W25Q80)的
- 检查CC引脚电路:测量CC1和CC2引脚对地是否有220pF电容?走线是否过细过长,引入了过多寄生电容?这会影响PD通信的建立。
- 检查振荡器电阻:确认
R_OSC是否为15kΩ,0.1%精度的电阻?这是最常见也最容易被忽略的导致通信失败的原因之一。 - 进入SWD调试模式:如果以上都正常,尝试通过SBU引脚连接SWD调试器。如果连不上,可能是芯片彻底未工作或电源问题;如果能连上,则说明Bootloader已运行但Flash读取失败,可以尝试通过SWD重新烧录Flash。
- 检查基础供电:首先测量
5.2 I2C通信失败或时好时坏
- 问题现象:主控无法读写TPS65983B的寄存器,或偶尔能读到错误数据。
- 排查步骤:
- 波形抓取:使用逻辑分析仪或示波器抓取
I2C_SCL和I2C_SDA波形。检查:- 起始、停止条件是否正常?
- 从机地址是否正确(包含R/W位)?
- 从机是否在每个字节后给出了ACK?
- 是否存在明显的毛刺或振铃?
- 检查上拉电阻:上拉电阻是否连接到正确的电源(通常是
LDO_3V3)?阻值是否合适?总线电容过大(走线长、设备多)而电阻值过大,会导致上升沿过缓,通信失败。可以尝试减小上拉电阻(如从10kΩ改为2.2kΩ)。 - 检查地址冲突:系统中是否有其他I2C设备地址与TPS65983B冲突?确认
I2C_ADDR和DEBUG_CTL引脚的电平设置是否正确。 - 检查时钟拉伸:如果主控的I2C驱动不支持时钟拉伸,而TPS65983B使用了此功能,主控会在等待ACK或数据时超时。尝试在主机端增加超时时间,或检查TPS65983B的固件配置是否可以禁用时钟拉伸(如果支持)。
- 电源噪声:
VDDIO(I/O电源)是否干净?大的噪声可能导致逻辑电平误判。确保其滤波电容(1μF)靠近芯片引脚放置。
- 波形抓取:使用逻辑分析仪或示波器抓取
5.3 PD协议协商成功,但无法输出高压(如12V/20V)
- 问题现象:设备连接后只能输出5V,无法切换到更高的电压档位。
- 排查步骤:
- 检查电源路径使能:确认对应高压路径的使能信号(如
HV_GATE1)是否已由芯片发出?可以用示波器测量。 - 检查外部MOSFET:对于PP_EXT路径,测量外部MOSFET的栅极驱动电压是否足够(通常需要高于Vgs(th))。确认MOSFET本身是否完好。
- 检查电流检测回路:PP_EXT路径的
SENSEP和SENSEN引脚是否正确连接到采样电阻的两端?走线是否对称、等长,远离干扰源?该回路异常会导致芯片误触发过流保护,关闭输出。 - 检查PDO配置:通过I2C读取芯片的PDO配置寄存器,确认期望的高压档位(如12V,20V)是否已正确配置并启用。可能是固件配置问题或系统主控未通过I2C正确设置。
- 检查电缆:确认使用的Type-C电缆是否支持5A电流(E-mark芯片)?不支持5A的电缆无法协商20V/5A这样的高功率档位。
- 检查电源路径使能:确认对应高压路径的使能信号(如
5.4 DisplayPort输出无显示
- 问题现象:Type-C连接到显示器,PD充电正常,但无显示信号。
- 排查步骤:
- 确认模式切换:首先通过系统日志或I2C寄存器,确认TPS65983B是否成功进入了DisplayPort Alt Mode。
- 检查MUX控制:测量控制HD3SS460的
GPIO_0(AMSEL)、GPIO_3(EN)等信号电平,是否符合预期(高电平使能DP模式)? - 检查SBU/AUX连接:确认TPS65983B的
SBU1/2引脚是否已正确连接到HD3SS460的AUX_N/P引脚?DisplayPort的AUX通道用于EDID读取和链路训练,如果断开,显示器可能无法被识别。 - 检查高速信号链路:DP主链路(ML0-3)的走线是否符合高速差分信号的要求(阻抗控制、等长、参考平面完整)?问题可能出在GPU到HD3SS460,或HD3SS460到Type-C连接器这段路上。
- 检查HPD热插拔检测:DisplayPort的HPD信号通路是否正常?这通常也通过AUX通道或专门的引脚实现。
5.5 生产烧录与测试
- 离线烧录:可以在贴片前,使用编程器对W25Q80 Flash进行烧录。确保烧录的文件是包含完整头信息和CRC的二进制镜像,而不是原始的
.hex或.bin(除非烧录工具能自动添加)。 - 在线烧录(ICP):通过预留的测试点或Type-C接口的SBU引脚(SWD模式),可以在板级对已焊接的芯片进行固件更新。这适合小批量生产或返修。
- 功能测试:生产测试中,除了基本的电源和短路测试,应构建自动化测试架,通过Type-C连接测试仪,模拟各种PD Source和Sink设备,验证芯片能否正确协商所有预设的电压/电流档位,以及I2C通信是否正常。对于支持DisplayPort的产品,还需要接入显示器或DP分析仪进行视频通路测试。
TPS65983B是一款功能强大的芯片,其设计涵盖了从底层硬件启动到高层协议栈的完整链条。成功的应用离不开对Flash启动、I2C通信、电源路径管理和系统集成等每一个环节的深刻理解和细致设计。希望这篇结合了数据手册解读和实战经验的文章,能帮助你在项目中避开那些我曾经踩过的“坑”,更顺畅地完成产品开发。记住,在硬件世界里,细节决定成败,耐心和严谨的测试是最好的伙伴。