我有一个向 LCD 显示器发送信号的硬件产品。硬件盒(未知芯片组)有一个 USB-A 插座,并连接到 LCD 显示器上的 USB-B 插座。 LCD 显示屏以一秒的间隔显示不同的值。我需要使用任何基于 Linux 的机器从硬件框中读取值。我尝试过通过 USB 连接到硬件盒的 Raspberry。但是,当我尝试通过设备枚举 USB 设备时,lsusb
该设备并未显示。它只显示我的键盘和鼠标。
当我查看 dmesg 输出时,我得到以下信息:
[ 2.411997] usb 1-1.3: new low-speed USB device number 6 using dwc_otg
[ 2.511983] usb 1-1.3: device descriptor read/64, error -32
[ 2.731995] usb 1-1.3: device descriptor read/64, error -32
[ 3.192015] usb 1-1.3: new low-speed USB device number 8 using dwc_otg
[ 3.292089] usb 1-1.3: device descriptor read/64, error -32
[ 3.512305] usb 1-1.3: device descriptor read/64, error -32
[ 4.292059] usb 1-1.3: new low-speed USB device number 9 using dwc_otg
[ 4.732030] usb 1-1.3: device not accepting address 9, error -32
[ 4.832062] usb 1-1.3: new low-speed USB device number 10 using dwc_otg
[ 5.272043] usb 1-1.3: device not accepting address 10, error -32
[ 5.272238] usb 1-1-port3: unable to enumerate USB device
我尝试了 pyserial,但不知道从哪个设备读取。我没有得到idVendor
,idProduct
我不知道是否有可以更新的驱动程序或其他东西。
我查阅了大量文档,将 USB 驱动程序的速度设置为 1(通过dwc_otg.speed=1
这也没有帮助)。我在这里尝试了所有的事情:https://www.raspberrypi.org/documentation/configuration/cmdline-txt.md
但没有任何帮助。我有两个问题:
- 我还可以做什么来调试 USB 连接?
- 如何识别未列出
lsusb
并在 dmesg 中给出错误的 USB 设备?
这对我的研究非常重要,因此非常感谢任何帮助。
答案1
您看到的错误消息来自低级 USB 故障,基本 USB 协议尚未完成 - 因此 Linux 可能甚至不知道 idVendor/idProduct。这也是 lsusb 没有显示它的原因,它还没有真正连接。
第一个奇怪的事情是它有一个 USB A 端口,通常位于计算机/“主机”端(B 位于设备/“小工具”端)。所以听起来它与显示器的使用方式是“硬件产品”,功能就像计算机一样,正在控制显示器。听起来您正在尝试将两个 USB A 端口连接在一起,这不应该工作(或物理上不可能)。
如果您希望 Pi 像显示器一样工作,您可能需要做大量工作才能使其呈现为显示器。这就是所谓的 USB 小工具模式。编写程序来实现这一点可以在 Stack Overflow 上询问;这绝对是软件开发。
如果您的硬件设备也应该连接到计算机,那么它可能会实现这两种模式(通常称为 USB On-The-Go)。如果是这样的话,它应该能够与 Pi 通信,但这是行不通的。第一个调试步骤是看看它是否可以在 PC 上运行——甚至是 Windows 电脑。如果没有,那么我怀疑除了联系供应商之外还有很多事情要做。如果是这样,您的 Pi 可能无法为其提供足够的电力;确保您使用的是好的带 Pi 的 USB 电源。
顺便说一句:研究这两个设备如何通信时想到的另一件事是将显示器插入您的 Pi 或计算机。您可以使用普通 USB 电缆;查看它是什么类型的设备。如果它显示为监视器(而不是串行端口)...祝你好运!