用树莓派Pico低成本更新USB-C PD控制器固件实战指南

📅 2026/7/27 15:46:21
用树莓派Pico低成本更新USB-C PD控制器固件实战指南
1. 项目概述与核心价值给一颗复杂的USB-C/PD控制器芯片更新固件听起来像是需要昂贵专业工具才能完成的任务。但如果你手头恰好有一块几十块钱的Raspberry Pi Pico事情就变得有趣多了。我最近在调试一个基于TI TPS66994的双口USB-C电源项目时就遇到了需要更新固件以修复一个握手协议兼容性的问题。官方文档虽然提供了方案但实际操作中充满了各种“坑”从评估板的跳线配置到Pico的驱动识别每一步都可能让你卡上半天。这篇文章就是把我从零开始成功使用Raspberry Pi Pico通过USB-C口为TPS66994更新固件的完整过程、踩过的坑以及核心原理毫无保留地分享出来。TPS66994是一颗功能强大的双端口USB Type-C和USB Power Delivery控制器它内部集成了MCU和Flash用于管理复杂的PD协议协商、端口控制和安全策略。这意味着它的“行为”很大程度上由其内部固件决定。当芯片出厂后如果需要修复Bug、增加对新PD协议版本的支持或者调整供电策略就必须通过固件更新Firmware Update来实现。与许多MCU通过SWD/JTAG更新不同TPS66994设计了一种通过其本身的USB-C数据通道进行更新的方式这非常巧妙但也增加了操作复杂度。整个流程的核心可以概括为“先配置后桥接再烧录”。你需要先用官方GUI工具通过一个特定的JSON配置文件把评估板EVM上的TPS66994芯片“切换”到固件更新模式。然后让Raspberry Pi Pico扮演一个“翻译官”的角色它一端通过USB-C线连接到TPS66994的指定端口Port B另一端通过USB线连接到你的电脑。最后在电脑上运行TI的TFU Updater工具通过Pico这个“桥”将新的固件二进制文件.bin安全地传输并烧录到TPS66994的内部Flash中。这个过程涉及硬件连接、软件配置、协议交互等多个层面任何一个环节出错都会导致失败。接下来我将拆解每一个步骤并附上我实际操作中验证过的细节和避坑指南。2. 硬件准备与深度原理剖析在动手之前彻底理解你手头的硬件和它们在整个流程中的角色至关重要。这不仅能帮你正确连接更能在出现问题时快速定位。2.1 核心硬件角色解析TPS66994评估板 (EVM)核心功能这是我们固件更新的“目标设备”。板载的TPS66994芯片是最终接收新固件的对象。关键设计评估板上除了主芯片还有一个负责与电脑GUI通信的板载MCU通常也是TI的MSP430系列以及一系列配置跳线。这些跳线是第一个容易出错的地方。例如J24跳线决定了板子是从USB-C口取电还是从外部电源取电J3(VDDIO) 跳线设置了主芯片与板载MCU通信的I/O电压常见为1.8V或3.3VJ5(ADCIN) 跳线则与模拟输入配置有关。如果跳线设置错误板载MCU可能无法与TPS66994正常通信GUI也就无法识别设备。Raspberry Pi Pico核心功能USB-C协议到I²C协议的“协议转换桥”。这是整个方案最巧妙的一环。Pico在这里并非运行我们编写的MicroPython或C程序而是需要刷入TI提供或特定编译的“桥接固件”。这个固件让Pico在连接到TPS66994的USB-C口时能正确枚举为一个USB设备并通过USB PD协议中的VDMVendor Defined Message通道与TPS66994建立通信。同时Pico通过USB CDC通信设备类虚拟出一个串行COM口与电脑通信接收来自TFU Updater的指令和数据再通过I²C总线转发给TPS66994。简单说Pico是个“双面胶”一面是USB-C/PD一面是I²C。USB-C电源与线缆电源必须能提供至少5V/3A的PD协议电源用于给TPS66994 EVM供电。很多手机充电头虽然标称快充但可能不支持标准的PD协议会导致EVM供电不稳定。建议使用笔记本电脑的USB-C充电器或明确支持PD协议的充电头。数据线务必使用支持数据和充电的全功能USB-C线缆。很多廉价的USB-C线仅支持充电内部没有数据线会导致电脑完全无法识别EVM或Pico。准备两条一条用于连接电脑和EVM进行初始配置另一条用于连接电脑和Pico。2.2 软件工具链与作用TPS66994 Application Customization Web GUI这是一个基于网页的配置工具用于与EVM上的板载MCU交互从而配置TPS66994芯片的寄存器。它的核心作用是导入一个特殊的JSON配置文件该文件包含了“启用USB-C固件更新路径”的关键寄存器位配置。导入并应用后GUI会引导你将一个基础的“TFU Bootloader”固件烧录到TPS66994中这个Bootloader就是后续接收新固件的基础。TI TFU Updater 工具这是一个Windows桌面应用程序也有命令行版本。它的工作是管理固件更新过程识别连接到电脑的Pico通过COM口将新的.bin固件文件上传到Pico的缓存中然后指挥Pico通过USB-C PD链路将固件数据块安全地写入TPS66994的Flash存储区。它提供了连接状态、进度条和简单的设备信息读取功能是更新操作的“控制台”。关键配置文件与固件TPS66994_C_Update.json这是开启整个流程的“钥匙”。这个JSON文件由TI提供其中定义了如何配置TPS66994的寄存器以打开其通过USB-C端口接收固件更新的“后门”。没有这个文件后续所有步骤都无法进行。TFP_Binary_xxxxxx.bin这是你要刷入TPS66994的新版固件文件同样由TI提供。Pico桥接固件这是一个需要预先烧录到Pico里的.uf2文件。它通常包含在TI提供的TFU Updater工具包中或者需要从TI的相关资源页面下载。确保你的Pico里运行的是正确的桥接固件而不是其他程序否则Pico无法正确扮演桥接角色。3. 分步实操流程与避坑指南理论清晰后我们进入实战环节。请严格按照顺序操作并特别注意我标出的“避坑点”。3.1 第一阶段TPS66994 EVM 初始配置与Bootloader烧录这个阶段的目的是让TPS66994芯片进入“可更新状态”。步骤1硬件连接与上电检查跳线拿到EVM板第一件事不是通电而是核对所有跳线帽的位置。参考EVM用户手册确保J24电源选择设置为通过USB-C口取电J3VDDIO设置为与你的芯片版本匹配的电压通常为1.8VJ5ADCIN设置在默认位置如1-2。我踩过的坑曾因J3误设为3.3V导致GUI无法识别芯片折腾了半天。连接电源与电脑使用全功能USB-C线将EVM板上标有“Power”的USB-C口连接到你的USB-C电源适配器。使用另一条全功能USB-C线将EVM板上标有“Communication”或类似字样的USB-C口连接到你的电脑。观察EVM板上的电源指示灯是否亮起。此时板载MCU和TPS66994都应已上电。步骤2使用Web GUI导入配置并烧录基础固件打开浏览器访问TI提供的TPS66994配置工具网址可能需要TI账户登录。如果连接正常页面应该能自动检测到EVM设备。如果没检测到尝试重新插拔连接电脑的USB-C线或者换一个USB口。在GUI中找到“Import Configuration”或类似的按钮选择你下载好的TPS66994_C_Update.json文件并导入。导入后GUI的寄存器配置视图会发生改变。关键操作找到“Flash”或“Program”相关的按钮通常会有一个选项叫“Flash base TFU image with current AppConfig”。点击它。此时会弹出一个对话框。务必先点击“Read”按钮读取一下设备的当前信息模式、版本等确认通信正常。如果“Read”失败回到步骤1检查硬件。“Read”成功后点击“Flash”或“Program”开始烧录。你会看到一个进度条显示正在写入多个数据块大约10个。此时绝对不要断电或断开USB线烧录完成后GUI会提示成功。再次点击“Read Device Information”确认设备模式。此时TPS66994应该已经运行在包含了TFU Bootloader的固件中为下一步通过USB-C口更新做好了准备。你可以关闭浏览器页面但保持EVM持续通电。避坑指南GUI操作常见问题问题GUI无法检测到设备。排查1. 确认USB线是数据线2. 确认EVM的“Communication”口连接到了电脑而非“Power”口3. 检查跳线特别是VDDIO4. 尝试以管理员身份运行浏览器或更换浏览器Chrome/Firefox兼容性较好5. 检查电脑设备管理器中是否出现了EVM对应的COM口或HID设备。问题“Flash”过程中失败。排查1. 确保电源稳定建议使用台式机后置USB口或供电好的Hub2. 关闭电脑上可能占用USB端口的其他软件如串口调试助手3. 如果多次失败尝试先对EVM完全断电拔掉电源和USB线等待10秒后重新上电再从导入JSON开始。3.2 第二阶段搭建Pico桥接与固件传输环境现在主角Raspberry Pi Pico要登场了。步骤3准备Raspberry Pi Pico刷写桥接固件如果你的Pico是全新的或者里面运行的是MicroPython等其它固件你需要先刷入TI提供的桥接固件一个.uf2文件。按住Pico板上的BOOTSEL按钮不放然后将Pico通过USB线连接到电脑。电脑会识别出一个名为RPI-RP2的可移动磁盘。将桥接固件.uf2文件拖入该磁盘。Pico会自动重启并运行新的固件。验证Pico枚举刷写完成后断开Pico与电脑的连接。然后重新用USB线将Pico连接到电脑。打开Windows设备管理器在“端口COM和LPT”下你应该能看到一个新出现的“USB Serial Device (COMx)”记住这个COM口号如COM5。如果没出现可能是驱动问题需要安装Raspberry Pi Pico的USB CDC驱动或者重新刷写桥接固件。步骤4连接Pico到TPS66994 EVM保持TPS66994 EVM处于通电状态。使用一条USB-C线或Micro USB转USB-C适配器将Pico的USB口连接到EVM上用于固件更新的USB-C端口。根据文档这通常是Port B。请务必确认是Port B连接错端口会导致后续步骤完全无法进行。此时Pico应该通过EVM的Port B获得5V供电其电源指示灯会亮起。同时Pico仍然通过另一条USB线与电脑保持连接用于数据传输。步骤5使用TI TFU Updater工具进行更新在电脑上打开TI TFU Updater应用程序。在软件界面的“Serial Port”下拉菜单中选择你在步骤3中记下的Pico对应的COM口如COM5然后点击“Connect”。连接成功后状态指示灯应从红色变为绿色。在“Settings”或“Configuration”区域确认I²C Speed设置为400kHzSlave Address设置为0x20。这是与TPS66994 TFU Bootloader通信的标准参数。关键操作上传固件到Pico。点击“Upload Firmware to PICO”或类似的按钮在弹出的文件选择框中找到你准备好的新版本TPS66994固件文件TFP_Binary_xxxxxx.bin并打开。软件会将这个二进制文件传输到Pico的内存中。传输成功会有提示。验证链路在开始最终烧录前先点击“Read Device Information”按钮。如果一切正常TFU Updater会显示从TPS66994读取到的信息例如当前的PD模式可能是APP1和固件版本。这一步极其重要它确认了“电脑 ↔ Pico ↔ TPS66994”这条通信链路是完好的。如果读不到信息请检查Pico与EVM Port B的连接、EVM供电以及Pico的COM口连接。执行固件更新确认链路通畅后点击“Download Firmware to TPS6699x”按钮。软件会开始通过Pico将固件数据块发送到TPS66994。界面会显示下载进度条。整个过程很快大约几秒钟。完成与验证进度条达到100%后提示成功。再次点击“Read Device Information”确认固件版本号已更新为新的版本。此时TPS66994会自动重启并运行新固件。避坑指南Pico与TFU Updater常见问题问题TFU Updater无法连接PicoCOM口灰色或连接失败。排查1. 确认Pico刷入了正确的桥接固件2. 确认选择了正确的COM口设备管理器中查看3. 关闭所有可能占用该COM口的其他软件4. 尝试重新插拔Pico的USB线。问题“Read Device Information”失败。排查1.最常见原因Pico连接到了EVM的错误端口如Power口或Port A。确保连接到Port B。2. 确认EVM处于步骤2完成后的“TFU更新就绪”状态且持续供电。3. 检查连接线是否可靠。问题固件下载过程中中断或失败。排查1.绝对不要移动或触碰任何连接线2. 确保电脑电源管理设置不会使USB口进入休眠3. 如果失败可以尝试完全断电重启整个系统EVM和Pico然后从步骤4重新开始。4. 故障排查与深度问题分析即使按照步骤操作也可能遇到棘手问题。下面是我在多次实践中总结的故障树和解决方案。4.1 通信链路故障排查这是最常见的问题类别表现为GUI或TFU Updater无法识别设备或读取信息。排查思路分层隔离法第一层PC到板载MCU/Pico。现象Web GUI检测不到EVMTFU Updater找不到Pico的COM口。工具电脑设备管理器。行动检查设备管理器是否有未知设备或带感叹号的设备。更新或安装对应驱动EVM的MCU驱动、Pico的CDC驱动。尝试更换USB口或USB线。第二层板载MCU到TPS66994。现象GUI能连接EVM但读取/写入TPS66994寄存器失败。工具Web GUI的日志或错误提示万用表。行动重点检查EVM跳线特别是J3(VDDIO)的电压设置必须与TPS66994的I/O电压匹配。用万用表测量跳线电压确认。检查J24电源选择跳线是否正确。第三层Pico到TPS66994 (Port B)。现象TFU Updater能连接Pico但“Read Device Information”失败。工具TFU Updater确认物理连接。行动这是最需要仔细检查的一层。首先百分之百确认Pico连接到了EVM的Port B。其次确认EVM已完成第一阶段配置并处于上电状态。最后怀疑Pico桥接固件有问题重新刷写一遍。4.2 更新过程失败分析现象固件下载过程中进度条卡住、报错或完成后版本未变。可能原因与解决电源不稳定TPS66994在写入Flash时功耗可能瞬时增大。使用质量不佳的电源或线缆可能导致电压跌落引起写入错误或芯片复位。务必使用符合PD协议、输出能力充足的电源和低阻抗线缆。固件文件不匹配或损坏确保你下载的.bin文件是针对TPS66994这个具体型号的并且文件完整未损坏。可以尝试重新从TI官网下载。Pico桥接固件版本不兼容TI的TFU Updater工具和Pico桥接固件可能有版本配套要求。确保你使用的Pico固件来自你正在运行的TFU Updater工具包或者TI官方为该版本TPS66994固件更新流程推荐的版本。硬件兼容性问题极少情况下某些批次的Pico或特定的USB-C线缆可能存在兼容性问题。如果其他所有排查都无效可以尝试更换一个Pico板或使用另一条已知良好的全功能USB-C线。4.3 更新后的功能验证更新成功后不要假设一切OK必须进行功能验证。版本确认在TFU Updater中多次点击“Read Device Information”确认固件版本号已稳定变更为新版本。基础功能测试将EVM恢复到你实际应用所需的配置。通过Web GUI导入你产品正常的配置文件非更新用的JSON并烧录到TPS66994。然后使用USB-C测试仪或连接一个设备如手机、笔记本测试两个端口的PD协议握手、电压电流输出是否正常。回归测试如果此次固件更新是为了修复某个特定问题例如与某款笔记本的握手问题那么在更新后必须针对该特定场景进行测试确认问题已解决。整个流程看似步骤繁多但核心逻辑清晰配置芯片进入更新模式 - 搭建一个可靠的USB-C到I²C的物理桥 - 通过桥接工具推送新固件。最难的部分往往不是操作本身而是对硬件状态和软件配置的精确把握。我的经验是耐心和细致是关键尤其是在硬件连接和跳线设置上多花一分钟检查可能省去后面一小时的调试时间。这个方案的精妙之处在于它利用廉价的通用硬件Pico实现了对专用电源管理芯片的固件更新极大降低了开发和维护的门槛是一个非常值得嵌入式硬件开发者掌握的技巧。