我计划在Linux上开发一个简单的Profibus master (FDL级别),更具体地说是在Raspberry Pi上。我有一个基于MAX481的RS485收发器。主机必须在有多个主机的总线上工作。
根据Profibus规范,您必须计算总线上的'1‘位的数量,以确定何时轮换访问令牌。具体地说,在11 '1‘比特之后,下一帧开始。11位也恰好是一帧。
在Linux中,如何检测这11个'1‘位?它们不会被驱动程序注册,因为没有开始位。所以我需要一个比特流,而不是解码的字节。
最好的方法是什么?
发布于 2021-08-30 15:41:39
不幸的是,使用微控制器/微处理器串口是一种不好的选择。
您可以在微控制器UART外设中生成设置START_BIT、STOP_BIT和PARTITY_BIT (even)的11位。也许你会幸运地从数据报中接收到完整的字节,而不会丢失。
然而,PROFIBUS DP数据报最大可达244个字节,并且在数据报传输期间,PROFIBUS DP在字节之间不需要空闲位。您需要一个带FIFO或寄存器的通用异步收发器硬件或通用异步收发器微控制器外设,支持高达244字节的-这是非常罕见的,一旦这一要求是非常具体的现场总线。
另一个方面与波特率的兼容性有关。通常,在普通的微控制器UART上,PROFIBUS PD波特率的整个范围不是完全可用的。
我的建议:
使用工业通信专用处理器(如TI Sitara am335x)实现
https://stackoverflow.com/questions/64210872
复制相似问题