可以在 Linux 中更改 USB 协议吗?

可以在 Linux 中更改 USB 协议吗?

我一直在尝试找到一种方法,让微控制器通过 USB 直接与计算机通信,而无需使用 uart 转 USB 桥接器,我想我可以通过禁用 USB 端口的 USB 协议并将该端口用作常规串行端口来实现这一点。港口。然而,我被告知你无法关闭 USB 部分。不过,我还听说 Linux 操作系统的许多内部运作方式都可以进行更改。 Linux 是否允许更改 USB 协议并将 USB 端口变成常规串行端口?

答案1

从任何意义上讲,USB 都不是与旧的 RS-232 串行端口标准(也称为 EIA/TIA-232)相匹配的“串行端口”。您无法通过“关闭额外要求”将 USB 转换为 RS-232。

与经典的 RS-232 串行端口不同,USB 使用差分信号:实际上有点(非常少)像 RS-485,尽管信号电平和其他电气特性非常不同。

RS-232 可以使用高达 +/- 15 伏的信号电压:USB 在 USB 1 模式下使用 <0.3V 的逻辑低电平和 2.8-3.6 伏的逻辑高电平;在 USB 2 高速模式下,电压甚至更小。

即使在 RS-232 中使用 TTL 逻辑电平 (0..5V),USB 发送器也无法可靠地生成 RS-232“空间”(=较高电压状态)信号。这些标准之间的信号电平不匹配:USB 发送器的信号对于 RS-232 UART 接收器来说太微弱,而 RS-232 输出信号会使 USB 接收器过载。

您也无法通过简单的电平转换器电路来解决不兼容性问题:USB 收发器处理数据包,而不是仅发送一个起始位,然后发送一个字节的数据,然后发送一个或两个停止位。在数据包的开始处,必须有一个同步序列(USB 1 为 8 位;USB 2 高速传输为 32 位),然后传输几个字节,最后是不会匹配的数据包结束信号正常的“逻辑低”或“逻辑高”状态。所有这些都可以在硬件中实现以提高效率,并且由于通常没有理由做任何不同的事情,因此可能没有任何规定可以绕过它以在直接软件控制中“位敲击”实际数据线。

比较信号示例RS-232USB 1.1在维基百科中。

总结一下:不是,问题在于 USB 和 RS-232 在实际硬件层面上的差异太大。

相关内容