嵌入式 Linux 下 MCP2221 USB 转 UART 芯片的设备树配置与驱动移植
建议使用内核 ≥5.6 以获取完整支持。若需 I²C/GPIO 功能,需额外调用。USB 子系统会自动枚举设备。由于 MCP2221 是 USB 设备,
·
嵌入式 Linux 下 MCP2221 USB 转 UART 芯片的设备树配置与驱动移植
1. 驱动支持确认
- MCP2221 的 Linux 驱动已集成到内核主线(从 v5.6 开始支持)
- 检查内核配置选项:
若使用旧内核(<5.6),需手动移植驱动(源码路径:Device Drivers ---> USB support ---> USB Serial Converter support ---> <*> Microchip MCP2221 USB-I2C/SMbus bridgedrivers/usb/serial/mcp2221.c)
2. 设备树配置
由于 MCP2221 是 USB 设备,无需额外设备树节点。USB 子系统会自动枚举设备。但需确保:
- USB 主机控制器已启用(如 DWC2)
- 示例 USB 主机控制器配置:
&usb_otg { status = "okay"; dr_mode = "host"; }; &usbphy { status = "okay"; };
3. 驱动移植步骤(旧内核)
- 获取驱动源码:
wget https://raw.githubusercontent.com/torvalds/linux/v5.6/drivers/usb/serial/mcp2221.c - 集成到内核:
- 复制到
drivers/usb/serial/ - 修改
drivers/usb/serial/Kconfig:config USB_SERIAL_MCP2221 tristate "Microchip MCP2221 support" depends on USB_SERIAL help Say Y here to support MCP2221 USB-to-UART/I2C/GPIO converter - 修改
drivers/usb/serial/Makefile:obj-$(CONFIG_USB_SERIAL_MCP2221) += mcp2221.o
- 复制到
- 编译与加载:
make menuconfig # 启用 USB_SERIAL_MCP2221 make modules insmod mcp2221.ko
4. 功能验证
- 连接设备后查看内核日志:
dmesg | grep mcp2221 # 输出示例: usb 1-1.2: mcp2221 converter detected - 确认设备节点:
ls /dev/ttyACM* # 通常注册为 /dev/ttyACM0 - 测试串口通信:
echo "test" > /dev/ttyACM0 minicom -D /dev/ttyACM0
5. 关键注意事项
- 权限问题:
sudo chmod 666 /dev/ttyACM0 # 临时方案 # 永久方案:创建 udev 规则 /etc/udev/rules.d/99-mcp2221.rules: SUBSYSTEM=="tty", ATTRS{idVendor}=="04d8", ATTRS{idProduct}=="00dd", MODE="0666" - 波特率限制:
- 最大支持 2 Mbps(需硬件支持)
- 设置波特率示例:
struct termios options; cfsetispeed(&options, B2000000); // 2Mbps
- 电源管理: 在设备树中禁用 USB 自动挂起:
&usb_otg { disable-usb-suspend; };
6. 故障排查
- 设备未识别:
lsusb -d 04d8:00dd # 检查设备ID - 驱动加载失败:
dmesg | grep "usbserial" # 检查依赖模块 modprobe usbserial vendor=0x04d8 product=0x00dd - 通信异常:
- 检查硬件连接(D+/D- 阻抗匹配)
- 降低波特率测试(如 115200)
提示:建议使用内核 ≥5.6 以获取完整支持。若需 I²C/GPIO 功能,需额外调用
libmcp2221用户空间库。
更多推荐


所有评论(0)