协议栈太大不是主要原因,以太网协议栈也不小,但在通信行业的应用远远多于USB
具体原因有以下几点:
1、USB通信距离太短(抗干扰能力太弱),只有5米,RS232通信距离是10米,RS232可以扩展到RS485通信距离是1000米。
2、USB不是对等协议,USB协议要求所有请求必须由主机发起,设备只能被动接受控制,设备与设备之间无法直接通信(比如USB键盘和USB鼠标是无法互相通信的),而RS232则是一个对等协议,通信行业更多的时候要求的是对等通信(比如以太网也是对等协议)。
3、 USB协议栈太大了,当然大小只是一方面,以太网的协议栈规模并不小,所以有人说USB协议栈太大,这是一个因素,但不是最关键的地方,前两条原因才是。现在的做的项目里领导要求摒弃RS232/RS485等串口总线,赶潮流说:”要用先进的USB做为设备与设备间的传输“。仔细研究后发现几个问题,除了上面各位答案中提到的什么协议复杂、通信距离、占用处理器资源大之外,还有:
1:现有的USB标准接口的抗冲击性能差,USB在民用商用上易插拔的优点在工业控制领域、医疗器械领域、通信设备领域则是致命缺点。接口没有很好的固定卡位或螺丝固定,很容易一碰或一震动就掉。
2:对传输时序要求非常严格。虽然USB数据线输出的D+/D-两线跟RS485一样都是差分信号输出,但其高速传输特性限制了其传输距离和传输环境。通信距离长了就容易导致两线边沿时序出现偏差,而传输失败。
高达四十多M的传输速率导致了其输出无法做隔离传输(这么快的光耦/磁隔/容隔芯片很少见,ADI公司出过一款只针对USB1.1版12M速率的磁隔离芯片,再快的就没有了),不能做隔离传输那电子设备就很难在电磁环境复杂的区域工作。而且两设备之间数据通信即使是民用产品也需要隔离输出,比如我们的路由器、电脑网卡的RJ45输出口是带隔离变压器的。
而且即使有几十M的光电隔离芯片,也不能保证D+/D-的时序完整性。
但是RS232绰绰有余,就算MCU上没有标准接口,还能自己用I/O模拟一个。
一般来说MCU的FLASH都小于128K,常用的2K-64K左右,最大256K。
对于工程师来说,都会选刚刚够用的东西,而不是最牛逼最先进的东西。
大家都从各种技术方面描述了USB和RS232串口。但就我这通信行业从业这么多年的经验来看,主要还是USB和RS232在通信设备上的应用场景有关。
一,串口(RS232)在通信设备中的应用
1. 管理口。 可以说当今99%在通信设备上RS232均用于CONSOLE口,也就是管理串口。通信设备的命令行,调试信息均通过该串口直接输出。而USB并不适用于这种管理调试口的应用场景;
2. AUX口。主要用于某些路由器,用于串行链路通信。这种设备就更不能使用USB代替了,因为大量老设备均使用RS232协议,不是简单的可以用USB代替的。
3. 成本。很多通信设备没有USB的需求,而且对成本很敏感。而且这类设备的RS232一般用于管理串口,实在没有理由也没有动力配置更贵更复杂的USB;
二,USB在通信设备中的应用
1.链路回传与链路备份,插入3G网卡用于链路回传或链路备份。
2.存储。插入U盘或之类存储设备,用于备份信息。
3. 其它外设,扩展设备功能。
4. 在有USB接口的通信设备上,99%会同时配置RS232串口用于管理目的,两者是共存关系不是替代关系。
因此,USB和RS232在通信设备上的用途完全不同,两者是不能互相替代的。