From Hackstrich

SROUTE is a digital audio distribution router. More details coming later on.

Project Status

  • 2017 - The KSEND product this relies on never made it to market, so I'm calling this project as completed as it's going to get. It successfully routes data between ports, which was the goal. Expansion busses aren't implemented in software yet, but seem OK hardware-wise. I'll revive this if I find another use for it or decide to build my own version of the KSEND.
  • 2015 - All basic functionality working now for routing (not expansion bus or built in KSEND yet). Waiting on KSENDs to be available before I can do any more, so this is on hold for now pending that.
  • 2014-10-16 - Fixed second half of the LEDs, the !CLR pin on the shift register wasn't soldered. Worked on the CLI so we can dynamically set routes, there's still something wrong with the SPI bus that needs troubleshooting. Destination is OK once it gets to the CPLD, but source is always zero for some reason.
  • 2014-10-14 - Sorted out SPI issues, was numerous off-by-one errors on the CPLD side. Can now set up a route via the MCU and have tested it successfully w/ the KSEND! Next is to actually make the route configurable and add signal indication via the CPLD for link LEDs.
  • 2014-10-13 - Worked on SPI bus more, something is still wrong between the two, data is not decoded correctly. Hardcoding a route on the CPLD seems to work w/ a function generator fed in one port, though.
  • 2014-03-31 - Started work on SPI bus between CPLD and MCU, CPLD now decodes data from the bus and outputs it on the debug port.
  • 2014-03-30 - Added basic routing code to the MCU, fixed off-by-one bug that was corrupting random memory after the framebuffer.
  • 2014-03-22 - Assembled the routing matrix and line interface for channels (not KSEND or trunks). CPLD programs and is outputting a test signal on channel 1. When cross connected to channel 2 it reads all zeroes as the + and - inputs to the RS485 transceiver are identical. Need to troubleshoot this.
  • 2014-03-17 - Found that the Monitor button is shorted to ground somewhere on the UI board, need to investigate that more. Got the Next button cycling through different channels when in Monitor mode.
  • 2014-03-16 - Implemented a framebuffer in PIC memory and wrote basic functions to paint points, lines, rectangles, text, and XBM-format graphics into the buffer then draw the buffer to the screen.
  • 2014-03-14 - Wrote basic LCD driver code and troubleshot for awhile, eventually found two capacitors missing, added them, and now display works! Next steps are to work more on the LCD driving code and start bringing up the CPLD.
  • 2014-03-13 - Assembled power, PIC, and UI section of board.
  • 2013-10-14 - Ordered 2 PCBs from MyRO.
  • 2013-10-08 - Board completed and checklisted.
  • 2013-07-21 - Schematic completed and checklisted.
  • 2013-07-20 - RS232 and +5V rail implemented, still need to finish a bit of cleanup, add receive termination, test points, and any remaining diagnostic LEDs.
  • 2013-07-19 - Schematic thought to be feature-complete, Andrew reviewed. Remaining to be done: Receive termination on channels, RS232 port, +5V for KSEND, test points, diagnostic LEDs.
  • 2013-07-13 - Schematic/BOM work continues. Completed line driver/receiver, routing fabric, power, and logic, need to finish UI.
  • 2013-06-30 - Started putting schematic together.
  • 2013-06-29 - Initial design ideas.

System Architecture

  • 12 KSEND channels
  • 4 busses to chain SROUTE boards
  • 1 KSEND module on-board (optionally) to allow for channel monitoring and feeding audio in via the SROUTE
  • USB connectivity to PC for control (and a second connection to the onboard KSEND for audio)
  • RS232 connectivity to PC or other control system for control


  • G/Y LED for each port
  • 132x32 graphical LCD for status displays
    • Pushbutton to scroll through screens
  • RGB LED for "is everything okay" indication
  • KSEND jacks come out the front for line in/monitor
    • Pushbutton to turn on/off monitoring
    • LED to indicate if monitoring is on

Microcontroller Requirements

  • USB for control
  • RS232 for control
  • SPI for communicating with KSEND
  • SPI for communicating with routing fabric CPLD
  • SPI for communicating with display
  • I2C for communicating with other SROUTEs on the stacking bus

MCU/CPLD Protocol

  • 4-wire SPI
  • Frames are from nSS going low to nSS going high again
    • Byte 0
      • MCU->CPLD - Destination channel
        • 0 = NOOP, don't change routing just get status bits back
      • CPLD->MCU - Bit mask of front panel input status
        • 0 = idle
        • 1 = actively receiving audio
    • Byte 1
      • MCU->CPLD - Source channel
        • 0 = disconnect destination channel
        • 1-8 = front panel inputs
        • 9 = KSEND
        • 10-13 = trunks
      • CPLD->MCU - Bit mask of other input status: 0 = KSEND, 1-4 = trunks
        • 0 = idle
        • 1 = actively receiving audio
    • Byte 2
      • MCU->CPLD - Reserved, send all zeroes
      • CPLD->MCU - Status of change request
        • 0 = OK, channel changed
        • 1 = Error, channel not changed

Rev. 1 Issues

  • Tabs need to be all in one plane, having an L shape doesn't let you snap the board off
  • Tabs should be half as frequent
  • C39/40 on BOM as 0.1uF and 10uF on board, latter is right - Fixed on BOM
  • LED2 footprint doesn't even come close to matching
  • LCD over the back of through-hole pins of the connector isn't ideal
  • Pins on HDMI connectors don't quite line up right
  • JTAG pinout is mirrored (and excessively large)
  • Buffers are on BOM as U22-U24 but one of those is actually the RS232 chip? - Fixed on BOM