Raspberry Pi 5 hits "cp210x: failed set request 0x12 status: -110" while OTBR-Agent fails with "radio tx timeout"
维护者通常 1 天内回复
还没有人认领这个 Issue。
评估
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 新手友好度
- 43/100
- Issue 类型
- 缺陷
- 描述清晰度
- 基本清楚
- 活跃度
- 活跃
- 技术栈
- c, linux, raspberry-pi
调研方向
The report identifies the cp210x driver and the failing CP210X_PURGE request, but names no kernel source file or test. Start by checking the Raspberry Pi kernel version and the cp210x driver path against the reported -110 control-transfer errors; the report includes uname -a, lsusb -t, and dmesg output. Done means identifying whether the driver or USB host path explains the timeouts and the resulting OTBR radio failure.
由索引模型根据 Issue 内容生成。
描述
Describe the bug
I am running a Raspberry Pi 5 with two separate CP2102N-based USB dongles (10c4:ea60):
- SONOFF Dongle Plus MG24 (
ttyUSB0on Bus 003) used for Thread networking via OpenThread Border Router (otbr-agent). - ITead Sonoff Zigbee 3.0 USB Dongle Plus (
ttyUSB1on Bus 001) used for Zigbee networking in Home Assistant (ZHA).
Both dongles are connected via USB extension cables to the physical black USB 2.0 ports and placed at an elevated position. Furthermore, both Docker containers run unprivileged and only have their respective /dev/serial/by-id/... device passed through.
The Problem:
The Thread dongle (ttyUSB0) crashes on a regular basis (often after ~1 hour of uptime, even while idle) with radio tx timeout in otbr-agent, causing delays with Thread devices (e.g., IKEA switches) and making OTA updates almost impossible.
At the same time, the kernel logs cp210x ttyUSB0: failed set request 0x12 status: -110 (CP210X_PURGE timeout). Notably, dmesg shows that the Zigbee dongle (ttyUSB1) on the other USB controller also hits cp210x ttyUSB1: failed set request 0x12 status: -110.
I already tested multiple RCP firmwares on the MG24 dongle (official Sonoff 2.4.4 @ 460800 baud and 2.5.3.0 / simplicity_sdk:2024.6.3 @ 460800 baud without flow control from darkxst/silabs-firmware-builder) as well as adding &uart-init-deassert&uart-exclusive to the Radio URL, without resolving the crashes.
Steps to reproduce the behaviour
- Setup Environment:
- Use a Raspberry Pi 5 running a recent Raspberry Pi OS / Debian kernel (e.g.,
6.18.60-rpt-rpi-2712). - Connect two CP2102N-based USB dongles (e.g., SONOFF Dongle Plus / Sonoff Zigbee 3.0 USB Dongle Plus) to the physical black USB 2.0 ports (separate RP1 xHCI root hubs,
Bus 001andBus 003). - Route both dongles via USB extension cables to ensure stable physical link conditions.
- Run Services:
- Run two independent Docker containers (or native background services) that continuously communicate with the serial ports over
cp210x(e.g.,otbr-agentfor OpenThread / Matter onttyUSB0and a ZHA/Zigbee2MQTT container onttyUSB1). - Configure the OpenThread container to use an explicit baudrate (e.g.,
460800) and initialize parameters (&uart-init-deassert&uart-exclusive).
- Trigger / Observe:
- Let the system run idle or under normal smart home load (processing Thread/Zigbee packets).
- After a variable period of uptime (typically ranging from several minutes to ~1 hour), observe the kernel ring buffer (
dmesg). - The kernel will throw recurrent
-110timeouts (-ETIMEDOUT) during control transfers (failed set request 0x12 status: -110, corresponding toCP210X_PURGE), eventually causing the OpenThread stack to crash with aradio tx timeout.
Device (s)
Raspberry Pi 5
System
Logs
OTBR Container Logs (docker logs ha_otbr):
s6-rc: info: service otbr-web: starting
s6-rc: info: service s6rc-oneshot-runner: starting
s6-rc: info: service otbr-web successfully started
Starting otbr-web...
[INFO]-WEB-----: Running 0.3.0-76fb21d
[INFO]-WEB-----: Border router web started on wpan0
[ERR ]-WEB-----: OpenThread daemon is not running.
s6-rc: info: service s6rc-oneshot-runner successfully started
s6-rc: info: service fix-attrs: starting
s6-rc: info: service fix-attrs successfully started
s6-rc: info: service legacy-cont-init: starting
s6-rc: info: service legacy-cont-init successfully started
s6-rc: info: service otbr-agent: starting
Configuring OpenThread firewall...
Configuring OpenThread NAT64...
Starting otbr-agent...
00:00:00.000 [C] P-RadioSpinel-: RCP => [C] Platform------: Reset info: 0x4 (PWR)
00:00:00.000 [C] P-RadioSpinel-: RCP => [C] Platform------: Extended Reset info: 0x401 (HV )
[WARN]-UTILS---: /usr/src/ot-br-posix/src/rest/network_diag_handler.cpp:1322 lacking some attributes for deviceId 7e529ac01c58368e
[WARN]-UTILS---: /usr/src/ot-br-posix/src/rest/network_diag_handler.cpp:1266 cannot get LeaderData while detached
[WARN]-UTILS---: /usr/src/ot-br-posix/src/rest/rest_devices_coll.cpp:232 - AddItem - 7e529ac01c58368e
00:00:00.223 [W] Mle-----------: Failed to process Link Accept - Security
s6-rc: info: service otbr-agent successfully started
s6-rc: info: service legacy-services: starting
s6-rc: info: service legacy-services successfully started
00:00:00.488 [W] Mle-----------: Failed to process Link Accept - Security
00:00:00.553 [W] Mle-----------: Failed to process Link Accept - Security
00:00:00.683 [W] Mle-----------: Failed to process Link Accept - Security
00:00:00.705 [W] Mle-----------: Failed to process Link Accept - Security
00:00:00.782 [W] Mle-----------: Failed to process Link Accept - Security
00:00:00.874 [W] Mle-----------: Failed to process Link Accept - Security
00:00:00.914 [W] Mle-----------: Failed to process Link Accept - Security
00:00:01.056 [W] Mle-----------: Failed to process Link Accept - Security
01:06:15.018 [W] P-RadioSpinel-: radio tx timeout
01:06:15.022 [C] P-RadioSpinel-: Failed to communicate with RCP - no response from RCP during initialization
01:06:15.022 [C] P-RadioSpinel-: This is not a bug and typically due a config error (wrong URL parameters) or bad RCP image:
01:06:15.022 [C] P-RadioSpinel-: - Make sure RCP is running the correct firmware
01:06:15.022 [C] P-RadioSpinel-: - Double check the config parameters passed as `RadioURL` input
01:06:15.022 [C] Platform------: HandleRcpTimeout() at radio_spinel.cpp:2102: RadioSpinelNoResponse
otbr-agent exited with code 6 (by signal 0).
otbr-ingress-deny-src
otbr-ingress-deny-src-swap
otbr-ingress-allow-dst
otbr-ingress-allow-dst-swap
OpenThread firewall rules removed.
s6-rc: info: service legacy-services: stopping
s6-rc: info: service legacy-services successfully stopped
s6-rc: info: service otbr-web: stopping
s6-rc: info: service otbr-agent: stopping
[CRIT]-WEB-----: Stopping web server
otbr-web ended with exit code 0 (signal 0).
s6-rc: info: service otbr-agent successfully stopped
s6-rc: info: service legacy-cont-init: stopping
s6-rc: info: service otbr-web successfully stopped
s6-rc: info: service legacy-cont-init successfully stopped
s6-rc: info: service fix-attrs: stopping
s6-rc: info: service fix-attrs successfully stopped
s6-rc: info: service s6rc-oneshot-runner: stopping
s6-rc: info: service s6rc-oneshot-runner successfully stopped
Kernel Logs (dmesg -T | grep -i cp210x):
[Fri Nov 6 12:17:25 2026] usbcore: registered new interface driver cp210x
[Fri Nov 6 12:17:25 2026] usbserial: USB Serial support registered for cp210x
[Fri Nov 6 12:17:25 2026] cp210x 3-2:1.0: cp210x converter detected
[Fri Nov 6 12:17:25 2026] usb 3-2: cp210x converter now attached to ttyUSB0
[Fri Nov 6 12:17:25 2026] cp210x 1-2:1.0: cp210x converter detected
[Fri Nov 6 12:17:25 2026] usb 1-2: cp210x converter now attached to ttyUSB1
[Fri Nov 6 12:18:21 2026] cp210x ttyUSB0: failed set request 0x12 status: -110
[Fri Nov 6 12:27:05 2026] cp210x ttyUSB0: failed set request 0x12 status: -110
[Fri Nov 6 12:27:23 2026] cp210x ttyUSB0: failed set request 0x12 status: -110
[Fri Nov 6 12:35:56 2026] cp210x ttyUSB1: failed set request 0x12 status: -110
[Fri Nov 6 12:44:05 2026] cp210x ttyUSB1: failed set request 0x12 status: -110
[Fri Nov 6 12:44:52 2026] cp210x ttyUSB0: failed set request 0x12 status: -110
[Fri Nov 6 13:17:22 2026] cp210x ttyUSB0: failed set request 0x12 status: -110
[Fri Nov 6 14:17:33 2026] cp210x ttyUSB0: failed set request 0x12 status: -110
[Fri Nov 6 14:17:48 2026] cp210x ttyUSB0: failed set request 0x12 status: -110
[Fri Nov 6 14:34:29 2026] cp210x ttyUSB0: failed set request 0x12 status: -110
[Fri Nov 6 15:40:53 2026] cp210x ttyUSB0: failed set request 0x12 status: -110
Additional context
Configuration (docker-compose.yml)
services:
ha:
image: "homeassistant/home-assistant:2026.11.0"
container_name: "ha"
restart: "unless-stopped"
stop_grace_period: 60s
network_mode: host
cap_add:
- NET_ADMIN
- NET_RAW
environment:
TZ: "Europe/Vienna"
volumes:
- /opt/docker/ha/config:/config
- /opt/docker/ha/data/media:/media
- /etc/localtime:/etc/localtime:ro
- /run/dbus:/run/dbus:ro
devices:
- /dev/serial/by-id/usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_c617ad1d049eef11b37ad9a661ce3355-if00-port0:/dev/serial/by-id/usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_c617ad1d049eef11b37ad9a661ce3355-if00-port0
ha_otbr:
image: "openthread/border-router:v2026.11.0"
container_name: "ha_otbr"
restart: "unless-stopped"
network_mode: host
cap_add:
- NET_ADMIN
environment:
TZ: "Europe/Vienna"
OT_RCP_DEVICE: "spinel+hdlc+uart:///dev/serial/by-id/usb-SONOFF_SONOFF_Dongle_Plus_MG24_502346d7e4a2ef1195398e6661ce3355-if00-port0?uart-baudrate=460800&uart-init-deassert&uart-exclusive"
OT_INFRA_IF: "eth0"
OT_THREAD_IF: "wpan0"
OT_LOG_LEVEL: "4"
OT_REST_LISTEN_PORT: "8081"
volumes:
- /opt/docker/ha/data/otbr:/data
devices:
- /dev/serial/by-id/usb-SONOFF_SONOFF_Dongle_Plus_MG24_502346d7e4a2ef1195398e6661ce3355-if00-port0:/dev/serial/by-id/usb-SONOFF_SONOFF_Dongle_Plus_MG24_502346d7e4a2ef1195398e6661ce3355-if00-port0
- /dev/net/tun:/dev/net/tun
ha_matter:
image: "ghcr.io/matter-js/matterjs-server:1.5.5"
container_name: "ha_matter"
restart: "unless-stopped"
network_mode: host
environment:
TZ: "Europe/Vienna"
volumes:
- /opt/docker/ha/data/matter:/data
- /run/dbus:/run/dbus:ro
ha_esphome:
image: "ghcr.io/esphome/esphome:2026.10.2"
container_name: "ha_esphome"
restart: "unless-stopped"
network_mode: host
environment:
ESPHOME_USERNAME: "admin"
ESPHOME_PASSWORD: "<REDACTED>"
volumes:
- /opt/docker/ha/data/esphome:/config
System & USB Information
$ ls -l /dev/serial/by-id/
total 0
lrwxrwxrwx 1 root root 13 Nov 6 12:17 usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_c617ad1d049eef11b37ad9a661ce3355-if00-port0 -> ../../ttyUSB1
lrwxrwxrwx 1 root root 13 Nov 6 12:17 usb-SONOFF_SONOFF_Dongle_Plus_MG24_502346d7e4a2ef1195398e6661ce3355-if00-port0 -> ../../ttyUSB0
$ uname -a
Linux raspberrypi 6.18.60+rpt-rpi-2712 #1 SMP PREEMPT Debian 1:6.18.60-1+rpt1 (2026-11-03) aarch64 GNU/Linux
$ lsusb -t
/: Bus 001.Port 001: Dev 001, Class=root_hub, Driver=xhci-hcd/2p, 480M
|__ Port 002: Dev 002, If 0, Class=Vendor Specific Class, Driver=cp210x, 12M
/: Bus 002.Port 001: Dev 001, Class=root_hub, Driver=xhci-hcd/1p, 5000M
/: Bus 003.Port 001: Dev 001, Class=root_hub, Driver=xhci-hcd/2p, 480M
|__ Port 002: Dev 002, If 0, Class=Vendor Specific Class, Driver=cp210x, 12M
/: Bus 004.Port 001: Dev 001, Class=root_hub, Driver=xhci-hcd/1p, 5000M
|__ Port 001: Dev 002, If 0, Class=Mass Storage, Driver=uas, 5000M
$ vcgencmd bootloader_version
2026/10/30 20:55:54
version 42d1b6a942a00e0814415cee30d97b90a1ae394b (release)
timestamp 1793393754
update-time 1793955317
capabilities 0x0000007f
$ vcgencmd get_throttled
throttled=0x0
Bus 001 Device 002: ID 10c4:ea60 Silicon Labs CP210x UART Bridge
Negotiated speed: Full Speed (12Mbps)
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 0 [unknown]
bDeviceSubClass 0 [unknown]
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x10c4 Silicon Labs
idProduct 0xea60 CP210x UART Bridge
bcdDevice 1.00
iManufacturer 1 ITead
iProduct 2 Sonoff Zigbee 3.0 USB Dongle Plus
iSerial 3 c617ad1d049eef11b37ad9a661ce3355
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 0x0020
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 0 [unknown]
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Bus 003 Device 002: ID 10c4:ea60 Silicon Labs CP210x UART Bridge
Negotiated speed: Full Speed (12Mbps)
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 0 [unknown]
bDeviceSubClass 0 [unknown]
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x10c4 Silicon Labs
idProduct 0xea60 CP210x UART Bridge
bcdDevice 1.00
iManufacturer 1 SONOFF
iProduct 2 SONOFF Dongle Plus MG24
iSerial 3 502346d7e4a2ef1195398e6661ce3355
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 0x0020
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 0 [unknown]
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
- 主要语言
- C
- 星标
- 13.3k
- 派生
- 5.5k
- 平均合并
- 3 天 20 小时
- 30 天内合并 PR
- 27
环境准备
这个项目没有提供开发容器、Dockerfile 或贡献指南,环境需要你自己搭建:先看它的 README,通用步骤见我们的新手贡献指南。
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
raspberrypi/linux 的其他 Issue
-
难度 2/5 1-3 小时 新手友好度 63/100
raspberrypi/linux#7718 · 2 条评论 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 68/100
raspberrypi/linux#7415 · 2 条评论 · 1 个 reaction ·
维护者通常 1 天内回复
-
rp1-cfe doesn't forward V4L2_EVENT_SOURCE_CHANGE event from csi-2 sensor driver to userspace app未关闭
难度 2/5 1-3 小时 新手友好度 72/100
raspberrypi/linux#7399 · 1 条评论 ·
维护者通常 1 天内回复
-
难度 1/5 1 小时以内 新手友好度 82/100
raspberrypi/linux#7357 · 1 条评论 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 68/100
raspberrypi/linux#7054 · 2 条评论 ·
维护者通常 1 天内回复
查看 raspberrypi/linux 的全部 Issue
相似的 Issue
-
bug
难度 2/5 1-3 小时 新手友好度 85/100
维护者通常 1 天内回复
-
SPIDevice selects an active-high device as soon as it is created可能已有人在做 @mikeysklar 今天认领。 未关闭
难度 2/5 1-3 小时 新手友好度 73/100
adafruit/circuitpython#11869 ·
维护者通常 1 天内回复
-
难度 1/5 1 小时以内 新手友好度 78/100
gnif/LookingGlass#1352 ·
-
难度 2/5 1-3 小时 新手友好度 75/100
维护者通常 1 天内回复
-
bug
难度 2/5 1-3 小时 新手友好度 72/100
kovidgoyal/kitty#10862 ·
维护者通常 1 天内回复