RS485 Bus with collision detect

Hi all,

I plan to implement an RS485 Bus with multiple masters using an RX113. For CSMA I need 

  • to detect, if the bus is idle
  • check, if written bytes are interferenced by other write accesses

Does the RX family have support to do this both jobs in hardware? In the hardware manual I can see a bus collision detect, but only for the extended SCI mode and only for the break field.

And yes, I had a look to CAN bus and no, CAN is not an option. I have to transmit small and bigger packets and the same messages from different masters. Some times as p2p and sometimes as broadcast to all or as broadcast to a group of participants (like Ethernet vLan). Furhtermore I need voltage protection of the bus up to 60 V. RS485 have this feature.

And no, I don't want buy a Profibus ASIC :-)


Thanks for all help,


  • "RS485 Bus with multiple masters" - The only one I know that uses this is J1708, half-duplex multi-master, which is an automotive standard. As far as I know can be done with standard UART.
    You should find many application notes on this on the web.
    Hope this helps.
  • In reply to Kevin:

    Dear Keven,

    thanks for your hint. But I am not looking for a standard. I am searching for a RX feature for checking, if the bus is free to send. STM32 processors have a status flag, which shows that a byte is beeing received. So I am looking for an RX feature analog to the STM32 processors.

    A collision can be detected by receiving the transmitted byte an then compare. But listening, if the bus is free with an RX processor ...

  • In reply to Christoph:


    Are you asking if the RX supports RTS/CTS?
  • In reply to Christoph:

    No, I think RX113 has no possibility to see that it is receiving data during reception. You only have the receive buffer full interupt request when the receive is finished.
  • In reply to FrankL:

    I found a (theoretical) workaround using a timer.

    - a timer as monoflop
    - triggering with external receive line from RS485
    - triggering with first (falling/rising) edge of start bit
    - monoflop duration of ~1.5 Bytes of RS485
    - transferring all Bytes of a packet on RS485 without gaps. If there are gaps, the monoflop time need to be increased.
    - the monoflop time also defines bus access priorities

    It is an expensive and dirty trick. Thinking about a different uC which support it without workaround may be more wise ;-)

    Best regards,
  • The CDBUS protocol for RS485 avoid collisions just like the CAN bus:
    (There is a stand alone controller for CDBUS protocol.)