TUSB422 MCU 软件用户指南

文章目录

      • TUSB422 MCU 软件用户指南
    • 目录
    • 表格
    • 图表
    • 1. 介绍
    • 2. 配置
      • 2.1 通用配置
      • 2.2 USB-PD 3.0 支持
      • 2.3 VDM 支持
    • 3. 代码 ROM/RAM 大小优化
    • 4. 通过 UART 调试
    • 4. 移植到其他微控制器

TUSB422 MCU 软件用户指南

摘要

本文档是 TUSB422 微控制器基于 Type-C 端口控制(TCPC)和电源传输(PD)软件的用户指南。本指南旨在帮助用户进行软件的配置、调试和移植。


目录

  1. 介绍 … 3
  2. 配置 … 4
    • 2.1 通用配置 … 4
    • 2.2 USB-PD 3.0 支持 … 5
    • 2.3 VDM 支持 … 6
  3. 代码 ROM/RAM 大小优化 … 7
  4. 通过 UART 调试 … 7
    • 3.1 UART 命令 … 9
  5. 移植到其他微控制器 … 10

表格

表 1: UART 命令列表 … 9
表 2: 软件移植的文件和函数 … 10
表 3: 基于应用的并发定时器计数 … 10

图表

图 1: TUSB422 PD 软件架构 … 3
图 2: Windows 设备管理器中的 UART COM 端口 … 8


1. 介绍

TUSB422 基于 MCU 的软件原生支持 TI 的 MSP-EXP432P401R 和 MSP-EXP430FR5969 MCU LaunchPad 评估模块(EVM),并与 TUSB422 EVM 配合使用。该软件通过 I²C 控制 TUSB422,并通过 GPIO 控制 VBUS 的独立电源模块。有关如何将 EVM 与 LaunchPad 设置的详细信息,请参阅 TUSB422 EVM 用户指南。

该软件符合以下规范:

  • USB Type-C 端口控制器接口规范,Rev 1.0,Ver 1.1。
  • USB Type-C 电缆和连接器规范,Rev 1.2。
  • USB 电源传输规范,Rev 2.0,Ver 1.2。
  • USB 电源传输规范,Rev 3.0,Ver 1.0a。

软件架构如图 1 所示。源代码文件名与图中所示的模块对应,可以在“PDlib”和“hal”文件夹中找到。IAR Embedded Workbench 和 Code Composer Studio 的项目文件位于“/app/DRP”目录中。


2. 配置

2.1 通用配置

USB Type-C 和 USB PD 的配置可以在“/app/DRP/main.c”文件中设置。文件顶部提供了一个示例配置。

有关配置结构和有效值的信息,请参阅“PDlib/tusb422_common.h”。以下是可配置参数的描述。

USB Type-C 配置:

  • role: Type-C 角色:0 = SRC(源),1 = SNK(接收器),2 = DRP(双角色端口)。
  • rp_val: 源电流广告:0 = 默认,1 = 1.5A,2 = 3.0A。
  • flags: 选项标志:0 = 无,1 = Try.SRC,2 = Try.SNK。

USB PD 配置:

  • src_settling_time_ms: 电压转换后电源供应稳定的时间(以毫秒为单位,默认 50 ms)。
  • pdo_priority: 源 PDO 选择优先级:0 = 电压,1 = 电流,2 = 功率。
  • fast_role_swap_support: 快速角色交换(FRS)支持:0 = 不支持(默认),1 = 默认功率,2 = 1.5A,3 = 3.0A。TUSB422 的 WCSP 封装不支持 FRS,因为它没有直接控制 VBUS 的引脚。
  • num_src_pdos: 源 PDO 的数量 [0-6]。
  • num_snk_pdos: 接收器 PDO 的数量 [0-6]。
  • src_caps[]: 源 PDO 数组。
  • snk_caps[]: 接收器 PDO 数组。

USB PD 源 PDO 配置:

  • SupplyType: 电源类型:0 = 固定,1 = 电池,2 = 可变。
  • Peakl: 峰值电流:0 = 默认,1 = 110% 电流持续 10ms,2 = 125% 电流持续 10ms,3 = 150% 电流持续 10ms(仅适用于固定和可变类型)。
  • MinV: 最小电压(以 50 mV 为单位)。
  • MaxV: 最大电压(以 50 mV 为单位,仅适用于可变和电池类型)。
  • Maxl: 最大电流(以 10 mA 为单位,仅适用于固定和可变类型)。
  • MaxPower: 最大功率(以 250 mW 为单位,仅适用于电池类型)。

USB PD 接收器 PDO 配置:

  • SupplyType: 电源类型:0 = 固定,1 = 电池,2 = 可变。
  • MinV: 最小电压(以 50 mV 为单位)。
  • MaxV: 最大电压(以 50 mV 为单位,仅适用于可变和电池类型)。
  • MaxOperatingCurrent: 最大工作电流(以 10 mA 为单位,仅适用于固定和可变类型)。
  • MinOperatingCurrent: 最小工作电流(以 10 mA 为单位,仅适用于固定和可变类型)。
  • OperationalCurrent: 工作电流(以 10 mA 为单位,仅适用于固定和可变类型)。
  • MaxOperatingPower: 最大工作功率(以 250 mW 为单位,仅适用于电池类型)。
  • MinOperatingPower: 最小工作功率(以 250 mW 为单位,仅适用于电池类型)。
  • OperationalPower: 工作功率(以 250 mW 为单位,仅适用于电池类型)。

USB PD 配置(布尔标志):

  • usb_comm_capable: 接收器和/或源能够进行 USB 数据通信。
  • no_usb_suspend: 接收器请求在 USB 挂起期间继续其电源合同。
  • usb_suspend_supported: 源指示接收器应遵循 USB 2.0 或 USB 3.1 的挂起和恢复。
  • externally_powered: 源由外部供电。
  • dual_role_data: 端口支持双角色数据并支持 DR_Swap 消息。
  • higher_capability: 接收器需要超过 5V 的电压以提供完整功能。
  • giveback_flag: 接收器将响应 GotoMin 消息并将其负载减少到最小工作电流。
  • auto_accept_swap_to_dfp: 自动接受数据角色交换请求到主机。
  • auto_accept_swap_to_ufp: 自动接受数据角色交换请求到设备。
  • auto_accept_swap_to_source: 自动接受电源角色交换请求到源。
  • auto_accept_swap_to_sink: 自动接受电源角色交换请求到接收器。
  • auto_accept_vconn_swap: 自动接受 VCONN 交换请求,即使当前不是 VCONN 源。

2.2 USB-PD 3.0 支持

可以通过在“usb_pd_policy_engine.h”中取消注释以下宏来启用 USB-PD 3.0 支持:

#define ENABLE_USB_PD_REV3_SUPPORT

如果启用了 USB-PD 3.0,可以通过取消注释以下宏来启用扩展消息支持:

#define ENABLE_EXTENDED_MSG_SUPPORT

启用 USB-PD 3.0 支持会增加固件映像的大小,除非应用程序需要 USB-PD 3.0 功能,否则不建议启用。

2.3 VDM 支持

USB-PD 供应商定义消息(VDM)支持可以通过在“PDlib/usb_pd_policy_engine.h”中取消注释或注释以下定义来控制:

#define ENABLE_VDM_SUPPORT

如果启用了 VDM 支持,可以使用以下定义启用可选的替代模式支持:

#define ENABLE_DP_ALT_MODE_SUPPORT
#define ENABLE_HDMI_ALT_MODE_SUPPORT

如果启用了 VDM 支持,请确保在“/app/DRP/main.c”文件中为您的应用程序设置适当的 VDM 配置参数。

目前,支持的 SVID 数量限制为三个,并且每个 SVID 仅支持单一模式。

USB PD VDM 配置:

  • id_header_vdo: 32 位 ID 头 VDO,用于 Discover Identity 响应。
  • cert_stat_vdo: 32 位证书状态 VDO,用于 Discover Identity 响应。
  • product_vdo: 32 位产品 VDO,用于 Discover Identity 响应。
  • num_product_type_vdos: 产品类型 VDO 的数量 [0-3]。
  • product_type_vdos[0]: 第一个 32 位产品类型 VDO(如果适用)。
  • product_type_vdos[1]: 第二个 32 位产品类型 VDO(如果适用)。
  • product_type_vdos[2]: 第三个 32 位产品类型 VDO(如果适用)。
  • num_svids: 支持的 SVID 数量 [0-3]。
  • svids[0]: 第一个 16 位 SVID(如果适用)。
  • svids[1]: 第二个 16 位 SVID(如果适用)。
  • svids[2]: 第三个 16 位 SVID(如果适用)。
  • modes[0]: 第一个 SVID 的 32 位模式值(如果适用)。
  • modes[1]: 第二个 SVID 的 32 位模式值(如果适用)。
  • modes[2]: 第三个 SVID 的 32 位模式值(如果适用)。
  • multi_function_preferred: 对于支持 DisplayPort 替代模式的 UFP,布尔值表示对 USB SuperSpeed + 1 或 2 个 DisplayPort 通道的偏好。
  • ufp_alt_mode_entry_timeout_enable: UFP 替代模式进入超时启用。

当启用 VDM 支持时,端口将尝试对电缆插头进行 Discover Identity。如果端口支持模式操作(由 ID 头 VDO 指示),端口还将在显式合同协商后尝试对端口伙伴进行 Discover Identity。端口将响应 Discover Identity 请求。

支持 DisplayPort 和 HDMI 替代模式所需的 VDM 消息代码已包含在内。可以修改“PDlib/usb_pd_policy_engine.c”文件以添加对其他模式或供应商定义的 SVID 的支持。在源代码中搜索“[VDM]”以查看可以添加其他 SVID 和模式支持的位置。

目前,支持的 SVID 数量限制为三个,并且每个 SVID 仅支持单一模式。

要完成 DP 替代模式的平台集成,必须执行以下操作:修改 tusb422_common.c 中的 tcpm_mux_control() 以控制替代模式多路复用器。对于 DP 接收器,必须在 HPD-IN 更改时调用 usb_pd_policy_engine.c 中的 usb_pd_pe_hpd_in_event() 函数。并且应修改 timeout_alt_mode_entry() 以在 USB 接口上显示 billboard。对于 DP 源,应修改 tusb422_common.c 中的 tcpm_hpd_out_control() 函数以控制 DP 源的 HPD-OUT。


3. 代码 ROM/RAM 大小优化

使用默认项目设置时,TUSB422 软件启用了通过 MCU 的 UART 进行调试输出,并使用 RAM 中的大型循环缓冲区。为了最小化 ROM 和 RAM 使用,可以将编译器预处理器定义的符号更改为零(最低级别)以禁用所有 UART 调试:

DEBUG_LEVEL=0

项目的代码优化级别也可以从“高/平衡”更改为“高/大小”以进一步减小代码大小。


4. 通过 UART 调试

TUSB422 软件可以通过 MCU 的 UART 提供调试接口。UART 代码使用 RAM 缓冲区来帮助缓解代码执行速度的减慢,但过多的调试输出仍可能导致 USB-PD 时序违规。如果 USB-PD 合同协商或合规性测试失败,请尝试减少或禁用调试输出。

LaunchPad MCU EVM 通过其 micro-USB 连接支持 UART。要确定正确的 COM 端口号,请连接 LaunchPad EVM,打开设备管理器,并查找“XDS110 Class Application/User UART”。


4. 移植到其他微控制器

图 1 中的 TCPM HAL 块必须移植到其他微控制器上才能使用该软件。通常,必须实现以下功能:

  • I²C 主控(用于读取/写入 TUSB422 寄存器)。
  • 具有毫秒分辨率的定时器和 msleep() 函数。
  • 用于 VBUS 电源控制的 GPIO。
  • 用于调试输出的 UART(可选)。

表 2 提供了文件和函数列表,作为移植过程的起点,但可能并不完全包含所有内容。

文件名函数
PDlib/tcpci.c_tcpc_write() _tcpc_read() tcpc_write_block() tcpc_read_block()
hal/MSPxxx/tcpm_hal.ctcpm_hal_vbus_enable() tcpm_hal_vbus_disable()
hal/MSPxxx/timer.ctimer_start() timer_cancel() msleep()
hal/MSPxxx/uart_hal.cHAL_UART_TxByte()

表 2: 软件移植的文件和函数

timer_start() 函数应能够根据应用程序处理并发定时器。大多数应用程序只需要一个软件定时器,但 HDMI 和 DisplayPort 的替代模式适配器需要额外的定时器。如果指定了相同的定时器指针,timer_start() 函数应在重新启动之前取消任何现有的定时器。msleep() 函数不应取消任何正在运行的定时器。

应用程序可能的并发定时器数量
DisplayPort 替代模式适配器2
HDMI 替代模式适配器3
其他1(仅单个定时器)

表 3: 基于应用的并发定时器计数

PD 软件实现了 SMBus 库,以提供未来控制其他电源 IC 的灵活性,这些 IC 可能需要 SMBus 协议,但这并不是严格要求的,因为 TUSB422 仅使用 I²C。开发人员可以选择使用 I²C 或 SMBUS 来移植“PDlib/tcpci.c”文件。如果使用 I²C 而不是 SMBUS,则必须使用“PDlib/tcpm.c”中的替代 tcpm_read_message() 函数,并且还必须修改 tcpm_transmit() 函数。源代码中有注释以帮助进行此修改。


TUSB422 MCU 软件用户指南

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

json格式,curl命令,及轻量化处理工具

一. JSON格式 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于一个子集的JavaScript编程语言,使用人类易于阅读的文本格式来存储和表示数据。尽管名字中有“JavaScript”,但JSON是语言无关的,几…

echarts 3d中国地图飞行线

一、3D中国地图 1. 一定要使用 echarts 5.0及以上的版本; 2. echarts 5.0没有内置中国地图了。点击下载 china.json; 3. 一共使用了四层地图。 (1)第一层是中国地图各省细边框和展示南海诸岛; (2)第二层是…

从 0 开始本地部署 DeepSeek:详细步骤 + 避坑指南 + 构建可视化(安装在D盘)

个人主页:chian-ocean 前言: 随着人工智能技术的迅速发展,大语言模型在各个行业中得到了广泛应用。DeepSeek 作为一个新兴的 AI 公司,凭借其高效的 AI 模型和开源的优势,吸引了越来越多的开发者和企业关注。为了更好地…

[AI]Mac本地部署Deepseek R1模型 — — 保姆级教程

[AI]Mac本地部署DeepSeek R1模型 — — 保姆级教程 DeepSeek R1是中国AI初创公司深度求索(DeepSeek)推出大模型DeepSeek-R1。 作为一款开源模型,R1在数学、代码、自然语言推理等任务上的性能能够比肩OpenAI o1模型正式版,并采用MI…

Linux(socket网络编程)TCP连接

Linux(socket网络编程)TCP连接 基础文件目录函数系统进程控制函数fork()exec系列函数void abort(void)void assert(int expression)void exit(int status)void _exit(int status)int atexit(void (*func)(void))int on_exit(void (*function)(int,void*)…

408-数据结构

数据结构在学什么? 1.用代码把问题信息化 2.用计算机处理信息 ch1 数据:数据是信息的载体,是描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。数据是计算机程序加工的原料。 ch2 //假设线性表…

Go语言开发桌面应用基础框架(wails v3)-开箱即用框架

前言 本文是介绍如何集成好了Wails3开发框架以及提供视频教程,当你需要桌面开发时,直接下载我们基础框架代码,开箱即用不用配置开发需要依赖。 为什么使用v3版本,主要是v3新增的功能 ​支持多个窗口:在单个应用程序…

Git 与 Git常用命令

Git 是一个开源的分布式版本控制系统,广泛用于源代码管理。与传统的集中式版本控制系统不同,Git 允许每个开发者在本地拥有完整的代码库副本,支持离线工作和高效的分支管理。每次提交时,Git 会对当前项目的所有文件创建一个快照&a…

尚硅谷爬虫note004

一、urllib库 1. python自带,无需安装 # _*_ coding : utf-8 _*_ # Time : 2025/2/11 09:39 # Author : 20250206-里奥 # File : demo14_urllib # Project : PythonProject10-14#导入urllib.request import urllib.request#使用urllib获取百度首页源码 #1.定义一…

老WinForm中一个执行文件使用SQLite数据库

EF6在老WinForm中停止更新了,但如果只是在win10上面使用,老的.net Framework 4.8框架有一个优势,编译后的执行文件很小。还有一些老类库也只能在老的.net Framework 4.8框架使用,所以微软还是保留了老的.net Framework 4.8框架。 …

diff算法简析

diff算法的核心目的是用最少的步骤找出新旧节点的差异,从而更新视图。 diff算法是一种通过同层的树节点进行比较的高效算法,探讨的是虚拟DOM树发生变化后,生成DOM树更新补丁的方式。对比新旧两株虚拟DOM树的差异,将更新补丁作用于…

19.3 连接数据库

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 ​​​​​​​需要北风数据库的请留言自己的信箱。 连接数据库使用OleDbConnection(数据连接)类&#xff…

Redis实现分布式锁

一、使用分布式锁的背景是什么 1、如果你公司的业务,各个应用都只部署了一台机器,那么完全用不着分布式锁,直接使用Java的锁即可 2、可是当你们的业务量大,多台机器并发情况下争夺一个资源的时候,就必须要保证业务的…

变化检测相关论文可读list

一些用得上的: 遥感变化检测常见数据集https://github.com/rsdler/Remote-Sensing-Change-Detection-Dataset/ 代码解读:代码解读 | 极简代码遥感语义分割,结合GDAL从零实现,以U-Net和建筑物提取为例 对本list的说明:…

docker 逃逸突破边界

免责声明 本博客文章仅供教育和研究目的使用。本文中提到的所有信息和技术均基于公开来源和合法获取的知识。本文不鼓励或支持任何非法活动,包括但不限于未经授权访问计算机系统、网络或数据。 作者对于读者使用本文中的信息所导致的任何直接或间接后果不承担任何…

cv2.Sobel

1. Sobel 算子简介 Sobel 算子是一种 边缘检测算子,通过对图像做梯度计算,可以突出边缘。 Sobel X 方向卷积核: 用于计算 水平方向(x 方向) 的梯度。 2. 输入图像示例 假设我们有一个 55 的灰度图像,像素…

网络编程 day3

思维导图 以select函数模型为例 思维导图2 对应 epoll模型 应使用的函数 题目 使用epoll函数实现 两个客户端 通过服务器 实现聊天 思路 在原先代码基础上 实现 服务器 发向 客户端 使用客户端在服务器上的 套接字描述符 实现 客户端 接收 服务器…

Java 同步锁性能的最佳实践:从理论到实践的完整指南

目录 一、同步锁性能分析 (一)性能验证说明 1. 使用同步锁的代码示例 2. 不使用同步锁的代码示例 3. 结果与讨论 (二)案例初步优化分析说明 1. 使用AtomicInteger原子类尝试优化分析 2. 对AtomicInteger原子类进一步优化 …

Mac之JDK安装

Mac之JDK安装 一.安装 jdk 打开终端输入命令:java -version 查看是否已安装 JDK Oracle 官方下载地址 根据自己Mac 系统安装 查看 Mac 系统,打开中断命令,输入: uname -a Compressed Archive 是压缩文档,下载的是一个 .tar.gz 压缩包 D…

[MySQL]5-MySQL扩展(分片)

随着数据量和用户量增加,MySQL会有读写负载限制。以下是部分解决方案 目录 功能拆分 使用读池拓展读(较复杂) 排队机制 🌟分片拓展写 按业务或职责划分节点或集群 大数据集切分 分片键的选择 多个分片键 跨分片查询 资料…