Electronic – Hardware/software needed to decode Differential Manchester


I have a differential manchester encoded 0 to 5v data stream at 62500bps. What hardware do I need to get this into something I can work with, ie arduino, pi, etc?

I have searched for chips/eval boards on digikey and can't find anything that can decode differential manchester.

I have hooked it up to an arduino uart, but it is doing 8-N-1 on something that I need to see all the bits. It's is also decoding it improperly (of course). I have thought of sampling at double the baud rate and trying to do something with a lookup table, but this seems awfully hackish.

Below shows my thought process and the logic analyzer is giving me enough information to analyze the protocol, but now I need to turn it into something I can process in real-time.

Error free to five 9's, some errors will be known because packets have a checksum. One off solution.

Other Possible Relevant Information:

A continuation of this question regarding an unknown serial bitstream.

Valid Packet This picture shows a typical packet of the DeLaval Alcom bus.

We are grabbing 13 bits at time and ignoring the first and last nibble.

Thus the packet is: FF 04 9F 03 00 5B.

Skewed Packet
This packet we cannot read correctly with 13 bits. We have a bit skew because the number of start bits are different as compared to the previous packet. This can be fixed in software.

  • Packet #1 – This packet checks if MPC (or any node) is alive
  • FF 54 9F 03 00 43
  • FF Start  54 To node 84, this node is an Alpro MPC.
  • 9F Packet type 
  • 03 From node Alpro master
  • 00 Data
  • 43 calculated checksum (not sure how yet, 2 Byte CRC 16?)

These are "are your alive" packets. They are sent and don't wait for
response. Response comes later if node is alive.

  • Sample of packets 
  • FF 55 9F 03 00 F6
  • FF 56 9F 03 00 B2 <- saw this same packet twice with the same checksum
  • FF 5C 9F 03 00 B1
  • FF 5D 9F 03 00 04
  • FF 04 9F 03 00 5B
  • FF 0F 9F 03 00 ED <- node 15 does not exist. maybe checking that it is there or not?
  • FF 58 9F 03 00 C8
  • FF 59 9F 03 00 7D
  • FF 5A 9F 03 00 39
  • Packet #2 – This packet is from the alpro master saying what to show on the screen of the sort gate MPC: 1463.

  • FF 3D 0D 03 1B 17 B7 05 01 00 00 00 00 00 00 00 00 D5

  • FF Start
  • 3D to node 61, sort gate controller
  • 0D Packet type
  • 03 From node, alpro master
  • 1B 17 Data of 6935 means nothing to me.
  • B7 05  Data 1463 16 bit little endian, which matches the cow we used.
  • 01 00 00 00 00  00 00 00 00 Data, no idea
  • D5 calculated checksum.

FF start is not really FF. It's a string of 1's of somewhat variable length.

Best Answer

Well it can't be received with an UART easily. One thing you could do with Arduino is to feed the data to Timer Capture Input pin and triggering on the edges and every time an edge happens make it trigger on the other edge and look at timer value how much time was between edges to decode the bits.