倒车串口RS485半双工总线协议理解

逆向工程 硬件 串行通讯 协议
2021-07-03 14:04:16

我有一个 master & slaves 设置,其中奴隶也只在说话时响应。我可以窥探和记录现有的主/从对话。我有一个额外的从设备,我想与之进行对话,但到目前为止失败得很惨。我怀疑每个设备都有自己唯一的 ID,但不知道我额外的从设备 ID 是什么。

我从逻辑分析仪和值得研究的天数中了解到的:

  • 消息以 0x10 开头
  • 在消息结束之前是一个 2 字节的 CRC-16/MCRF4XX,小端(感谢:reveng!)
  • 消息以 0x1003 结尾

怀疑:

  • 第一个字节是消息类型标识符,我已经观察到了大约 12 种基于此的独特消息类型。基于此的每个消息“类型”具有相同的长度。
  • 第二个字节可能???是目标设备 ID ???。基于这种怀疑,我取了前 20 条唯一消息,将 255 个不同的 ID 插入到这个字节中,并发送了每个消息(正确打包为 start + data + crc + end)——它没有响应任何一个。

启动期间来自总线的数据样本,我删除了 start、crc 和 end 字节:

0xff020300010400
0x09510000
0xff01030002ffff
0xff020300013c03
0x01000000
0x350d0000
0xff01030002ffff
0xff020300020200
0x02007400...big packet with lots of text from a slave A...
0x340d7400...big packet with lots of text from a/the master?...
0xff010300010000
0xff020300010800
0x09510000
0xff01030003ffff
0xff020300030200
0x02007400...big packet with lots of text from a slave A...  (exactly the same as prior 2 big packets)
0x340d7400...big packet with lots of text from the master or yet a third slave?... (exactly the same as prior 2 big packets)
0x0952040000000080
0xff010300010000
0xff02030001101000
0x09510000
0xff01030004ffff
0xff020300040200
0x02007400...big packet with lots of text from a slave B...
0x340d7400...big packet with lots of text from the master or yet a third slave?...
0x0952040000000080
0xff010300010000
0xff020300012000
0x09510000
0xff01030005ffff
0xff020300050200
0x02007400...big packet with lots of text from a slave B...  (exactly the same as prior 2 big packets)
0x340d7400...big packet with lots of text from the master or yet a third slave?... (exactly the same as prior 2 big packets)
0x0952040000000080
0xff010300010000
0xff020300010400
0x09510000
0xff01030002ffff
0xff020300020200
0x0952040000000080
1个回答

听起来很像我最近的 CAN 总线嗅探。哈!这很有趣,RS485 是 CAN 的流行替代品。:P

一些快速的想法:

  • 您没有正确终止“RE”主节点。
  • 您需要检查第一个通信以查看是否有打开序列,例如建立权限。
  • 我看到您的输出中的数字在增加。这绝对不是偶然的。
  • 大包的大小都一样吗?如果没有,数据包中的某处将有一个长度值。您将需要某种程序来检查每个数据包是否有任何字节或字与总数据包的长度或后面的长度匹配(以及带有/不带有 CRC+0x1003)。

谷歌搜索让RS485 half duplex bus protocol crc 0x1003我找到了一些关于协议的有趣 PDF。除非制造商非常偏执,否则他们将在 RS485 总线上使用“正常”的东西:

  • Modbus(可以有 ASCII 或 TCP 帧)。我没有研究过 TCP 帧,但如果这可能是递增值的来源,我不会感到惊讶。
  • 可能是CANopen?为什么不是协议......:P
  • 这个来自上面谷歌的PDF 结果列出了我以前从未听说过的各种不同的协议。

我设置了一个chipKIT uC32,中间有多个UART,一个“主”端和一个“从”端。您可能需要每个电路的“驱动器”或“收发器”IC。哦,Arduino 可能会工作,但是chipKIT 中的80MHz PIC32 会摇摆不定。一旦您可以中继消息并且系统继续工作,您就会对正在发生的事情有更多了解。在物理和信号方面。