CAN 性能差、易用性差,什么都想做,却又没法做好。
CAN 2.0 最快 1Mbps, 最多一次传输 8 字节用户数据,跑上层协议只剩下 4 字节用户数据,一个命令要拆 N 多个包发送,万一中间再丢一个包,那就 hehe 了。试想一下,现在的 IoT 时代,如果用 CAN 传输 1500 字节的 IPv6 数据包会是怎样的一种壮观场景,即使是机械臂内部关节控制,由位置、速度、加速度组成的单个命令都没法一次过传输。。。
CAN 的命令空间是共享的,每为系统添加一个设备就要全盘验证以保证不会干涉,要调整的话就会牵一发而动全身,而且 CAN 曾经引以为豪的无站点的通讯方式几乎没有人用,都是想方设法的在 ID 段塞入节点地址。
CAN 包最后有个 ACK 位,但是如果多个节点同时回复,没法保证大家都准确收到。
CAN 的错误帧的存在就注定了 CAN 不可以支持推挽输出,譬如对于想用低速仲裁、高速通讯的 CAN FD 来说就很尴尬了,因为高速部分没有推挽,速度很难上的去,而且 CAN FD 易用性更差,数据长度不够还要额外填补,对性能有要求的很多场合都被迫用工业以太网了,这也是我说 CAN 有过时风险的原因,它已然在走下坡路了。。。 |