Linux USB CDC 发送意外字符
Posted
技术标签:
【中文标题】Linux USB CDC 发送意外字符【英文标题】:Linux USB CDC sending unexpected characters 【发布时间】:2015-07-01 14:11:37 【问题描述】:我有一个可以正确枚举为 CDC 接口的 USB 设备。 /dev/ttyACM1 已创建,我最终可以通过端点进行通信。
但是,在枚举后的最初几秒钟,Linux主机端的Some Mysterious Thing向设备发送AT
有谁知道这些不请自来的字节来自哪里?
我尝试了两种不同的 VID --- 0x1CBE,因为该设备是 TI 芯片,这是它们的默认设置,以及 0xF055,以防 TI VID 触发了一些备用驱动程序。相同的行为。设备描述符看起来非常普通:CDC 类、子类 0、协议 0、一种配置。
主机是 Ubuntu 14.04.1 LTS,64 位。 /sys/bus/usb/drivers/ 表示它正在使用 cdc_acm 驱动程序。以下是 usbmon 的输出;神秘的额外字节在最后。
请注意,在此运行中,它使用 USB_CDC_ACM_PROTO_AT_V25TER 进行枚举;我也试过 USB_CDC_PROTO_NONE 但结果是一样的。
ffff8801466ff180 3244792454 S Ci:2:029:0 s 80 06 0100 0000 0012 18 <
ffff8801466ff180 3244792654 C Ci:2:029:0 0 18 = 12011001 02000040 55f00200 00010102 0301
ffff8801466ff180 3244792709 S Ci:2:029:0 s 80 06 0200 0000 0009 9 <
ffff8801466ff180 3244792934 C Ci:2:029:0 0 9 = 09024300 020105c0 00
ffff8801466ff180 3244792997 S Ci:2:029:0 s 80 06 0200 0000 0043 67 <
ffff8801466ff180 3244793306 C Ci:2:029:0 0 67 = 09024300 020105c0 00090400 00010202 01040524 00100104 24020605 24060001
ffff8801466ff180 3244793377 S Ci:2:029:0 s 80 06 0300 0000 00ff 255 <
ffff8801466ff180 3244793570 C Ci:2:029:0 0 4 = 04030904
ffff8801466ff180 3244793632 S Ci:2:029:0 s 80 06 0302 0409 00ff 255 <
ffff8801466ff180 3244793802 C Ci:2:029:0 0 30 = 1e035300 61007400 50006100 71003a00 20007300 65007200 69006100 6c00
ffff8801466ff180 3244793861 S Ci:2:029:0 s 80 06 0301 0409 00ff 255 <
ffff8801466ff180 3244794065 C Ci:2:029:0 0 28 = 1c034800 69006700 68006500 72002000 47007200 6f007500 6e006400
ffff8801466ff180 3244794131 S Ci:2:029:0 s 80 06 0303 0409 00ff 255 <
ffff8801466ff180 3244794309 C Ci:2:029:0 0 18 = 12033100 32003300 34003500 36003700 3800
ffff8801466ff000 3244794739 S Co:2:029:0 s 00 09 0001 0000 0000 0
ffff8801466ff000 3244794897 C Co:2:029:0 0 0
ffff8801466ff000 3244794959 S Ci:2:029:0 s 80 06 0305 0409 00ff 255 <
ffff8801466ff000 3244795140 C Ci:2:029:0 0 54 = 36035300 65006c00 66002000 50006f00 77006500 72006500 64002000 43006f00
ffff8801466ffe40 3244795245 S Ci:2:029:0 s 80 06 0304 0409 00ff 255 <
ffff8801466ffe40 3244795390 C Ci:2:029:0 0 44 = 2c034100 43004d00 20004300 6f006e00 74007200 6f006c00 20004900 6e007400
ffff8801466d1f00 3244796605 S Co:2:029:0 s 21 22 0000 0000 0000 0
ffff8801466d1f00 3244796764 C Co:2:029:0 0 0
ffff8801466d1f00 3244796791 S Co:2:029:0 s 21 20 0000 0000 0007 7 = 80250000 000008
ffff8801466d1f00 3244796931 C Co:2:029:0 0 7 >
ffff8801466ffe40 3244812303 S Ii:2:029:1 -115:1 16 <
ffff8801477a69c0 3244812323 S Co:2:029:0 s 21 22 0003 0000 0000 0
ffff8801477a69c0 3244812387 C Co:2:029:0 0 0
ffff8801466ff480 3244812454 S Bi:2:029:2 -115 128 <
ffff8801466ff600 3244812457 S Bi:2:029:2 -115 128 <
ffff8801466ff6c0 3244812458 S Bi:2:029:2 -115 128 <
ffff8801466ff780 3244812459 S Bi:2:029:2 -115 128 <
ffff8801466ff840 3244812460 S Bi:2:029:2 -115 128 <
ffff8801466ff900 3244812460 S Bi:2:029:2 -115 128 <
ffff8801466fff00 3244812461 S Bi:2:029:2 -115 128 <
ffff8801466ff9c0 3244812462 S Bi:2:029:2 -115 128 <
ffff8801466ffa80 3244812463 S Bi:2:029:2 -115 128 <
ffff8801466ffd80 3244812463 S Bi:2:029:2 -115 128 <
ffff8800971e8240 3244812464 S Bi:2:029:2 -115 128 <
ffff8801473c2f00 3244812465 S Bi:2:029:2 -115 128 <
ffff8801473c2e40 3244812465 S Bi:2:029:2 -115 128 <
ffff8801473c2d80 3244812466 S Bi:2:029:2 -115 128 <
ffff8801473c2cc0 3244812467 S Bi:2:029:2 -115 128 <
ffff8801473c2c00 3244812468 S Bi:2:029:2 -115 128 <
ffff8801477a6300 3244812483 S Co:2:029:0 s 21 20 0000 0000 0007 7 = 00e10000 000008
ffff8801477a6300 3244812634 C Co:2:029:0 0 7 >
ffff8801477a6300 3244813414 S Co:2:029:0 s 21 22 0002 0000 0000 0
ffff8801477a6300 3244813510 C Co:2:029:0 0 0
ffff8801473b96c0 3244913682 S Co:2:029:0 s 21 22 0003 0000 0000 0
ffff8801473b96c0 3244913763 C Co:2:029:0 0 0
ffff8801473c2b40 3244913835 S Bo:2:029:1 -115 1 = 41
ffff8801473c2b40 3244913882 C Bo:2:029:1 0 1 >
ffff8801473c2b40 3245014062 S Bo:2:029:1 -115 1 = 54
ffff8801473c2b40 3245014160 C Bo:2:029:1 0 1 >
ffff8801473c2b40 3245114308 S Bo:2:029:1 -115 1 = 0d
ffff8801473c2b40 3245114394 C Bo:2:029:1 0 1 >
ffff8801473b9480 3245302014 S Co:2:029:0 s 21 20 0000 0000 0007 7 = 00c20100 000008
ffff8801473b9480 3245302184 C Co:2:029:0 0 7 >
ffff8801473c2b40 3248486129 S Bo:2:029:1 -115 1 = 41
ffff8801473c2b40 3248486239 C Bo:2:029:1 0 1 >
ffff8801473c2b40 3248586369 S Bo:2:029:1 -115 1 = 54
ffff8801473c2b40 3248586488 C Bo:2:029:1 0 1 >
ffff8801473c2b40 3248686655 S Bo:2:029:1 -115 1 = 0d
ffff8801473c2b40 3248686737 C Bo:2:029:1 0 1 >
ffff8801473c2b40 3251487738 S Bo:2:029:1 -115 1 = 41
ffff8801473c2b40 3251487836 C Bo:2:029:1 0 1 >
ffff8801473c2b40 3251587976 S Bo:2:029:1 -115 1 = 54
ffff8801473c2b40 3251588088 C Bo:2:029:1 0 1 >
ffff8801473c2b40 3251688249 S Bo:2:029:1 -115 1 = 0d
ffff8801473c2b40 3251688357 C Bo:2:029:1 0 1 >
ffff8801473c2b40 3254489075 S Bo:2:029:1 -115 5 = 7e0078f0 7e
ffff8801473c2b40 3254489188 C Bo:2:029:1 0 5 >
ffff8801473c2b40 3257488394 S Bo:2:029:1 -115 5 = 7e0078f0 7e
ffff8801473c2b40 3257488549 C Bo:2:029:1 0 5 >
【问题讨论】:
【参考方案1】:ModemManager 正在发送这些 AT 命令。
可以添加一个 udev 规则来告诉 ModemManager 如果您的设备出现问题,请不要管它。只需在 /etc/udev/rules.d 中添加一个名称类似于 foo.rules
的文件,内容如下:
ATTRSidVendor=="12ba", ATTRSidProduct=="23ef", ENVID_MM_DEVICE_IGNORE="1"
【讨论】:
以上是关于Linux USB CDC 发送意外字符的主要内容,如果未能解决你的问题,请参考以下文章