You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Zephyr OS下树莓派Pico同时启用CDC-ACM UART与I2C故障求助

问题描述

在Zephyr OS环境下为树莓派Pico启用CDC-ACM USB虚拟串口与I2C功能,尝试将BME680传感器数据通过虚拟串口输出到终端。单独启用USB虚拟串口时功能正常,但添加I2C0配置后虚拟串口失效。

使用的设备树overlay代码:

/ {
   chosen {
   zephyr,console = &usb_cdc;
   };
};
&zephyr_udc0 {
   usb_cdc: usb_cdc_0 {
   compatible = "zephyr,cdc-acm-uart";
   };
};
&i2c0 {
   status = "okay";
   bme680: bme680@77 {
      compatible = "bosch,bme680";
      label = "BME680";
      reg = <0x77>;
   };
};

对应的.conf配置文件:

# Enable USB stack
CONFIG_USB_DEVICE_STACK=y

# Enable USB Initialize at boot
CONFIG_USB_DEVICE_INITIALIZE_AT_BOOT=y

# USB device descriptors
CONFIG_USB_DEVICE_VID=0x2e8a
CONFIG_USB_DEVICE_PID=0x000a
CONFIG_USB_DEVICE_PRODUCT="Pico"
CONFIG_USB_DEVICE_MANUFACTURER="Raspberry Pi"

# Set to "n" for bus-powered devices (powered from the USB host) like the Raspberry Pi Pico.
# Set to "y" for self-powered devices (powered from an external power supply) like PicoDRO hardware.
CONFIG_USB_SELF_POWERED=n

CONFIG_I2C=y
CONFIG_SENSOR=y
问题分析与解决

以下是可能的问题点及对应解决方案:

  • 缺失CDC-ACM核心配置
    你的.conf文件未启用CDC-USB虚拟串口的核心配置项CONFIG_USB_CDC_ACM=y,仅开启USB_DEVICE_STACK不足以驱动CDC-ACM功能。单独测试时可能误启用了硬件UART而非USB CDC,添加I2C配置后系统初始化流程变化,暴露了这一配置缺失。需在.conf中添加该配置项。

  • 传感器初始化阻塞系统
    如果BME680硬件接线错误(如I2C引脚接反、地址不匹配、传感器未供电),系统启动时会持续尝试初始化传感器,导致USB CDC的初始化流程被阻塞。可以先注释掉设备树中的bme680节点,仅保留&i2c0 { status = "okay"; };,验证USB CDC是否恢复正常,以此确认是否为传感器初始化导致的问题。

  • 设备树节点配置优化
    为USB CDC节点补充必要属性,确保与Zephyr驱动正确绑定,可添加current-speed属性明确串口波特率:

    &zephyr_udc0 {
       usb_cdc: usb_cdc_0 {
          compatible = "zephyr,cdc-acm-uart";
          current-speed = <115200>;
       };
    };
    
  • 引脚冲突排查
    树莓派Pico的I2C0默认引脚为GPIO4(SDA)、GPIO5(SCL),USB CDC使用GPIO24(D-)、GPIO25(D+),理论上无硬件引脚冲突。若你自定义了I2C引脚,需核对设备树中是否配置了正确的pinctrl节点,避免与USB引脚交叉占用。

修正后配置示例

修正后的.conf文件

# Enable USB stack
CONFIG_USB_DEVICE_STACK=y
# Enable CDC-ACM core functionality
CONFIG_USB_CDC_ACM=y

# Enable USB Initialize at boot
CONFIG_USB_DEVICE_INITIALIZE_AT_BOOT=y

# USB device descriptors
CONFIG_USB_DEVICE_VID=0x2e8a
CONFIG_USB_DEVICE_PID=0x000a
CONFIG_USB_DEVICE_PRODUCT="Pico"
CONFIG_USB_DEVICE_MANUFACTURER="Raspberry Pi"

CONFIG_USB_SELF_POWERED=n

CONFIG_I2C=y
CONFIG_SENSOR=y

修正后的设备树overlay

/ {
   chosen {
      zephyr,console = &usb_cdc;
   };
};

&zephyr_udc0 {
   usb_cdc: usb_cdc_0 {
      compatible = "zephyr,cdc-acm-uart";
      current-speed = <115200>;
   };
};

&i2c0 {
   status = "okay";
   /* 先注释传感器节点验证USB功能,确认正常后再恢复 */
   /*
   bme680: bme680@77 {
      compatible = "bosch,bme680";
      label = "BME680";
      reg = <0x77>;
   };
   */
};

内容的提问来源于stack exchange,提问作者e0ne199

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 02:30:58