[资料干货]

开源小芯片可以把 RS485 当作全双工使用,支持 50Mbps

[复制链接]
814|15
手机看帖
扫描二维码
随时随地手机跟帖
dukedz|  楼主 | 2023-12-25 11:11 | 显示全部楼层 |阅读模式
本帖最后由 dukedz 于 2024-3-6 15:17 编辑

我们知道,RS485 物理层是半双工,即便总线上只有两个节点,譬如一台 PC 和一个设备,设备也不能主动发数据给 PC,因为可能会和 PC 下发的数据冲突。

这也是为什么 RS232 始终不能被 RS485 所取代的主要原因,除了不能全双工,其它方面 RS485 都要比 RS232 优秀很多,譬如更远的距离、更高的速度、可以连接更多节点、更加抗干扰。

然而,现在可以通过这个小芯片,在半双工的 RS485 总线上,为任意两两节点之间,虚拟出全双工专线。
譬如总线上有 A B C D 四个节点,A B 之间可以随意互发数据,C D 之间也可以,A C 之间也可以,不会出现数据冲突的问题。
而且支持组播通讯:A 同时发数据给 C 和 D. 以及支持广播:譬如 A 同时发送数据给 B C D, 然后 B C D 还可以同时回复数据给 A.

cdctl01a.jpg

芯片的原理其实很简单,它是一个 SPI 转 UART 控制器,UART 端是有指定的数据包格式的(原地址、目标地址、数据长度共 3 字节头 + 用户数据 + 2 字节 CRC 结尾),芯片 UART 口可连接 RS485 接口芯片,控制 RS485 的收发,SPI 口则连接用户 MCU。

072708qdkafn1xbk1i4pnq.png

此 UART 控制器引入了 CAN 总线的仲裁功能,只不过收发是按照标准的串口 8N1 格式(一个启始位,8 个数据位,一个停止位,无校验位)。

在 RS485 上进行收发的时候,会通过包头第一个字节进行仲裁(第一个字节是发送方的地址),按位回读进行非破坏性仲裁,让优先级最高的节点优先使用总线,而低优先级的节点,数据会延后自动重传。

发送首字节时 RS485 是半驱输出,因为回读有延迟,速率建议不超过 1Mbps。
由于 RS485 支持全驱输出,所以从第二个字节开始,可以用更高的传输速率,此芯片速率可以达到 50Mbps(类似 CAN FD 的双速率,但由于 CAN FD 的高速部分依然是半驱输出,所以速率比较受限)。
在需要兼容传统串口的场合,使用仲裁模式时,需要让高速部分的速率和低速部分保持相同。

此芯片同时还支持另一种模式,可以全程使用高速波特率,同样可以把 RS485 当全双工使用 - Break Sync 模式。

原理也不复杂,总线空闲一段时间后,若某个节点想发送数据,需要先发送一个 break 字符(连续 10 个 bit 为 0 的特殊串口字符)。
break 字符在这里的功能是让总线退出空闲状态,而且若有多个节点同时发送 break 字符,也不会有不良影响。

等总线重新进入空闲后,每个节点等待不同的时间发送数据,优先级越高的节点等待的时间越短。由于各节点等待时间不同,所以不会发生数据冲突。
此模式适合节点数相对较少的总线,节点数多了,最大等待时间就会变长,影响效率。

除了以上两种对等通讯模式,还支持传统全双工和传统半双工模式,可以当作普通的串口扩展芯片使用。

芯片源码和细节说明:https://cdbus.org (中文版可参见附件中文数据手册)
CDBUS 的 IP 核 FPGA 用户可以免费商用。


芯片手册:
cdctl01a_datasheet_v1.2_cn.pdf (487.76 KB)

使用特权

评论回复

相关帖子

地瓜patch| | 2023-12-25 23:00 | 显示全部楼层
这个不错啊,

使用特权

评论回复
zzele| | 2023-12-26 06:54 | 显示全部楼层
看资料是真心不错,请给一下购买渠道吧,或者提供样品测试也好

使用特权

评论回复
jobszheng| | 2023-12-26 08:42 | 显示全部楼层
这个RS485总线是全双工 会不会在玩文字游戏啊

使用特权

评论回复
oufuqiang| | 2023-12-26 08:53 | 显示全部楼层
既然是上了协议芯片,那么也就意味着不能以外挂的形式实现升级兼容,那干嘛还要非得走485的电平逻辑。直接把通信那一套技术移植过来不就好了反正都得重新设计板子。加上通信那套调制解调技术速率飞起。

使用特权

评论回复
asdsfgwsafd| | 2023-12-26 09:08 | 显示全部楼层
加了仲裁分优先级收发就是半双工。全双工必须是同时收发,不论你是分频还是分压差分线都是同时。
一点延迟可能应用上效果没差,但是概念不能错

使用特权

评论回复
dukedz|  楼主 | 2023-12-26 09:10 | 显示全部楼层
zzele 发表于 2023-12-26 06:54
看资料是真心不错,请给一下购买渠道吧,或者提供样品测试也好

谢谢支持
坛友每人可以免费赠送 5pcs 样品,不含运费,默认寄 sf 陆运,运费也可到付,请联络客服改价,并告知论坛 id

https://item.taobao.com/item.htm?id=731585230875

使用特权

评论回复
储小勇_526| | 2023-12-26 09:29 | 显示全部楼层
还是倾向于使用CAN总线

使用特权

评论回复
dukedz|  楼主 | 2023-12-26 09:32 | 显示全部楼层
本帖最后由 dukedz 于 2023-12-26 09:33 编辑
jobszheng 发表于 2023-12-26 08:42
这个RS485总线是全双工 会不会在玩文字游戏啊

抱歉让您困扰
标题写的是“当作”,没说就是,应该好理解的吧
正文也有强调是“虚拟出全双工专线”

因为使用硬件控制器,总线可以快很多,多个节点同时要发的数据包会自动排队顺序发出,硬件自动处理,不需要用户介入,对用户来说,和真正全双工的物理层没有多少区别

总线速度不仅要看波特率,还要看有效利用率,而使用硬件控制器,可以让总线利用率达到最高,一点都不浪费总线
所以也不用担心这种虚拟出来的全双工的总线的带宽比真实全双工小

使用特权

评论回复
dukedz|  楼主 | 2023-12-26 09:47 | 显示全部楼层
oufuqiang 发表于 2023-12-26 08:53
既然是上了协议芯片,那么也就意味着不能以外挂的形式实现升级兼容,那干嘛还要非得走485的电平逻辑。直接 ...

485 便宜、简单、实时性好、通用、基于串口不担心过时

调制解调技术 虽然速率可以做到很高,但是不能保证实时性的,对实时性和稳定性有要求的场合不合适

外挂的形式也有,譬如把多个 rs232 设备,外挂一个小转接器,转成 rs485 挂在一条总线上,方便布线
然后电脑端使用一个 usb 转 rs485 的转接器,电脑可以识别为多个串口(或使用虚拟串口工具虚拟出多个串口)
然后使用各设备厂家的串口工具,打开对应的串口号,即可控制对应的设备

使用特权

评论回复
dukedz|  楼主 | 2023-12-26 10:18 | 显示全部楼层
本帖最后由 dukedz 于 2023-12-26 10:34 编辑
储小勇_526 发表于 2023-12-26 09:29
还是倾向于使用CAN总线

看产品需求

譬如我手边的数显直流电源,以及桌面小回流焊箱,对外都是 rs232

电脑端的软件只需要打开对应的串口号就可以控制对应设备,因为串口比较简单通用,不同操作系统都有一样的串口接口
用户想二次开发的话,串口协议也非常简单(而让用户对接 can 协议,会相当麻烦)

如果这些设备使用的是 can 接口,估计会让绝大多数用户抓瞎,首先一个 usb 转 can 的工具就五花八门、不太通用,linux 有通用的 can 网络接口,但其它系统却又没有
设备厂家想写一个上位机软件,也不知道要兼容多少工具,跨平台支持多操作系统更是要命

can 的高端市场已经被工业以太网抢差不多了,低端又有 485、lin 等瓜分市场,又没有串口那么简单通用,速率又不高、历史包袱又很重(譬如搞 can fd 的时候还要考虑协议是否要兼容 can2.0),除非是特定行业指定,否则我倾向于使用永不会过时的串口,且让串口变的更强更好用

顶楼上传了更多介绍的文档,内含多种总线的对比,如果有不正确的地方,请告知,我会及时修改,谢谢。


使用特权

评论回复
datouyuan| | 2023-12-28 14:24 | 显示全部楼层
收藏下。

使用特权

评论回复
英雄本色2022| | 2023-12-28 22:39 | 显示全部楼层
485的物理层抗干扰不行,同样的工业环境(有变频器伺服驱动器等),同样位置的配线,485明显通讯故障次数比CAN高的多,并且485芯片也比较乱,有的带总线开路保护,有的带总线开路和短路保护,还有的总线开路和短路保护都不带,导致总线偏置电阻和终端电阻很难配置

使用特权

评论回复
dukedz|  楼主 | 2023-12-29 11:05 | 显示全部楼层
本帖最后由 dukedz 于 2023-12-29 11:37 编辑
英雄本色2022 发表于 2023-12-28 22:39
485的物理层抗干扰不行,同样的工业环境(有变频器伺服驱动器等),同样位置的配线,485明显通讯故障次数比 ...

是的,很多人用 485 容易出错其实很多都是可以避免的,譬如:

485 AB 两根线最好始终和 GND 线一起走,一定不能不共地!!!

485 AB 线输出不要串 22 欧之类的小电阻

485 AB 线上,不要加寄生电容很大的 TVS 器件
485 规定了最小 -7V 到 12V 共模范围,然而很多人增加的 TVS 不合适,违反规定,缩小了该范围

485 接口芯片的 RO 脚没加上拉(或者 mcu 没开管脚上拉),导致发送时关闭接收的时候,RO 浮空收到干扰

上下拉电阻太弱,或者每个节点都有上下拉电阻,导致不同节点数的情况下,上下拉差异很大
建议较强的上下拉仅放在主机端,且不能省略,其余不加上下拉,即便加也只加很弱的上下拉

终端电阻节点内部不要预置,即便预置也要做成可配置使能,建议不接,或者外接
终端电阻建议串电容消除直流静态耗电

理论上来说,485 支持全驱输出,无论是传输距离还是抗干扰,都比半驱的 can 要强
can 设计用于小汽车,车内部距离不会太远,且不会有高压高功率的干扰源
譬如国外网友的实际经验也是如此:https://electronics.stackexchange.com/questions/94008/rs-485-can-signal-levels





使用特权

评论回复
zzele| | 2023-12-30 21:37 | 显示全部楼层
dukedz 发表于 2023-12-29 11:05
是的,很多人用 485 容易出错其实很多都是可以避免的,譬如:

485 AB 两根线最好始终和 GND 线一起走,一 ...

485 AB 线输出不要串 22 欧之类的小电阻 ------不明白是为什么?

终端电阻节点内部不要预置,即便预置也要做成可配置使能,建议不接,或者外接终端电阻建议串电容消除直流静态耗电           ----------串入电容多大合适呢?

使用特权

评论回复
dukedz|  楼主 | 2023-12-31 13:29 | 显示全部楼层
zzele 发表于 2023-12-30 21:37
485 AB 线输出不要串 22 欧之类的小电阻 ------不明白是为什么?

终端电阻节点内部不要预置,即便预置也 ...

节点稍微多一点,每个节点又可能单独加了 tvs 保护,总的寄生电容比较大,如果串了电阻会降低驱动力,驱动不了那么快,速率稍微高点就可能通讯不畅了。

终端电阻串的电容大小和速率也有关系,速率越快可以串越小的电容,串大一点也没问题,我习惯预留 100nF 电容。具体可以看一下 Ti 等大厂的文档,有相关参考的。

使用特权

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

本版积分规则

个人签名:支持仲裁的高速 RS485: https://github.com/dukelec/cdbus_ip

10

主题

168

帖子

5

粉丝