type c 主从协商

USB Type-C的插座中有两个CC脚,角色检测都是通过CC脚进行的,但是对于插头或者线缆正常只有一个CC引脚,两个端口连接在一起之后,只存在一个CC引脚连接,通过检测哪一个CC有连接,就可以判断连接的方向。如果USB线缆中有需供电的器件,其中一个CC引脚将作为VCONN供电。

第一阶段

主要通过 CC 引脚的电阻配置和电平变化完成设备识别与基础参数确认,具体可分为以下几个关键步骤:

1. 物理连接检测(Detection)

  • 硬件基础:Type-C 接口的两端(如主机和设备)分别在 CC 引脚上配置了特定电阻:
    • Source(供电方,如充电器 / 电脑):在 CC 引脚上串联 Rp 电阻(通常为 56kΩ),并通过 Rp 提供约 0.5V 的基准电压。
    • Sink(受电方,如手机 / 耳机):在 CC 引脚上并联 Rd 电阻(通常为 10kΩ)。
  • 检测逻辑:
    • 当设备插入时,Source 的 CC 引脚通过 Rp 输出电压,若 Sink 的 Rd 电阻接入,会将 CC 引脚电压拉低(从 0.5V 降至约 0.3V)。
    • Source 通过检测 CC 引脚的电压变化,确认有 Sink 设备接入;反之,Sink 也通过检测电压变化确认连接建立。

2. 方向识别(Orientation Detection)

  • 硬件设计:Type-C 接口有两个 CC 引脚(CC1 和 CC2),但插头插入时只会导通其中一个(由插入方向决定)。
  • 识别过程:
    • Source 同时监测 CC1 和 CC2 的电压:若只有 CC1 被拉低,说明是正向插入;若只有 CC2 被拉低,说明是反向插入。
    • 系统根据导通的 CC 引脚确定数据引脚的映射关系(正反插时数据引脚会镜像切换),确保信号传输正确。

3. 初始角色与供电能力确认

  • 电源角色确定:
    • 通过 Rp(Source)和 Rd(Sink)的电阻配置,双方默认确定初始角色:带 Rp 的为供电方,带 Rd 的为受电方。
  • 默认供电能力协商:
    • Source 通过 Rp 的阻值细分(如 Rp1/Rp2/Rp3)告知默认供电电流(如 5V/0.5A、5V/1.5A、5V/3A)。
    • Sink 通过 Rd 检测这些电流能力,并根据自身需求选择合适的供电档位(默认从最低电流开始)。

4. 线缆特性识别(Cable Identification)

  • 若连接中使用 Type-C 线缆,线缆内部的 E-Marker 芯片(若有)会通过 CC 引脚传递信息:
    • 线缆类型(如 USB 2.0/3.2/4.0、是否支持雷电)。
    • 最大电流承载能力(如 3A、5A)。
    • 是否支持 USB PD 协议等。
  • 若无线缆或线缆无 E-Marker,则默认按基础规格(如 USB 2.0、3A 电流)工作。

数据角色确定

第一阶段确定的电源角色(Source/Sink)会默认关联数据角色:
  • 通常情况下,电源角色为 Source(供电方)的设备(如电脑、充电器)会默认作为数据 Host(主机);
  • 电源角色为 Sink(受电方)的设备(如手机、U 盘)会默认作为数据 Device(从设备)。
这种关联是一种 "默认约定",而非通过 CC 引脚明确协商的结果。

两端设备在 CC 引脚上都串联了 Rp 电阻

在 USB Type-C 连接的第一阶段,如果两端设备在 CC 引脚上都串联了 Rp 电阻(理论上可能出现,比如两个支持双角色的设备连接时),系统会通过 **"角色协商"(Role Negotiation)机制 ** 来确定最终的 Source(供电方)和 Sink(受电方),具体逻辑如下:

1. 为什么会出现两端都有 Rp 电阻?

Rp 电阻是 Type-C 设备支持 "双角色"(Dual Role Port,DRP)的标志。DRP 设备(如现代手机、笔记本电脑)可以动态切换电源角色(既可以做 Source 供电,也可以做 Sink 受电),因此会在 CC 引脚上配置 Rp 电阻,同时具备检测和切换角色的能力。
当两个 DRP 设备(都带 Rp)连接时,就会出现两端 CC 引脚都有 Rp 电阻的情况。

2. 角色协商的核心逻辑

此时,双方会通过 **"试探 - 响应" 机制 ** 确定最终角色,过程如下:
  • 初始状态:两端均以 "默认 Sink" 模式监听 CC 引脚(暂时将自己视为受电方)。
  • 试探阶段:
    1. 设备 A 先主动切换为 Source 模式(通过 Rp 输出电压),同时监测 CC 引脚电压。
    2. 设备 B 此时仍为 Sink 模式(通过 Rd 电阻检测),若检测到 CC 引脚有电压输入,会保持 Sink 角色。
    3. 设备 A 检测到 CC 引脚电压被拉低(因设备 B 的 Rd),确认自己作为 Source。
  • 确认阶段:
    • 若双方都短暂切换为 Source 试探,最终会通过时序优先级(谁先完成试探并检测到对方的 Sink 状态)确定角色。
    • 一旦一方确定为 Source,另一方会自动保持 Sink 角色,避免冲突。

 

第二阶段 - PD协商

第一阶段(基于 CC 引脚的物理层协商)完成后,USB Type-C 设备会进入更复杂的协议层协商阶段,主要围绕电源扩展、数据角色切换和功能模式选择展开,核心依赖USB PD(Power Delivery)协议和USB 基础协议栈,具体流程如下:

1. USB PD 协议协商(电源与角色扩展)

PD 协商是通过 CC 引脚进行双向半双工通信(BMC 编码)

如果双方支持 PD 协议(通过第一阶段检测到 E-Marker 线缆或设备自身能力),会启动 PD 协商,主要解决:
  • 扩展供电能力:
    突破默认 5V 电压限制,协商更高电压(如 9V/12V/20V)和电流(如 3A/5A/10A)。过程是:

1. P首先发起PD协商,向C发送P具有的Power能力的消息,也就是P支持哪些功率类型

2. C收到P发送的Power能力的消息后,分析P的Power能力并选择其中一个Power配置发送给P

3. P收到C请求的power配置,决定是否接受这个请求

4. 切换到C请求的Power配置并通知C

  • 动态角色切换:
    包括电源角色切换(PR Swap) 和数据角色切换(DR Swap):
    1. 一方发送切换请求(如手机请求从 Sink 变为 Source 给耳机供电)。
    2. 双方交换状态确认消息,同步切换时序。
    3. 完成角色反转(如原供电方停止输出,原受电方开始供电)。

2. 数据传输模式协商

根据设备类型和线缆能力,协商具体的数据传输协议:
  • 基础 USB 协议:
    若为普通数据传输(如 U 盘、手机连接电脑),通过 USB 2.0/3.x/4.0 协议栈协商:
    • 确认数据速率(如 USB 3.2 的 10Gbps、USB4 的 40Gbps)。
    • 建立端点(Endpoint)和传输管道(Pipe),确定数据传输方向(如控制传输、批量传输)。
  • 替代模式(Alternate Modes):
    若支持视频、音频等扩展功能(如雷电 3/4、DisplayPort):
    1. 一方通过 PD 消息宣告支持的替代模式(如 "支持 DisplayPort 输出")。
    2. 双方协商选择模式后,Type-C 引脚会重新映射为对应协议的信号引脚(如将 USB 数据引脚切换为 DP 视频信号引脚)。
    3. 启动对应协议栈(如 DP 协议),实现视频输出等功能。

3. 协商结果的维护与调整

    • 实时监测:PD 协议会定期发送 "心跳消息"(GoodCRC)确认连接状态。
    • 动态调整:若受电方需求变化(如手机充电到 80% 后降低电流),可重新发起协商请求。
    • 异常处理:若协商失败或连接中断,会回退到第一阶段的默认状态(如 5V 供电、基础 USB 模式)。

 

 

echo host > /sys/class/typec/port0/data_role

echo device > /sys/class/typec/port0/data_role

cat /sys/class/typec/port0/data_role

echo source > /sys/class/typec/port0/power_role

echo sink > /sys/class/typec/port0/power_role

cat /sys/class/typec/port0/power_role

 

echo host > /sys/class/typec/port0/data_role

rmmod usb_f_acm

/app/scripts/usb_switch_host

modprobe aoa

ip addr add 192.168.1.1/24 dev aoa0

ip link set aoa0 up
 
 
 
posted @ 2025-09-05 16:55  流水灯  阅读(48)  评论(0)    收藏  举报