USB论坛
直播中

王兰

14年用户 1738经验值
擅长:基础元器件
私信 关注
[问答]

求助,关于以编程方式配置DiplayPort MODES UFP_D引脚配置响应的疑问求解

我想这个问题以前可能有人问过,但现在还是要问:
在 Host SDK 3.5(或更高版本)中,有什么最佳方法可以以编程方式覆盖 DP SINK / UFP 底座的 DisplayPort MODES 响应配置文件中存储的数据,从而以编程方式强制分配 C 针脚而不是 D 针脚?基本上,告诉连接的笔记本电脑要么设置 2 通道 DP / 2 通道 SS,要么设置 4 通道 DP。
我们希望对其进行动态控制,而不是基于静态的 PD 配置。
正在查看




在 vdm.c 中 我猜它用在两个地方,首先是发送到笔记本电脑的响应,然后是验证所请求的引脚分配是否正确。

回帖(1)

刘桂英

2025-5-28 17:38:53

在 Host SDK 3.5+ 中动态控制 DisplayPort 引脚分配,可通过以下步骤实现:



  1. 核心配置结构修改

    // 定位 dpm_modes 配置表(通常位于 dpm.c/vdm_dp.c)
    struct dpm_mode *dp_modes = get_dp_modes_ptr();


// 动态修改目标模式的引脚分配
for (int i = 0; i < num_dp_modes; i++) {
if (dp_modes[i].pin_assign & MODE_DP_PIN_C) {
dp_modes[i].flags |= DPM_MODE_ACTIVE; // 强制激活C引脚配置
dp_modes[i].priority = MAX_PRIORITY;  // 提升优先级
}
}



2. **协商流程干预**
```c
// 在 vdm_send_dp_configure() 前插入策略控制
void custom_configure_dp_mode(struct port *port) {
    if (dynamic_config_required()) { // 根据业务逻辑判断
        port->dp_mode.pin_assign = DP_PIN_ASSIGN_C;
        port->dp_config.num_lanes = target_lane_count; // 2或4通道
    }
    vdm_send_dp_configure(port); // 调用原函数
}


  1. 实时状态监控

    // 在 PD 状态机中注册回调(pd_engine.c)
    register_pd_state_callback(PE_VDM_DP_MODE_UPDATE, handle_dp_mode_update);


static void handle_dp_mode_update(struct port *port) {
if (port->data_role == UFP_D && port->dp_status.pin_assignment != DP_PIN_ASSIGN_C) {
trigger_soft_reset(port); // 强制重新协商
apply_custom_pin_config(port); // 应用新配置
}
}



4. **关键验证点**
```c
// 在 vdm_validate_dp_config() 中绕过默认检查
bool validate_dp_config(struct port *port, uint32_t config) {
    if (bypass_standard_validation) { // 动态标记位
        return check_custom_config(config); // 自定义验证逻辑
    }
    return original_validate(config); // 保留原逻辑
}

实施建议:



  1. 优先使用 dpm_set_mode_flags() API 动态切换模式激活状态

  2. 在 PE_VDM_DP_CONFIGURED 阶段注入自定义配置

  3. 通过 sysfs 或 debugfs 暴露控制接口实现动态切换:
    echo 2lane > /sys/class/udc//dp_config


注意事项:



  • 需处理 Type-C 电缆带宽能力协商(BW3/BW5)

  • 修改后需触发 FR_SWAP 或硬复位强制链路重训练

  • 部分平台需同步更新 LTTPR 配置

  • 建议配合 USB4 兼容性回退机制


可通过示波器捕获 CC 线 VDM 包验证配置是否生效,同时监控 DPCD 700h-7FFh 寄存器确认链路配置状态。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分