Jor*_*aes 29
这些不是称为串行端口的 USB 端口。在您的示例中,Arduino 有一个 USB 转串口设备(以第二个微控制器或 FTDI 芯片的形式)。这将使用 USB 与计算机进行通信并形成一个实际的串行端口到外界——类似于 USB Wi-Fi 加密狗,或 USB LAN 适配器、USB SATA 适配器等。
关键是,在许多情况下,用户无法直接使用串行端口,因为它在设备中是“硬连线”的(在这种情况下,直接连接到您正在编程的微控制器)。
严格来说,任何使用串行通信的端口(几乎任何现代总线 - 包括 USB,如果我没记错的话,它代表“通用串行总线”)都是“串行端口”。然而,在大多数情况下,当人们提到“串口”时,他们实际上是指一个符合RS-232的端口。
小智 19
这是令人困惑的,因为 Windows COM:端口来自 MS-DOS(b. 1980)中定义的命名系统。这几乎是从 CP/M (b. 1974) 中复制而来的,其中有一些来自 Unix 的想法。他们没有预料到会增加像 USB 这样的中间“传输”总线。
Windows 中有不少东西是 CP/M->MS-DOS 演变的幸存者,例如以字母命名的磁盘驱动器、3 个字母的文件扩展名、.EXE 和 .COM 文件以及命令提示符命令界面。
另一个是设备名称:通常是三个字母,总是以冒号结尾。COM:是串行“通信端口”,LPT:“行式打印机”(通常挂在 Centronics 端口上),NUL:转储发送给它的任何内容,CON:是“控制台”(键盘和屏幕)。有些你可以有几个得到编号以区分它们。COM:端口,LPT:端口,变成COM1:和LPT1:等等。
COM:端口是一个“端点”:从 Windows PC 的角度来看,通信链路的远端。像计算中的许多事情一样,那里的桥被忽略了,它是您正在考虑的远端组件,而不是 USB。PC 键盘(链接为 CPU-PCIe-USB-kbd)或网络驱动器(链接为 CPU-PCIe-LAN-LAN-PCIe-CPU-PCIe-SATA 或类似内容)也是如此。
USB 也使用端点的概念。USB 控制器可以将主机 PC 连接到各种硬件并将它们作为资源提供给它。因此,当您看到 USB 连接的硬件时,您会看到这些端点。USB 设备中的虚拟 COM: 端口只是作为端点的 USB 从设备输出的串行端口。Windows 会给它一个编号(COM1:、COM27: 等),并且任何使用 COM: 端口的标准 Windows API 的程序都可以识别和使用该串行端口。
某些 USB 连接的硬件可能更喜欢模拟串行端口,因为这样可以更轻松地开发 Windows 软件。无需编写设备驱动程序,节省了大量工作——USB设备告诉Windows它是一个串口。从 PC 的角度来看,如果它的行为类似于串行端口(字节在始终打开的无限串行流中发送和接收),则这很好。所以对开发者来说是有好处的。
要添加到Joren Vaes 的回答中:请注意,某些软件应用程序(如 Arduino IDE)会安装创建“虚拟 COM”端口的 Windows 驱动程序。当这些端口被激活时,操作系统会告诉程序有一个 COM 端口可用,它看起来像一个标准的串行端口 [*],哪些程序(如 Arduino IDE,但也有任何其他)可以发送和接收位,如到任何串行端口。然而,在引擎盖下,这些位被发送到 USB 电缆。在 Arduino 板内部发生了类似的事情。
[*] 而且,这里的“标准串行端口”是指 RS-232 协议,传统上通过 DB-9 或 DB-25 连接器传输的那种协议。在我们的上下文中,USB 也是“串行”的并不重要。
你对COM口和USB口区别的理解是正确的。
简短回答你的问题,为什么有些 USB 端口被操作系统映射为“COM”端口,是:有 USB 设备实现了 USB CDC(通信设备类)。这些设备提供了从极其复杂的 USB 接口到标准 UART/RS-232 类型接口的桥梁。为了对用户透明,操作系统将模拟传输层的 USB 驱动程序加载为 COM 端口,即虚拟 COM 端口。这种方法的一些历史细节和理由如下。
COM 端口使用 DB-9/DB-15(又名 RS-232 串行或 UART)连接器,这些端口的控制器物理映射到 PC 硬件,到 I/O 空间中的特定地址。此 COM 控制器在现代 PC 中已过时,并已灭绝。
同时许多MCU仍然使用RS-232串行通讯作为与外围世界通讯的主要手段。原因是这种链接的硬件(和软件)非常简单且易于实现。此外,所有现代 Android 开发/调试通信都是以 COM 端口样式完成的。此外,许多“通信”设备(如调制解调器,包括 4G LTE 及更高版本)仍然使用 UART 风格的接口,通过几个“COM”端口使用 ASCII 类型的控制协议。
现在开发者面临一个困境,如果主机开发PC没有COM端口,如何与这样的微控制器通信?解决方案是使用 USB 端口和特殊的 USB 设备,这些设备将 USB 协议与 COM 端口 RS-232 接口桥接起来。有专用 USB 设备作为 FTDI 芯片,还有许多其他设备(Cypress、Microchip 等)制造执行此桥接功能的设备。
现在,与这些 MCU 的所有本地通信仍以 RS-232 协议表示,并且大多数应用示例都假设使用某些终端应用程序(TeraTerm、HyperTerminal 等)来使用链接。为方便用户,USB 至 UART 桥接器提供了将端口表示为虚拟 COM 端口的驱动程序。所有现代软件都使用 COM 硬件的虚拟化,可平滑过渡到“无 COM”PC。将专用 FTDI 桥接器添加到MCU 开发平台上的UART 端口(并在主机 PC 上使用 FTDI 驱动程序使 USB 端口看起来像 COM 端口),或将适当的桥接代码嵌入 MCU 本身(如果它具有本机 USB 功能)。
直接的方法是使用外部 USB 转 UART 板并将 UART 连接到正在开发的 MCU。或者,如果电路板已经有 DB-9 连接器,则可以直接连接USB 加密狗。
在所有情况下,MCU 的本机 UART 控制将作为虚拟 COM 端口出现在主机端,跳过所有中间信号/协议转换。这就是为什么现在人们经常跳过 USB 到 UART 桥接器和 COM 端口之间的区别。
| 归档时间: |
|
| 查看次数: |
12227 次 |
| 最近记录: |