嵌入式的开发的朋友们,咱们对串口调试工具一定不陌生,除了上位机中,各种串口收发软件外,还有很多USB转串口的设备。
这些设备最常见的当属FT232了,国内还有沁恒的CH340系列,PL2303系列等。当我们插上USB转串口的设备时,一般都需要再去找对应的驱动,十年前,这个驱动还得到处去搜索下载,如今都已成往事。现在,很多芯片方案可以即插即用了,今天来记录一下这些串口驱动到底是什么意思。最早的串口是基于DB9的一个接口,早些年的台式机都会配置这样的一个接口,在我最开始接触电脑的时候,我还经常把他和VGA接口弄混了。它在window的设备列表中会显示一个com接口。
我们可以通过这个接口来进行计算机的通信和文件传输,可以对设备进行控制,这个DB9的接口电平是12V的,以至于我们如果想调试我们的单片机,还需要再增加一个电平转换芯片 -- rs232。
VCP驱动由来
后来,笔记本电脑逐渐普及开来,DB9接口就被优化掉了,此时短小精悍的USB接口大行其道,也因此,usb转TTL的串口调试工具就被设计出来了。但是,由于历史遗留问题,很多设备还没有来得及更新换代,市场上依然存在大量的DB9接口的设备,为了能够让这些设备继续服役,工程师设计了这样的USB转串口来转接。
与此同时,很多做串口上位机配套软件的工程师也没能及时跟上发展,依然很依赖于打开一个com口进行通信,所以,做USB转TTL设备的厂商就自己写了驱动,将自己的USB设备模拟成一个串口,这也就是我们题目中提到的VCP驱动。我们插上USB转串口设备的时候,叮咚一声,设备列表里面就会出现一个COM3。
所以,为了能够兼容原来的上位机软件,绝大数厂商都开发了自己的VCP(Virtual Com Port)驱动。
HID设备
HID是一套人机接口集合,在这个协议之上定义了很多通用设备,比如我们的鼠标键盘,还有玩游戏的游戏杆,都是基于HID接口设计的。早在Win2000的时候,window系统就集成了HID的驱动程序,所以大多数window操作系统下都无需安装什么驱动,插上鼠标键盘就能使用。
所以,使用HID协议来做USB转串口的好处就是无需安装驱动,即插即用,可反复插拔。但是,上位机开发HID通信和串口通信相差甚远,老的软件不想改,新的软件由于难度增加,HID也是经常被pass掉,直到近年来才逐渐被采纳。
CDC是什么呢?
CDC-ACM,是USB ORG组织在1999年基于通信类设备推出的一个USB通用设备类别,事实上,绝大多数使用CDC串口的USB应用,并不处理串口操作,仅借助于CDC串口驱动实现USB设备和USB主机之间的数据透传。CDC串口的主要特点:
(1)无需为产品开发专用的USB驱动程序,但无法达到HID类设备的在所有系统上面的免驱效果。目前已有不少系统已集成CDC-ACM驱动,且驱动也在不断完善,如在WIN8.1前需要驱动安装包还需要做驱动包的数字签名,因为系统只集成了SYS;如WIN10系统集成了微软重新编写的CDC-ACM驱动。
(2)固件开发容易,CDC-ACM类规范内容简单,数据上下传内容为透传方式。
(3)可以实现部分串口功能,如串口参数设置和DTR/DSR的控制,但串口软件中较常用的CTS/RTS不支持,且不同操作系统下实现的CDC类驱动,还存在CTS状态不变且不可更改的差异。
坦白说,上面我们提到的厂家的VCP也是基于这个CDC开发的,只不过做了些优化和兼容吧。如今,各操作系统内置的CDC驱动也在不断更新维护,在产品应用中,也难免遇到各种影响串口正常使用的情况。因此,如果单纯的是为了做嵌入式方面的调试,而不是为了开发产品来做上位机,我认为VCP驱动和CDC虚拟串口是不错的选择,基于COM的工具非常多。当然对于CDC也是一样的,它也是虚拟出一个串口,就是对于系统兼容性方面还不稳定,如果只是调试,环境单一的话,CDC是很好的选择。