嘉楠科技
直播中

凌章致

8年用户 1044经验值
私信 关注
[问答]

如何区分usb-typec是插入电脑还是插入其他电源?

使用的是01的板子,要做成在usb插入电脑时,使用uvc相机, usb插入电源时使用显示屏播放
如何判断设备是插入到电脑还是电源,是通过某个设备节点还是什么?
需要先运行./canaan-camera.sh start otg0这个脚本吗?
        默认情况下,K230 板以 USB Host 模式运行。当有 USB 设备插入 K230 的 USB Host 接口时,系统会打印相关信息。如果需要将 K230 配置为 USB Device,可以手动设置。例如,运行 /canaan-camera.sh start otg0 命令时,K230 会被配置为一个 USB 摄像头设备。
        

回帖(1)

任凭风吹

2025-4-29 17:56:43

根据需求,以下是区分USB连接类型并自动切换模式的解决方案:


1. 检测USB连接类型


通过USB角色或电源状态判断当前连接的是电脑(数据连接)还是电源(仅充电)。


方法一:使用USB角色切换




  • 确定USB角色节点

    检查是否存在 /sys/class/usb_role/ 下的节点,例如:


    cat /sys/class/usb_role/usb-role-switch/role

    若输出 device 表示作为USB设备(连接电脑),host 表示作为主机(连接电源或外设)。




  • 编写udev规则监控角色变化

    创建文件 /etc/udev/rules.d/99-usb-role.rules


    ACTION=="change", SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", RUN+="/path/to/detect_usb_mode.sh"

    然后编写脚本 detect_usb_mode.sh


    #!/bin/bash
    ROLE=$(cat /sys/class/usb_role/usb-role-switch/role)

    if [ "$ROLE" = "device" ]; then
      # 连接到电脑,启动UVC
      /canaan-camera.sh start otg0
    elif [ "$ROLE" = "host" ]; then
      # 检查是否仅充电(无数据设备)
      if [ $(cat /sys/class/power_supply/usb/online) -eq 1 ]; then
          # 启动显示屏播放
          echo "Starting display..."
      fi
    fi



方法二:检测电源与数据连接



  • 通过电源供应状态和USB设备列表

    使用 upower 或检查 /sys/class/power_supply/ 下的节点判断是否充电。同时检查是否有新USB设备接入:
    # 检查是否充电
    if grep -q "Charging" /sys/class/power_supply/battery/status; then
      # 进一步检查是否有数据设备
      if ! lsusb | grep -q "Device"; then
          # 仅充电,启动显示屏
      else
          # 数据连接,切换为Device模式
      fi
    fi


2. 模式切换与脚本执行




  • 手动切换模式

    连接到电脑时需运行脚本切换为Device模式:


    ./canaan-camera.sh start otg0  # 启动UVC摄像头

    断开后恢复Host模式可能需要运行:


    ./canaan-camera.sh stop otg0   # 停止UVC服务



  • 自动化建议

    创建systemd服务或使用cron监控USB状态,自动执行上述脚本。




3. 总结步骤



  1. 确定检测机制:优先使用USB角色节点(如 /sys/class/usb_role/)判断当前模式。

  2. 设置udev规则:在角色变化时触发检测脚本。

  3. 脚本逻辑:根据角色启动UVC或显示屏。

  4. 处理充电状态:结合电源供应状态避免误判。


注意事项



  • 确保内核支持USB角色切换,并确认相关sysfs路径。

  • 测试充电器插入时的系统反应,调整检测逻辑。

  • 可能需要配置OTG功能以支持自动切换模式。


通过上述方法,可以实现插入电脑时自动启用UVC摄像头,插入电源时使用显示屏播放。

举报

更多回帖

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