ST意法半导体
直播中

李芳

7年用户 1441经验值
私信 关注
[问答]

如何在两个电缆方向检测USB Type-C电缆连接/断开事件?

在此线程中获得设置基本 USB-C 接收器应用程序的帮助后,我可以通过通过 ST USBPD API 安装的相关回调成功检测电缆连接/分离事件——但仅针对单个电缆方向。反转 Type-C 插头时不会触发 UCPD1 中断。
为了验证这不是与我的(所有)USB-C 电缆或 Type-C 分线接口相关的问题,我交换了将 Type-C 母插座连接到 MCU 的 CC1/CC2 GPIO 引脚的 CC1/CC2 线。这确保了 Type-C 分线器上的 CC1 和 CC2 都可以正常工作。因此,我认为问题必须与 MCU 上的一个 CC GPIO 接口隔离开来。我画了一张图来说明:

因此,当 USB-C 电缆中的 CC 线连接到 UCPD_CC2 GPIO 引脚时,无论在 Type-C breakout 上使用了哪条 CC 线,系统都无法检测到连接。
我应该在哪里寻找找出为什么只检测到一个方向?





回帖(1)

庄雪昕

2023-2-1 11:05:32
我认为这是一个已知问题:必须将与 CC2 线对应的 GPIO 设置为模拟模式。
你能检查文件 usbpd_cad_hw_if.c 吗?
代替 :


  • #if defined(MB1397) /* in case of eval G4 */
  •   /* Not needed on MB1397 */
  • #elif defined (USE_UNIBOARD) || defined(MB1428) || defined(MB1367) /* in case of Nucleo G4 */
  •   LL_GPIO_SetPinMode(GPIOB, LL_GPIO_PIN_4, LL_GPIO_MODE_ANALOG); /* PB4 mode = GP analog => CC2 */
  • #else
  •   LL_GPIO_SetPinMode(GPIOB, LL_GPIO_PIN_4, LL_GPIO_MODE_OUTPUT); /* PB4 mode = GP output => CC2 */
  • #endif

经过 :


  • /* Set by default UCPD1_CC1 & UCPD1_CC2 in analog mode */
  •   LL_GPIO_SetPinMode(GPIOB, LL_GPIO_PIN_6, LL_GPIO_MODE_ANALOG); /* PB6 mode = GP analog => CC1 */
  •   LL_GPIO_SetPinMode(GPIOB, LL_GPIO_PIN_4, LL_GPIO_MODE_ANALOG); /* PB4 mode = GP analog => CC2 */

  •   LL_GPIO_SetPinPull(GPIOB, LL_GPIO_PIN_6, LL_GPIO_PULL_NO);
举报

更多回帖

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