RS485 多主对等通讯之 CD-BUS 协议分享讨论

[复制链接]
4491|12
手机看帖
扫描二维码
随时随地手机跟帖
dukedz|  楼主 | 2017-6-16 22:23 | 显示全部楼层 |阅读模式
本帖最后由 dukedz 于 2017-8-6 16:01 编辑

历史
2009 年大二下学期,我和小夥伴们一起参与一个校企联合项目,开发一款煤矿用皮带机综合保护器, 我主要负责电路软硬件设计,因为矿井中皮带很长,保护器节点间相距约六百米, 各节点除了处理数据收发还要负责中继,为了更优的可靠性和实时性,中继部分采用 FPGA 硬件实现, 因此中继带来的延时远小于一个位长。 因为没有额外的主机,按照传统,只能指定其中一个节点为主机, 该节点负责持续发出查询命令同步所有节点之数据,但万一该主节点中途出故障下线,整个总线将会停止运行。 所以为了进一步提升系统鲁棒性及降低软件复杂性,于是我设计了一款带仲裁的 485 协议,做到节点间可以自由收发数据, 只有第一字节用做仲裁的字段使用低速传输,剩余数据使用传统 485 高速传输,在引入仲裁的同时保留了高速,当然也是由硬件实现。

cd_bus1_cn.png

软件实现数据链路层的缺点
无论是串口还是 485 通讯,传输的数据正常都是要打包发送,常见的有类似 “ff aa” 两个字节做为数据帧的开头,加上用户自定义的数据格式可以判断帧的结尾。

数据帧由 “ff aa” 开头的缺点:这些标志常与其后数据重复,如果帧数据也含有一个 “ff aa”, 那么当数据出错可能会导致解析错位,接收方误以为帧数据中的 “ff aa” 是帧头标志,而且出错之后又会影响下一个数据包导致错误继续。

数据帧以空闲状态做区分的缺点:通常不可以使用 FIFO 和 DMA 接收数据,因为那样做会导致很多帧在内存中连接在一起,无法通过时间信息来区分。 如果不使用 FIFO 和 DMA, 不仅会增加 CPU 开销,而且会对实时性有更高要求,为不同中断制定优先级顺序时会十分困难: 如果接收的优先级更高,那么每当总线有数据的时候,其它任务就会被打断; 相反如果接收的优先级较低,那么又可能会经常丢失数据。

数据帧由硬件来负责接收可避免这些问题。

在普通的 485 应用场景中,CPU 直接控制 485 接口芯片接收数据,即使该数据帧并非发给自己,CPU 也要被总线数据频繁中断,影响效率。 同时收到数据帧后还要校验以确保正确性,是一件非常占用 CPU 资源的工作。

同时,由于传统 485 只能单台主机不停查询各从机以同步数据,总线的数据一定少不了,且利用率很低,实时性和鲁棒性也差。 譬如有一个从机是一只开关,主机为了知道开关当前是否按下,要不停发送查询数据包,然后开关回覆一个包含当前状态的数据包给主机; 如果可以做到各节点均可主动发出数据包,那么当开关状态改变时,只需要发送一个数据包给主机便可,即快省又便捷。

CAN 总线的局限
为了降低 CPU 占用和自由收发数据帧,所以一部分人选择了 CAN 总线,CAN 控制器由硬件处理数据帧收发、校验,同时提供自由收发数据帧的能力(仲裁), 但是 CAN 的数据帧最多只能传输 8 个字节数据,而且高速 CAN 最高速率只有 1 Mbps, 比 485 的标准 10 Mbps 低太多(485 速率还可以更高),而且 CAN 的版权费用导致成本很高。

最新的 CAN FD (CAN with Flexible Data-Rate) 可以支持超过 1 Mbps 的速率,但由于硬件依旧不是推挽输出,所以通常也只有 2 Mbps、3 Mbps, 而且也找不到独立的控制器芯片, 由于要兼容 CAN2.0, 加上 CAN 本身硬件较为复杂,Microchip 2015 年说计划推出 CAN FD 控制器,结果到现在也没有出来。

CAN 协议使用消息类型取代站地址,同一类型消息只能由单个节点发出,否则仲裁机制将会失效。 譬如:如果有 3 只限位开关可使电机停止,必须定义 3 个功能重复的消息:为开关 1 定义消息 “STOP1”, 为开关 2 定义消息 “STOP2”, 以此类推,最终当电机收到以上任意消息便停转。

总线上所有设备共享同一个消息分配空间,如果需要改变某个设备的消息定义,必须充分考虑是否会影响其它所有设备。

在节点本来就不多的系统中(不超过 255),仅使用单播和广播就完全够用:譬如我要同时控制四个车窗升降, 分别发送四个数据包给四个玻璃窗也不会很低效,而且当我想单独控制某一个玻璃窗时也不需要改变数据包定义; 又如,当刹车等紧急情况发生时,使用广播包可以最迅速通知到每一个节点,即便车窗不响应该命令,被紧急事务打断一下也是完全可以接受的。

cd_bus2_cn.png

CD-BUS 介绍
2017 年初,我接手一个工业机械臂的项目,为了分别调试电机电流环、速度环及位置环参数,需要实时抓出电机运行中的数据,总线上还有很多传感器,即使是正常使用数据量也会很大, 同时还要兼顾成本和电路面积,市面很多总线协议均不符合需求,为此,我把 09 年的协议命名为 CD485 协议,并推出独立的控制器模组/芯片。

CD-BUS 协议只定义数据帧格式,不规定所装载数据格式;只支持单播和广播,不支持多播;只提供硬件避让、避让后自动重传,而应答及出错处理则由上层软件负责。

当前硬件支持的特性:
• 支持 CD-BUS 多主对等通讯协议,使用发送方地址按位仲裁
• 每个数据帧可装载 253 字节数据
• 8 个接收缓冲页,2 个发送缓冲页,每个页 256 字节
• 16 位硬件 CRC 校验
• 波特率范围 412 bps 至 9 Mbps(如果需要可以支持更高)
• 仲裁字段和后续数据可设定不同波特率
• 可兼容传统 RS485 总线设备
• 支持 SPI 和 I2C 接口
• 配置和使用简单

CD-BUS 协议
cd_bus_protocol_cn.png

如果把两个波特率设置同等大小,便可以在保留仲裁机制的同时与传统 485 硬件进行通讯,传统硬件优先级设置高于 CD485 节点, 由 CD485 节点主动避让传统节点。当然还可以关闭仲裁功能,完全使用传统通讯模式。

CD-BUS 和 CD485XX 控制器还适用于 RS485 之外的硬件媒介,譬如单线 UART 总线。

在低速率且成本非常紧的场合,也可以用单片机软件模拟实现此协议。

电路参考
cd485b1_sch.png

完整文档
cd_bus_intro_cn_170806.pdf (866.14 KB)

相关帖子

ailingg| | 2017-7-11 11:42 | 显示全部楼层
挺好的东西

使用特权

评论回复
linxy5596| | 2017-7-12 19:45 | 显示全部楼层
谢谢!分享!

使用特权

评论回复
ljt8015| | 2018-10-29 08:46 | 显示全部楼层
rs485实现10mbps的速率,线路就不能长了,485本身抗干扰不行,只能在设备内部通信使用

使用特权

评论回复
adewei| | 2020-10-3 22:31 | 显示全部楼层
很好的东西,希望能推广起来。可以用国产的FPGA  0.5美金左右。

使用特权

评论回复
newlined00| | 2021-5-22 19:12 | 显示全部楼层
对楼主做的东西很感兴趣,楼主能否介绍下,学了那些专业课后做的这个东西,我也想学下。谢谢。

使用特权

评论回复
newlined00| | 2021-11-4 13:59 | 显示全部楼层
最近正学习CAN总线,但我对传输方面不熟悉,尤其是那个OSI数据传输模型,请问楼主学了那些专业课后可以了解那个OSI数据传输模型?能否介绍下,非常感谢。

使用特权

评论回复
dukedz|  楼主 | 2021-11-8 18:13 | 显示全部楼层
newlined00 发表于 2021-11-4 13:59
最近正学习CAN总线,但我对传输方面不熟悉,尤其是那个OSI数据传输模型,请问楼主学了那些专业课后可以了解 ...

呃,我沒學什麼專業課,看一下相關的 wiki 就可以理解 osi 啊。

和軟件編程的模塊化思想差不多吧。

使用特权

评论回复
newlined00| | 2021-11-8 18:32 | 显示全部楼层
谢谢您的回复,我去看看。

使用特权

评论回复
ozy790812| | 2022-10-16 10:58 | 显示全部楼层
怎么联系

使用特权

评论回复
dukedz|  楼主 | 2023-11-29 18:01 | 显示全部楼层
经过多年不懈的努力,ASIC 芯片 CDCTL01A 已经量产了,欢迎大家试样:

• 最高 50Mbps UART 速率。
• 最高 50MHz SPI 时钟。
• 8 个接收缓存, 2 个发送缓存。(每个缓存大小为 256 bytes.)
• 小封装:QFN16 3x3mm.
• 3.3V (±10%) 单电源供电。
• -40 ~ 125 ℃ 工作范围。
• 支持晶振和外部时钟输入。
• 支持 4 线和 3 线 SPI。
• RI 管脚容忍 5V 输入。


CDBUS 资料:cdbus.org

cdctl01a.jpg

DSC_2710.JPG

DSC_2761.JPG

cdbridge_v5.jpg

072708qdkafn1xbk1i4pnq.png

芯片手册:

cdctl01a_datasheet_v1.1_cn.pdf (486.16 KB)

使用特权

评论回复
qiangtech| | 2023-11-30 08:56 | 显示全部楼层
楼主多年努力终有回报。

使用特权

评论回复
zwsam| | 2023-11-30 09:07 | 显示全部楼层

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

165

帖子

5

粉丝