“COM”、“USB”和“串口”有什么区别?(涉及IT技术)

39

我对这三个概念感到困惑。

我理解的是,串行端口通常指RS-232兼容端口(RS = Recommended Standard)。 USB代表通用串行总线。因此,它的名称包含串行端口,它是否支持RS-232? 通用是什么意思?

COM端口是什么意思?

ADD 1

Hans的回答中提到的一些理解:

为了减少工作量,设备制造商通常会使他们的设备也能像串行端口设备一样运行。这依赖于许多操作系统和语言库已经包含了串行端口通信支持的事实。虽然这种支持与真正匹配的设备驱动程序不可比拟。

ADD 2

关于串行端口HOW-TO的好参考文档。

顺便说一句,Linux文档项目非常有用。

2个回答

58

串行端口是一种使用UART芯片(通用异步收发传输器)的设备。它是早期计算机与外部设备交互的两种基本方式之一,另一种是并行端口。串行端口连接简单,只需少量电线即可,而并行端口可以实现更快速度,约比串行端口快8倍,但电缆和连接器价格昂贵。随着总线收发器这种可以将电信号传输到电线上的芯片的巨大进步,平行I/O已经完全从计算机设计中消失。

COM来自于MS-Dos,它是一个设备名称。它是“通信端口”(COMmunication port)的缩写。1980年代的计算机通常有两个串行端口,在机器背面标为COM1和COM2。这个名字被延续到Windows,任何模拟串行端口的驱动程序都会创建一个带有"COM"的设备名称。 LPT是并行端口的设备名称,它是“Line PrinTer”的缩写。

RS-232是串行端口的电气信号标准,它是最简单的标准之一,对设备要求很低,只支持点对点连接。 RS-422和RS-485也很常见,使用每个信号的双绞线,提供更高的噪声免疫性,并允许多个设备相互连接。

USB代表通用串行总线。它利用能够集成微处理器的几毫米大小且成本不到一美元的设备的能力,取代了1990年代后期的遗留设备。它是通用的,因为它可以支持多种不同类型的设备,从咖啡壶加热器到磁盘驱动器,再到wifi适配器和音频播放等。它是串行的,只需要4条电线。它是总线的,你可以将USB设备插入任意端口。它与FireWire竞争,后者是苹果公司推出的非常相似的方法,但最终USB以压倒性优势获胜。

现如今,在Windows系统中串口仍然具有重要意义的唯一原因是,某些USB设备需要自定义驱动程序。设备制造商不喜欢编写和支持驱动程序,所以他们通常采取捷径,在驱动程序中模拟传统的串口设备。因此,程序员可以使用操作系统内置的串口遗留支持和任何语言运行时库。但这种支持相当不完美,这些模拟器从来没有很好地支持即插即用。寻找要打开的特定串口非常困难。而且,当您在使用程序时插拔USB设备时,这些驱动程序经常会出现无法诊断的错误。


12
“串口在当今计算机中仍然具有重要性的唯一原因是…” - 这听起来像是PC为中心的观点,而不是精确的整个计算机行业的观点。由于UART在硬件和软件方面都很容易使用作为接口,SoC几乎总是至少拥有一个UART用于串行控制台。“一个USB设备需要一个设备驱动程序。” - 所有设备(不论总线类型)都需要驱动程序。无论您是否必须安装它或者它已经在操作系统中,这是另一个问题。USB需要一个协议栈(因为它是多设备总线)。 - sawdust
2
当然,这听起来像是面向嵌入式设备开发的视角。 “COM”应该是OP正在提出一个以Windows为中心的问题的很好的线索。 - Hans Passant
2
我不认为USB咖啡杯加热器是真正的USB设备的例子。这样的设备通常只使用USB端口提供的5V / 500mA电源,而不使用数据通信线路。 - Clifford
4
叹气。当然可以编程,自动在所需时间间隔后关闭,以免咖啡烘焙到杯子里。动动脑筋吧。 - Hans Passant
1
@HansPassant:这可以通过简单的热切断来实现。愚蠢的小玩意儿绝非良好的例子。如果你只有2.5瓦特的功率预算,那么要让杯子过热是很困难的-学点物理吧;-) - Clifford
显示剩余3条评论

15

USB代表通用串行总线,而不是端口。术语“串行端口”仅意味着数据通过单个信号路径逐位传输 - 在这种意义上,甚至以太网的性质也是串行的。两个术语中的“串行”一词除了数据路径的宽度外没有任何关系。

你说得对,在PC上下文中,术语“串行端口”通常指RS-232端口,但还有其他串行端口标准,例如在工业应用中经常使用的RS-422和RS-485。它们共同之处在于它们使用UART(通用异步收发器/发射器)实现。

USB中的“通用”一词仅反映了它不是旧硬件上专用鼠标或键盘端口等特定设备接口。同样,基于UART的串行端口也不是设备特定的,这体现在UART中的U字母。

USB与RS-232在许多方面有很大的区别;它是主/从(或在USB术语中称为主机/设备),而不是点对点,USB设备不能启动通信,必须由主机轮询。 USB包括低电压电源,以允许具有中等功率要求的设备通过总线供电 - 这也是为什么USB端口可用于充电电池供电设备的原因。 USB比仅定义物理(硬件)层的RS-232复杂得多,而USB需要完整的软件协议栈。
“COM”一词只是Windows(以前是MS-DOS)中用于串行(UART)端口的设备名称前缀。例如,您可以将COM端口作为流I / O设备打开,如FILE * port = fopen(“COM1”,“wr”);

如果USB设备无法启动通信,则似乎不可能支持串行连接。 - Sam Hobbs
2
@user34660:完全不是这样的;当设备吸取电力时,主机会检测到它并启动通信。在连接期间,主机会持续轮询设备,而设备可以在轮询响应数据包中发送数据。全双工通信和类似UART的通信外观只是一个幌子。 - Clifford

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接