|
本帖最后由 dukelec 于 2023-8-23 23:11 编辑
# 主流通讯总线的特点 (优点在前,缺点在后)
## CAN BUS 特点
数据包短,高优先的数据包被阻塞的时间也就更短(不过其它支持长数据包的总线,也可以限制单次只传输少量数据)。
无需上下拉电阻,只需要接终端电阻。
汽车大量使用 CAN 通讯(近年高端车辆开始使用工业以太网,RS485 只被部分重型专用车辆采用)。
近年随着 STM32G 系列的推广,自带 CAN FD 的 MCU 也越来越多。
CAN 不是推挽输出,不适合远距离传输,日后也无法继续提升速率。
CAN 2.0 最快只有 1Mbps;CAN FD 标称能到 12Mbps, 实际一般只能到 5、6Mbps。
CAN FD 的时序设置很麻烦,特别是因为高速部分的数据依然要发送方时刻回读比对,需要引入延时补偿等机制,导致时序参数众多,且易出错。
CAN 2.0 最多只能传输 8 字节用户数据;CAN FD 可以传输 64 字节,但是字节数有阶梯限制,不能想用多少字节就用多少,需要用户额外使用 padding 算法,同时会造成带宽浪费。
CAN 协议较为复杂,用 CAN FD 还要考虑上层协议是否要兼容 CAN 2.0,历史包袱重。
高端应用被 EtherCAT 等工业互联网取代,低端又有 RS485 盘踞,CAN 本身的通用性也不好(反观 UART 则是一个大家族),所以 CAN 的市场份额长期看低。
CAN 帧最后有一个 ACK 位,配合错误帧机制,可以一定程度上依靠硬件解决拜占庭将军问题(确保所有节点同时执行任务),但是不能 100% 保证,譬如当多个接收者中的一个接收者掉电,无法发送错误帧。
如果是一对一通讯,如果目标掉电,ACK 位恰巧遇到干扰,发送方也会误以为数据成功送达。
如果一条总线有一个不重要的节点离的比较远,它接收的信号质量较差,那么它接收出错而发出的错误帧,将导致本可以正常接收的关键节点不能及时接收指令。
CAN 帧传输相同字节数,数据内容不同帧长度也不同,这样会导致抖动。
CAN 的 ID 字段通常会用来做协议的一部分,不同协议对 ID 字段的定义不同,混用容易冲突。
CAN 设计上用 ID 字段取代传统设备地址,代之消息号,然而使用非常广的 CANOpen 还是把 ID 用来存放源地址和目标地址。
CAN 的调试和二次开发比较麻烦,譬如写一个 PC 软件给客户,是否要去兼容市面各种不通用的 USB 转 CAN 工具?(反观 USB 转串口则通用且跨平台,使用操作系统的串口接口即可。)
## RS485 特点
硬件成本低。
基于永不过时的 UART 异步串行通信格式。
协议没有限制。
工业大量使用 RS485 通讯(也有相当一部分使用 CAN 和工业以太网)。
不支持多主对等通讯,只能主机轮询各从机(或者是允许小概率冲突的多主通讯,冲突后重传,无法保证效率和实时性,另外是一些复杂的令牌方式,依然做不到对等传输)。
总线利用率低,协议全靠软件处理,比较麻烦且打扰 CPU 核心工作。(部分 CPU 的 UART 控制器有地址过滤功能,防止与自己无关的数据打扰到自己,但是要特别为该功能设计特定协议,所以很少使用。)
需要接可选的上下拉电阻,和可选的终端电阻,撘配方式更多所以更复杂(部分接口芯片也可以无需接上下拉电阻)。
## CDBUS 特点
使用最简单通用且永不过时的 UART 异步串行通信格式,具体格式为 8N1(一个起始位,8 个数据位,一个停止位)。
CDBUS 协议非常简单易用。
CDBUS 比较开放,协议和 IP 核完全开放和免费,ASIC 芯片研发和生产公司除外。
CDBUS 用户数据 253 字节(硬件控制器)。
基于 RS485 的 CDBUS 可以达到甚至超过 50Mbps(对于 RS485, 速度越高距离越近,常用 10Mbps 就可以传输视频、图片等较大的数据)。
通讯的多方都可以各自选择是否使用专用芯片(不使用专用芯片时不能使用对等总线通讯,除非用软件模拟专用芯片的功能,BS 模式相对容易模拟)。
(如果主机不使用专用芯片,各从机使用专用芯片,那么主机发送广播包时,从机可以一起回复。)
(如果主机不使用专用芯片,只要可以确保发送前总线是空闲状态,那么即便主机和从机一起发送数据,仲裁机制依然可以避免冲突,只需要让主机地址的仲裁优先级最高即可。)
物理层不限,支持 TTL、单线串口总线、RS485、M-LVDS、RS232、光纤等,甚至是使用 CAN 2.0/FD 的物理层(代码通用,也可通过 USB 串口、蓝牙 BLE 通讯等传输 CDBUS 数据)。
通过 仲裁模式 或者 BS 模式 实现多主对等通讯(后者可以全程高速传输,但节点数不宜多)。
由于支持对等传输,所以可以代替很多广泛使用的 一对一通讯的 RS232/RS422。(对等通讯总线相当于在各节点之间建立了全双工的全连接虚拟通讯管道,虽然物理层是半双工。)
用 UART 通信格式,随便用一个 USB 转串口硬件 和 任意一款串口助手软件 就可以通讯,价格和门槛比 CAN 低很多(也可以选择 CDBUS-GUI 等开源软件工具,用起来更方便)。
CDBUS 只要设备地址不同就不会冲突,哪怕是 CDBUS、Modbus 等不同协议混用,基本的通讯也能正常。
CDBUS 控制器也有硬件过滤器,支持单播、组播、广播,类似主流且成功的以太网。
硬件控制器除了用做总线通讯,还可以用来扩展串口。
对于 RS485 的 CDBUS,需要接可选的上下拉电阻,和可选的终端电阻,撘配方式更多所以更复杂(部分接口芯片也可以无需接上下拉电阻)。
内置 CDBUS 控制器的 CPU/MCU 目前很少,外挂专用芯片会增加少量面积和成本(如果一个产品因为使用了 CDBUS,从而节省了调试口、烧录口,甚至是 USB 等接口,体积和成本可能不增反降;而且还可以把专用芯片和 RS485 电平转换芯片合封在一起,进一步降低成本和面积)。
CDBUS 不兼容 Modbus 等协议,在需要对外兼容其它协议的场合,不能使用 CDBUS 芯片(或者再拉一路串口到 CDBUS 芯片的输出口,芯片不使能输出,同时支持两种协议)。
## EtherCAT 特点
最大的优点是,可以较远距离传输的同时保持高速率,且增加节点数不会影响速率。
自带隔离,有些还可以 PoE 供电。
缺点是体积较大、成本高、使用过于复杂,不灵活。
大多数设备的内部通讯,需要高速但不需要远距离传输;而设备对外通讯需要远距离但通常不需要很高速率。
任何一个接口的接触不良,会造成总线上所有设备的通讯中断。
不支持多主对等通讯,只能主机轮询各从机。
|
|