news 2026/7/25 1:32:38

深入解析TPS65987D:FRS、死电池与BC1.2三大核心功能设计实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
深入解析TPS65987D:FRS、死电池与BC1.2三大核心功能设计实战

1. TPS65987D:现代设备供电与连接的核心枢纽

如果你拆开一台近几年的高端笔记本电脑、显示器或者高性能扩展坞,有很大概率会在其USB Type-C接口附近找到一颗来自德州仪器(TI)的芯片——TPS65987D。这枚芯片远不止是一个简单的接口芯片,它是整个设备能否实现“一线通”(单线缆传输数据、视频并供电)的灵魂。在USB Type-C和Power Delivery(PD)的世界里,它扮演着协议翻译官、电力调度员和安全卫士的多重角色。简单来说,没有它,你的设备可能就无法通过那小小的Type-C口实现100W的快速充电、4K@60Hz的视频输出以及10Gbps的数据传输。

我接触过不少基于这颗芯片的设计,从最初的手忙脚乱到后来的游刃有余,深感其功能之强大与设计之精妙。今天,我们就深入这颗芯片的“内脏”,重点聊聊三个在实际产品开发中至关重要,却又容易被数据手册复杂描述所掩盖的功能:快速角色交换(FRS)、死电池操作和BC1.2充电检测。理解它们,你就能明白为什么你的笔记本能在插着电源的同时,还能通过同一个Type-C口给手机快速充电(FRS);为什么电池完全没电的电脑,插上充电器后还能开机进入恢复模式(死电池操作);以及为什么一个老旧的USB-A充电器插上Type-C转接头,依然能给新设备充电(BC1.2检测)。

2. 快速角色交换(FRS):无缝切换的供电指挥权

想象一个场景:你的笔记本电脑正在通过Type-C线连接显示器,笔记本作为“源”(Source)为显示器供电并传输视频信号。此时,你拔掉了笔记本的电源适配器,笔记本的电池开始放电。为了节省电量,你希望立刻将供电角色反转,让已经接通电源的显示器反过来给笔记本充电。如果没有FRS,这个过程会非常笨拙:需要先断开连接,等待双方重新协商,再建立新的供电合同,耗时可能长达数秒,期间视频信号会中断。而FRS的目标,就是在不断开数据连接(如DisplayPort Alt Mode)的前提下,在毫秒级别内完成供电角色的互换

2.1 FRS的硬件实现机制

TPS65987D在硬件层面为FRS提供了直接支持,这比纯靠固件轮询检测要快得多,也更可靠。其核心在于对CC(Configuration Channel)引脚电压的实时监控。

当端口配置为接收端(Sink)且使能FRS时,芯片会持续监测CC引脚上的电压。这个电压是由对端的Source通过上拉电阻Rp产生的。一旦检测到CC电压低于一个特定的阈值(VTH_FRS,典型值可能在0.4V左右,具体需查数据手册),硬件会立即向数字核心发出一个中断信号。这个电压骤降,就是来自对端Source的“求救信号”或“指挥权移交请求”。数字核心收到此信号后,会立即终止当前的Sink行为,并迅速切换为Source角色,开始在自己的CC引脚上提供上拉电阻Rp,并准备在VBUS上输出电压。

注意VTH_FRS这个阈值非常关键。设置得太高,容易受到噪声干扰而误触发;设置得太低,则可能无法及时响应真正的角色交换请求。TI通常会在数据手册或应用笔记中给出推荐值,设计时务必遵循。

反之,当端口作为供电端(Source)且使能FRS时,如果数字核心(例如,基于系统电量状态)决定发起角色交换,它会直接控制一个内部的下拉电阻(R_FRSWAP,如图8-15所示)连接到CC引脚。这个动作会瞬间将CC线的电压拉低。对端的Sink设备(也必须支持FRS)检测到这个电压跌落(低于其VTH_FRS)后,就会明白:“哦,Source没电了,需要我接管供电”,从而触发其自身的Sink到Source的切换。

2.2 设计考量与避坑指南

在实际电路设计中,FRS的稳定性和速度取决于几个细节:

  1. CC引脚的RC常数:CC线上通常会有对地的滤波电容(如图9-1中的220pF C2/C3)。这个电容不能太大,否则会延缓电压的上升/下降沿,导致FRS检测变慢甚至失败。TI的典型参考设计是220pF,这是一个在噪声滤波和信号速度间取得平衡的值,除非有极强的EMI问题,否则不建议随意增大。

  2. R_FRSWAP的阻值:这个内部下拉电阻的阻值需要足够小,以确保能将被拉高的CC电压(通常约0.66V或1.23V,取决于Source的电流能力)快速且可靠地拉低到阈值以下。芯片内部已经做了优化,我们无需担心。

  3. 固件配合:硬件检测只是第一步。数字核心在收到FRS信号或决定发起FRS后,必须能够快速执行一系列操作:更新PD状态机、控制电源路径开关(如内部或外部的MOSFET)、调整VBUS的电压/电流。这就要求固件的中断服务程序(ISR)要足够高效,不能有冗长的延迟操作。

一个我踩过的坑:在早期的一个扩展坞项目中,我们启用了FRS,但在测试时发现角色交换成功率不高。后来用示波器抓取CC波形发现,电压跌落是正常的,但我们的固件在ISR中进行了大量的日志打印和状态上报,导致角色切换动作慢了近10ms,有时对端设备已经超时放弃了。教训是:FRS相关的处理代码路径必须极致优化,避免任何非必要的阻塞操作。

3. 死电池操作:绝境中的系统生命线

“死电池”(Dead Battery)或“无电池”(No-Battery)模式,是TPS65987D一个极具实用价值的功能。它解决了设备在电池完全耗尽(0V)或根本没有电池(如台式显示器、扩展坞)时,如何通过Type-C接口从外部Source获取初始电力,从而启动系统的问题。

3.1 死电池广告的硬件“后门”

根据USB Type-C规范,一个Source只有在检测到Sink在CC引脚上提供了正确的下拉电阻Rd(约5.1kΩ)后,才会开启VBUS供电。这就像一道安全门禁:你必须出示正确的门卡(Rd),电力(VBUS)才会送达。

但当设备完全没电时,主控制器和TPS65987D的固件都无法运行,也就无法主动配置CC引脚为Rd模式。这就成了一个“先有鸡还是先有蛋”的困境。TPS65987D的解决方案是设计了一个硬件“后门”电路(见图8-16)。

在死电池状态下,芯片内部的一个特殊路径会被激活。此时,CC引脚通过一个未经微调的电阻RD_DB连接到地。这个RD_DB的阻值虽然不如正常模式下的RD_CC精确,但足以让对端的Source识别出“这里有一个Sink”,从而开启5V的VBUS供电。一旦VBUS上电,TPS65987D和系统主控获得电力,开始启动。随后,应用代码(固件)会接管控制,将CC引脚的下拉电阻切换为更精确的RD_CC,并开始正常的PD协议通信,协商更高的电压和电流。

3.2 BUSPOWER引脚与启动配置

如何告诉TPS65987D当前是死电池状态,以及该如何行动呢?这就是ADCIN1(在上下文中被标记为BUSPOWER)引脚的作用。如图8-17所示,你需要通过一个电阻分压网络(R1, R2),将LDO_3V3的电压分压后送到ADCIN1

芯片上电后,内部ADC会立即读取这个引脚上的电压,数字核心根据这个电压值(对应不同的分压比DIV)来决定启动行为。这通过引脚绑缚(Pin Strapping)来实现,具体配置见表8-5。

例如:

  • BP_NoResponse:如果ADCIN1电压落在0.00-0.18 DIV区间,芯片将不响应VBUS供电。它只会等待主电源VIN_3V3(通常来自电池或DC-IN)上电。这适用于永远不需要从Type-C口取电启动的设备。
  • BP_WaitFor3V3_Internal:如果电压在0.20-0.28 DIV,芯片会开启内部电源开关,将VBUS的电提供给PP_HVx路径,但会暂停启动流程,等待VIN_3V3主电源就绪。这常用于笔记本电脑,确保只有在外接电源和电池/DC电源都就绪后,才完全启动。
  • BP_NoWait:如果电压在0.60-1.00 DIV,芯片会直接从VBUS取电,并立即尝试加载配置和启动。这适用于纯粹由Type-C供电的设备,如显示器或扩展坞。

关键设计步骤

  1. 确定模式:根据你的产品需求(是笔记本、平板还是扩展坞),从表8-5中选择合适的死电池模式。
  2. 计算电阻:根据选定的DIV范围,计算R1和R2的值。例如,选择BP_WaitFor3V3_Internal,其中值DIV=0.24。假设LDO_3V3=3.3V,则ADCIN1电压应为3.3V * 0.24 ≈ 0.792V。选取R2=10kΩ,则 R1 = R2*(Vldo/Vadc -1) = 10k * (3.3/0.792 -1) ≈ 31.6kΩ。选择最接近的1%精度电阻,如31.6kΩ。
  3. 连接GPIO16:特别注意!如果你的模式是BP_WaitFor3V3_ExternalBP_ECWait_External,意味着你使用外部MOSFET作为VBUS的电源开关。此时,必须使用GPIO16来控制这个外部开关。芯片固件会通过这个GPIO来使能外部供电路径。如果错误地连接到其他GPIO,死电池功能将失效。

一个真实案例:我们曾设计一款二合一平板电脑,要求即使电池完全没电,插上Type-C充电器也能显示充电Logo并进入低电恢复模式。我们选择了BP_WaitFor3V3_Internal模式。但在试产时发现,部分主板无法从死电池状态启动。排查后发现,是ADCIN1分压电阻的精度用了5%的,导致实际电压漂移出了DIV的有效窗口。教训是:死电池相关的配置电阻,必须使用1%甚至更高精度的电阻,这是数据手册明确要求的,不能将就。

4. BC1.2充电检测:与旧世界的兼容桥梁

尽管USB PD是未来,但世界上仍有海量的旧式充电器(USB-A口,支持BC1.2、Apple 2.4A、三星AFC等)。TPS65987D内置的BC1.2检测与广告模块,就是一座连接PD新世界与旧式充电器的桥梁,确保用户随便拿一个充电器都能以尽可能快的速度充电。

4.1 检测原理:握手与识别

BC1.2检测是一个主动探测的过程,主要通过D+和D-数据线进行(见图8-18)。TPS65987D内部集成了电压源、电流源和比较器,可以自动执行以下步骤:

  1. 数据接触检测(DCD):首先,芯片在D+上输出一个微小的电流源(IDP_SRC),同时在D-下拉一个电阻(RDM_DWN)。如果连接的是一个设备(而非充电器),D+和D-会被设备内部的USB收发器下拉,电压不会升高。如果连接的是充电器,D+的电压会被拉高,从而检测到“有东西连接上了”。

  2. 初级检测(Primary Detection):确认连接后,开始判断充电器类型。芯片会在D-上施加一个电压(VDX_SRC),同时在D+上设置一个电流阱(IDX_SNK),然后测量D+的电压。通过这个电压值,可以判断D+和D-之间是开路、短路还是接有特定电阻,从而区分是标准下行端口(SDP,即普通电脑USB口)充电下行端口(CDP,能提供更大电流的电脑USB口)还是专用充电端口(DCP,如充电头)

4.2 广告模式:主动告知充电能力

除了检测对方是什么,TPS65987D还能主动“广告”自己是什么,以触发某些设备(特别是老款手机和平板)的快充协议。它支持多种广告模式:

  • CDP广告:模拟电脑CDP端口的行为,在D+和D-上产生特定的电压序列,告知设备可以抽取大于1.5A的电流。
  • DCP广告(短路模式):直接将D+和D-通过一个电阻(RDCP_DAT,通常约200Ω)短接。这是最广泛的识别方式,绝大多数智能设备看到D+D-短接,就认为这是一个DCP充电器,会提高充电电流。
  • 2.7V分压器模式:一种专有协议。在D+和D-上各提供一个约2.7V的电压源(通过R_DIV输出)。某些特定品牌的设备看到这个信号,会允许从VBUS抽取超过2.4A的电流。
  • 1.2V模式:另一种专有协议。在D-上提供1.2V电压,同时将D+和D-短接。用于触发另一些设备的快充。
  • DCP自动模式:这是最省心也是最推荐的模式。在此模式下,TPS65987D会自动探测连接的设备类型,并动态切换上述广告模式,以匹配设备能识别的协议,无需断开VBUS重试。

4.3 设计实践与注意事项

  1. 外部电阻不可省:数据手册备注中明确提到,USB 2.0标准所要求的主机或设备上下拉电阻,TPS65987D内部并未提供。这意味着,如果你的端口需要作为USB 2.0 Host或Device进行数据传输,必须在D+和D-线上外部添加15kΩ的下拉电阻(对于Device)或上拉电阻(对于Host)。这个细节很容易被忽略,导致USB数据功能不正常。

  2. VBUS电流能力匹配:当你启用2.7V或1.2V等专有广告模式时,意味着你承诺VBUS电源可以提供更大的电流(数据手册建议分别至少2.4A和2A)。你必须在电源设计上保证这一点,否则可能导致电压跌落或过载保护,反而影响充电。

  3. 与PD的优先级:通常,BC1.2检测发生在PD通信之前或并行进行。如果连接的是支持PD的Source,双方会通过PD协商更高的功率,BC1.2的结果会被覆盖。固件需要妥善管理这个状态机,避免冲突。

一个兼容性提升技巧:在项目后期,我们经常接到测试报告,称某款旧手机充电速度慢。排查后发现,该手机只认一种特定的DCP短路电阻值。我们通过调整固件中RDCP_DAT的等效配置(虽然主要是硬件固定,但有些芯片可通过并联外部电阻微调),将短路电阻从标准的200Ω调整到150Ω,成功解决了该型号手机的充电识别问题。这说明,对于海量的非标充电器和设备,有时需要在合规的框架内进行细微的“适应性调整”,BC1.2模块的灵活性为此提供了可能。

5. 系统集成与配置实战

理解了核心功能后,如何将它们整合到一个实际产品中?TPS65987D通过配置包(Configuration Bundle)I2C主机接口提供了极高的灵活性。

5.1 启动流程与配置加载

芯片上电后(无论是从VIN_3V3还是VBUS),首先执行引导程序(Boot)。这个程序会读取ADCIN1SPI_POCI的引脚状态(见表8-5),决定死电池模式和行为。然后,它会尝试通过SPI接口(连接外部Flash)或I2C接口(从主机处理器)加载一个“配置包”。

这个配置包是一个二进制文件,定义了设备的几乎所有行为:

  • 默认的电源角色(Source, Sink, DRP)
  • 支持的PDO(电源数据对象),如5V/3A, 9V/3A, 15V/3A, 20V/5A等
  • 是否支持Alternate Mode(如DisplayPort)
  • FRS功能的使能与配置
  • BC1.2各种广告模式的使能
  • GPIO的功能映射
  • 各种超时和重试参数

TI提供了图形化的“应用定制工具”(Application Customization Tool)来生成这个配置包。这是开发过程中最重要的软件工具,你可以通过勾选选项、填写参数来生成初始配置,无需从头编写复杂的寄存器映射。

5.2 I2C主机接口:运行时控制

加载配置包后,设备进入运行状态。此时,系统的主处理器(如x86 EC或ARM MCU)可以通过I2C总线(通常是I2C1或I2C2)与TPS65987D通信。这个主机接口允许:

  • 实时读取端口状态(连接状态、当前电压/电流、PD合约内容)。
  • 动态更改配置(例如,在系统电量低时,通过命令触发FRS,请求对端供电)。
  • 响应各种中断事件(连接断开、PD消息接收、FRS信号检测等)。

I2C地址设置是一个关键硬件设计点。I2C1的地址可以通过ADCIN2引脚的分压电阻来配置(见表8-2和表8-4),这允许同一个I2C总线上挂载多个TPS65987D芯片(例如在双Type-C口的设备上)。你需要为每个芯片的ADCIN2设置不同的分压,以分配唯一的I2C地址。

5.3 电源路径设计与保护

如图9-1典型应用所示,TPS65987D管理着复杂的电源路径。它内部集成了高压电源开关(连接PP_HVx),用于切换VBUS的供电方向。在死电池或高功率场景下,这些内部开关可能不够用,需要驱动外部的背对背MOSFET(通过GPIO16/17控制PEXT1/2)。

VBUS保护至关重要。由于PD支持高达20V/5A,非标设备可能带来高压热插拔风险。必须在VBUS入口设计保护电路,通常包括:

  • 过压保护(OVP)器件:如TVS二极管,用于钳位浪涌电压。
  • 缓启动电路:防止插拔时的电流冲击。
  • 理想的二极管或负载开关:用于实现电源路径的优先级管理(例如,优先使用适配器供电,而非电池供电)。

6. 调试与故障排查实录

在实际开发中,遇到问题才是常态。以下是围绕FRS、死电池和BC1.2的常见问题及排查思路。

6.1 FRS功能失效

现象:角色无法切换,或切换时视频信号中断。排查步骤

  1. 确认双方支持:首先用PD协议分析仪(如Ellisys, LeCroy)捕获PD通信,确认两端设备在PD Discover Identity和Discover SVID消息中,都宣告支持FRS。
  2. 检查CC波形:使用示波器高精度探头测量CC线波形。当尝试触发FRS时,观察CC电压是否有清晰的跌落沿(作为Source发起)或监测到跌落(作为Sink响应)。如果波形畸变或缓慢,检查CC线上的对地电容是否过大。
  3. 验证固件配置:在TI配置工具中,确保FRS功能已使能,并且相关的时间参数(如tFRSwap)设置符合USB PD规范。
  4. 检查电源路径切换速度:角色交换的核心是VBUS供电方的切换。用示波器同时测量原Source和新Source的VBUS。在FRS触发后,原Source的VBUS应快速关闭(通常在几百微秒内),新Source的VBUS应快速开启。如果外部MOSFET开关速度过慢,会导致供电中断时间过长,造成系统复位。

6.2 死电池模式无法启动

现象:电池耗尽后,插入Type-C充电器,设备无任何反应。排查步骤

  1. 测量ADCIN1电压:在插入Type-C充电器后,立即测量ADCIN1引脚对地的电压。验证其是否落在你预期的DIV范围内(见表8-5)。如果电压不对,检查分压电阻R1、R2的值和焊接。
  2. 检查VBUS供电:测量TPS65987D的VBUS引脚是否有5V电压。如果没有,说明对端Source没有识别到Rd。检查CC引脚到Type-C连接器的线路是否连通,CC对地电容是否短路。
  3. 检查LDO_3V3:如果VBUS有5V,测量LDO_3V3引脚是否有3.3V输出。这是芯片工作的核心电压。如果没有,可能是芯片损坏或VIN_3V3/VBUS到LDO_3V3的路径有问题。
  4. 确认GPIO16连接(仅限外部开关模式):如果使用BP_WaitFor3V3_External模式,测量GPIO16在启动过程中的电平。它应该在芯片获得供电后,输出高电平以打开外部MOSFET。如果一直是低电平,检查固件配置或芯片是否进入了错误的模式。

6.3 BC1.2检测不识别或识别错误

现象:连接普通USB-A充电器,设备充电极慢(仅500mA),或无法充电。排查步骤

  1. 测量D+/D-电压:在连接充电器后,使用万用表测量Type-C接口的D+和D-对地电压。
  • 如果D+和D-电压都在0V左右,可能BC1.2模块未使能,或连接断路。
  • 如果D+和D-电压相同且约0.6V,可能是CDP模式。
  • 如果D+和D-电压相同且约2.7V,是2.7V分压器模式。
  • 如果D+和D-短路(电压相同),是DCP模式。
  • 如果D-约1.2V,D+被拉低,是1.2V模式。通过电压可以初步判断芯片处于哪种广告状态。
  1. 检查配置:在TI配置工具中,确认BC1.2检测和相应的广告模式(尤其是DCP自动模式)已启用。
  2. 检查外部电阻:如果你的端口也需要作为USB 2.0设备,确认已在D+和D-上添加了正确的15kΩ下拉电阻到地。缺少这个电阻会导致USB数据功能异常,但有时也会影响某些设备的充电识别。
  3. 尝试固定模式:如果“自动模式”下对某些充电器识别不好,可以尝试在配置中固定为“DCP广告(短路)模式”。这是兼容性最广的模式。

6.4 功耗与热管理

TPS65987D功能强大,但在Active状态下功耗不容忽视,尤其是在处理高速PD通信和驱动外部MOSFET时。芯片内部集成了温度传感器和热关断功能。

过热问题排查

  1. 检查PCB布局:芯片的散热焊盘(Thermal Pad)必须良好接地,并通过足够多的过孔连接到内部或底层的地平面,以帮助散热。
  2. 测量关键点温度:在满载工作(如20V/5A PD合约生效)时,使用热像仪或点温计测量芯片表面温度。确保其低于数据手册规定的结温(通常125°C)。
  3. 优化电源路径效率:如果使用外部MOSFET,选择导通电阻(Rds(on))更小的型号,可以减少开关上的热损耗。确保MOSFET的栅极驱动电压足够,使其完全导通。
  4. 利用低功耗状态:当端口未连接或协议交互完成后,可以通过I2C命令将芯片置于Idle或Sleep状态,以显著降低功耗。这在电池供电设备中尤为重要。

开发基于TPS65987D的产品,就像在指挥一个交响乐团。FRS、死电池、BC1.2这些功能是其中重要的声部。理解每个声部的工作原理(硬件电路),熟练运用指挥棒(配置工具和固件),并提前预演可能出现的杂音(调试与排查),才能最终奏出稳定、高效、兼容性完美的乐章。这颗芯片的深度,足以支撑起从消费电子产品到工业设备的广阔应用,而吃透这些细节,正是工程师从“能用”到“好用”的关键跨越。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/25 1:31:49

PCB模块化设计:继电器驱动电路的高效复用与工程实践

为什么很多硬件工程师画PCB时效率低下?不是因为技术不行,而是因为每次都在重复绘制相同的功能模块。继电器驱动电路就是典型例子——看似简单,但涉及三极管选型、续流二极管配置、布局隔离等多个细节,稍有不慎就会导致继电器误动作甚至损坏。 本文要解决的核心问题就是:如…

作者头像 李华
网站建设 2026/7/25 1:31:10

AI工具如何提升学术写作效率:从选题到答辩的全流程优化

1. 学术写作的痛点与AI解决方案读研期间最让我抓狂的就是论文写作——从开题到答辩,每个环节都像在闯关打怪。开题找不到方向,文献综述看到眼花,数据处理总出bug,格式调整能折腾一整天。直到去年答辩前两周,我才偶然发…

作者头像 李华
网站建设 2026/7/25 1:30:44

Codex接入DeepSeek后Token异常消耗的诊断与根治方案

最近在尝试将 Codex 项目接入 DeepSeek 模型时,很多开发者都遇到了一个棘手的问题:Token 消耗速度异常快,甚至在没有明显使用的情况下也在持续“燃烧”,导致 API 费用激增。这个问题不仅影响个人开发者的实验成本,更可能让团队项目在不知不觉中产生高额账单。本文将深入剖…

作者头像 李华
网站建设 2026/7/25 1:28:38

魔兽争霸3现代化升级指南:5大场景化解决方案重塑经典体验

魔兽争霸3现代化升级指南:5大场景化解决方案重塑经典体验 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 魔兽争霸3辅助工具WarcraftHelpe…

作者头像 李华
网站建设 2026/7/25 1:23:55

Linux文件系统架构与优化实践指南

1. Linux文件系统的树形结构解析第一次接触Linux时,最让我震撼的就是它那独特的目录结构。与Windows的盘符划分不同,Linux将所有存储设备都挂载到一个统一的目录树下。这种设计理念源自Unix哲学"一切皆文件",而目录树正是这一理念的…

作者头像 李华
网站建设 2026/7/25 1:22:45

GetQzonehistory:3步完成QQ空间历史数据完整导出指南

GetQzonehistory:3步完成QQ空间历史数据完整导出指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory GetQzonehistory是一个专业的Python开源工具,专注于帮助用户…

作者头像 李华