Remote Programmable Unit serial Bus

The RPU_BUS has four twisted pairs in a CAT5 cable that includes RS-422 pairs TX and RX, an RS-485 pair  
DTR, and a pair used for ground

Image is the link to Forum.
RPU bus Idealized Philosophy

Shields are for communication, they connect the RS-422 from a host computer to several embedded controllers. An RS-485 channel allows out of band management (e.g. the hardware allows for point to point usage, which I use to control boot loading a selected controller).
Programmable application boards have microcontrollers that are programmed with an open source toolchain (GCC). They have DIN Rail mounting options and pluggable terminal options. The idea is to have a Raspberry Pi connected to one or more controller boards which can then provide the toolchain to compile firmware behind a reasonably secure network interface. I use SSH for access and have no raw serial ports exposed on my network.
Current loop sensors: HT, MT, and LT are Capacitive sensors with Thermistors that make a timing pulse with a duty ratio that measures the thermistor and a width that measures the capacitor. OneShot is a pulse extender for when a switch is closed. The output from these transmitters are sent over a 100 Ohm twisted pair (transmission line). Input capture hardware (ICP) is recommended to measure the pulse timing.
Driver boards. CL8 is used to select a sensor loop to power, K3 is used to latch solenoids, ICSP does SPI level shifting and has IOFF.
I offer my boards through Tindie I sell on Tindie Note: for my referance once I mark an item as shipped on the store then I have to conntact tindie's customer service (e.g. hello at tindie dot com) with the order#, customer name and any adjustments or refunds that need done.
A Host computer (e.g. a desktop with RPUftdi or a Pi Zero with RPUpi) connects to the transceivers which drive the differential pairs. The RX and TX lines from the microcontroller board(s) are also connected to the transceivers. The transceiver connection acts as a crossover (e.g. host TX to MCU RX, and host RX to MCU TX), although the pair names match the MCU side (that is the side I was looking at when I named them). Because the transceiver driver-enable is taken from the transmitted signal it is automatically activated. Most general purpose RS232 serial software (e.g. PySerial, picocom, avrdude...) can be used with this setup because the transceiver control is not needed. Half duplex RS485 transceivers need to be controlled by the UART core software, and understanding how a push to talk system works. Personally, I have no desire to make avrdude respect a push to talk system, but the RS-422 does need to change into a point to point mode when uploading firmware, and application firmware needs to known it is on a multi-drop serial and should only talk when addressed (or data will be scrambled). The host transmits a command to the microcontrollers as though sent on a general purpose RS232 serial bus. The microcontrollers see the command and react accordingly. A single host transmit is seen by all the controllers, so some provision is needed on the controller side to prevent multiple answers (collision). Image is the link to Forum. MultiDrop Philosophy When writing software for the bus the feel is natural. Characters are sent out of the UART in the normal fashion, e.g. LOW bits of the character will pull down the TX line from its resting HIGH state. The LOW will then enable the transceiver driver that places the signal on the multi-drop pair to be seen by all the enabled differential receivers. I use the bus manager to limit access to one host. I use common RS-232 software libraries to control the bus from the host side. On the microcontroller side, the multiple MCU's can collide when replying but otherwise common RS-232 libraries work as well. My example software handles collision by using two characters for addressing (e.g. "/0", "/1", "/2"...) and a newline after the command. The first character ('/') is seen by all devices after a newline and used to stop output from any sending, but it is not echoed. The second character is used as the address and will start the echo, at which time both characters are sent by the addressed controller. The UART core (e.g. RPUno/lib/uart.c) I used for my examples is for general purpose RS-232 (e.g. without transceiver control) and has a stdio-compatible stream interface. During initialization, the serial stream is assigned to stdout and stdin which allows using printf() (e.g. the classic C style).

Copyright (C) 2017 Ronald S Sutherland