6425|11

1366

帖子

6

TA的资源

版主

楼主
 

关于总线冲突那点事(一) [复制链接]

 
  这个也是系列帖子,是关于酷叔一直想了解的话题:关于总线那点事。酷叔一直想了解的是CAN如何学习,但我想水两个帖子楼主在帖子中若有用词不当的,望各位加以交流纠正。

   在这个帖子中,关于总线的,我都以半双工总线为主题,一个RS485总线,一个CAN总线。就是因为半双工,所以大多情况下,我们都需要考虑到一个问题:在多从机的情况下,如何避免"同时"发送给主机的时候,如何有序地、不造成总线混乱地发送,这是在只有一条总线的情况下,需要考虑的问题。特别是需要广播去读取从机的某个信息,如果不做防冲突机制,总线一乱上发的估计都是一堆乱码。本贴主要说明RS485总线,MCU用的STM32。
  RS485总线不像CAN一样拥有硬件总线仲裁优先级之分,准确来说,所有的节点都可以是主机也可以是从机。如何让其总线不造成冲突,RS485上,楼主也有个方案,就是使用每个节点都带节点地址(拨码开关、信息写死绑定等手段都可以),利用软件不同节点延时检测总线是否空闲+DMA发送快速抢占总线两个方式来进行对其防冲突。
  以下楼主只是说明其原理流程,代码截图过程中可能不太清晰,但是思路上,我可以尽量做到清晰。


此内容由EEWORLD论坛网友RCSN原创,如需转载或用于商业用途需征得作者同意并注明出处





此帖出自stm32/stm8论坛

最新回复

,好流弊  详情 回复 发表于 2018-11-25 01:53

赞赏

1

查看全部赞赏

点赞 关注(2)
个人签名

1084534438 欢迎交流  [加油,一切皆有可能]

 

回复
举报

1366

帖子

6

TA的资源

版主

沙发
 
在这里,楼主还是以一个广播读取软件版本号,各个节点从机返回版本号为例进行说明。RS485总线与单片机通信需要一个转换芯片,必须转换TTL,也就是相对应的串口。常见的芯片有美信的MAX485等。其中都会有收发使能脚,两个使能脚不要同时使能,一上电默认为使能接收,当有数据发送的时候再使能发送,发送完成再使能接收。如此轮询来进行通信。
追踪到底还是串口问题,但是相比串口,更需要注意的是收发不能同时。总线通信上,楼主习惯使用FIFO队列来收发数据进行异步处理,也就是说不管只要有收到数据或者要发送数据,统统都放进FIFO队列中,当然如果你使用RTOS,也可以使用消息队列来进行收发数据。
所以我们需要做一个初始化的步骤:一些相关变量初始化、FIFO队列初始化、相关IO初始化、相关中断初始化。

   那么中断上,我们使能了三个中断,一个为接收完成中断、空闲中断、DMA发送完成中断(楼主使用的HAL库,HAL库的DMA发送完成会开启串口发送完成中断)。所以在全局中断里面我们需要判断这三个中断事件并做些相对应的事件逻辑处理。
   
此帖出自stm32/stm8论坛
 
个人签名

1084534438 欢迎交流  [加油,一切皆有可能]

 

回复

1366

帖子

6

TA的资源

版主

板凳
 
接收部分的解析就不说明了,因为涉及到的东西好像偏离了主题。那么我们需要考虑的是,如何避免发送的时候,自己的节点不会与其他节点发送造成冲突。我们还没需要一个思路,就是去判断总线上的接收端电平是否拉低作为硬件总线是否空闲,前面的空闲中断只是起到节点上第一时间没有收发数据,要真正能够有序发送,楼主在此还是使用不同节点不同延时阻塞判断接收端的电平是否被拉低作为以此发送优先级,越低地址的节点越容易抢占到总线率先发送。

   那么在发送接口上,我们需要判断的是,DMA发送上是否DMA发送完成标志是否成立,不成立的话返回错误,一次轮询后再继续发送。在这里我们是把要发送的数据存在一个缓冲区,待总线抢占到了才发送,所以在这里是需要改变发送状态变量。然后在任务中去轮询检测这个变量状态。
  
此帖出自stm32/stm8论坛
 
个人签名

1084534438 欢迎交流  [加油,一切皆有可能]

 

回复

1366

帖子

6

TA的资源

版主

4
 
那么我们可以建立一个线程或者任务,2ms一次都可以,进行检测防冲突标志是否有效,进而判断空闲是否空闲决定发送。

     

此帖出自stm32/stm8论坛
 
个人签名

1084534438 欢迎交流  [加油,一切皆有可能]

 
 

回复

6040

帖子

196

TA的资源

版主

5
 
谢谢分享!赞一个!
此帖出自stm32/stm8论坛
 
 
 

回复

578

帖子

0

TA的资源

纯净的硅(初级)

6
 
这种机制要整个网络的节点都遵守效果才会很好,不然冲突还是会发生的
此帖出自stm32/stm8论坛

点评

所有节点都遵守,也就是共用一套这样的机制。但是这个机制不能保证百分百不冲突。在我实际项目中,96个节点可以做到95%不冲突概率  详情 回复 发表于 2018-11-24 14:00
 
个人签名刻苦学习,共同进步
 
 

回复

1366

帖子

6

TA的资源

版主

7
 
lcofjp 发表于 2018-11-24 11:11
谢谢分享!赞一个!

谢谢队长支持
此帖出自stm32/stm8论坛
 
个人签名

1084534438 欢迎交流  [加油,一切皆有可能]

 
 

回复

9176

帖子

5

TA的资源

管理员

8
 
感谢分享经验
此帖出自stm32/stm8论坛
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
 
 

回复

1366

帖子

6

TA的资源

版主

9
 
迈尔风随 发表于 2018-11-24 11:35
这种机制要整个网络的节点都遵守效果才会很好,不然冲突还是会发生的

所有节点都遵守,也就是共用一套这样的机制。但是这个机制不能保证百分百不冲突。在我实际项目中,96个节点可以做到95%不冲突概率
此帖出自stm32/stm8论坛
 
 
 

回复

3416

帖子

0

TA的资源

纯净的硅(高级)

10
 
,好流弊
此帖出自stm32/stm8论坛
 
个人签名

So TM what......?

 

 

回复

2700

帖子

0

TA的资源

五彩晶圆(初级)

11
 

,好流弊
此帖出自stm32/stm8论坛
 
个人签名作为一个水军,就是尽量的多回帖,因为懂的技术少,所以回帖水分大,见谅!
EEWORLD开发板置换群:309018200,——电工们免费装β的天堂,商家勿入!加群暗号:喵
 
 

回复

2700

帖子

0

TA的资源

五彩晶圆(初级)

12
 
,好流弊
此帖出自stm32/stm8论坛
 
个人签名作为一个水军,就是尽量的多回帖,因为懂的技术少,所以回帖水分大,见谅!
EEWORLD开发板置换群:309018200,——电工们免费装β的天堂,商家勿入!加群暗号:喵
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表