我正在使用AVR微控制器设计一个带RS-485网络的系统。我完成了大部分工作。我不明白的是,多个设备试图同时进行通信,以确定线路是否清晰可传输。我正在设计的设备都是从设备。
我无法找到有关此主题的文档。如果有人能给我一些解释并提供一些手册供参考,那就太好了。
问候
答案 0 :(得分:0)
我会寻找专门针对您的答案的来源,例如以下内容涵盖了主题。
http://www.avrfreaks.net/index.php?name=PNphpBB2&file=printview&t=61646&start=0
答案 1 :(得分:0)
提到
你建议公共汽车上有一位大师。如果确实如此,那么就不需要异步访问总线,因为这种方案中的主设备是唯一可以启动通信的设备,协议应该以主设备知道何时可以传输的方式设计(例如,通过使用超时进行回复和奴隶只响应请求)。我正在设计的设备都是从设备
您应该检查是否需要异步访问总线。
不需要异步访问总线只需要很多东西,因为你可以依赖标准通信协议,如modbus RTU。您至少可以找到AVR的几个不同的实现示例(例如Arduino库)。
要求异步访问(任何设备都可以启动通信)要做得更难,但有解决方案。不幸的是,我没有找到任何开源。
琐碎的方法是检查串行输入缓冲区,等待给定的超时(设备具有的优先级越低),再次检查。如果它是空的发送并等待确认。如果传输不成功等待(同样给定设备具有较低优先级的时间越长)并尝试重新传输。 它并不像听起来那么容易。专业方法是回读您发送的内容并在发送时检测冲突(以避免使用超时)或甚至更好 - 设计总线以使此类冲突对更高优先级的发送设备没有影响 - 这就是CAN的工作原理。 p>
我见过的其他业余认可是使用专用线路,发送设备下拉,其他人探测但是当总线很长时仍然存在竞争条件(需要额外的超时和确认)。
设计令牌协议也是一种选择(但很复杂,仍然需要协调)。您可能会发现这个blog post很有用 - 特别是评论显示有多少问题需要解决。
如果您决定异步访问是必须的,我会建议使用CAN。它将为您节省大量工作,并且几乎没有开源实现RS-485的异步通信存在它可能表明主题很难或不需要努力(有CAN)。