Octal UART shield for RasPi (up to 32 ports, if you dare).

Similar projects worth following
Project goals:
* 8-port serial UART expansion board for the Raspberry Pi3 (and 2...).
* Stack 4 boards for a maximum of 32 (plus TX0/RX0) serial ports on one RasPi.
* Based on the NXP SC16IS752 DUART chip, 4 per board. 24MHz (or 24.576MHz) master osc.
* Pi-3 "HAT" shaped board, but without the HAT-ID chip.
* Extra header to bring out the Pi's native TX0/RX0 pins.
* Selectable SPI host interface (SPI0, SPI1...).
* Aux 5V input, and on-board 3.3V regulator.
* DC fan output (standard 5V PC fan w/PWM+TACH).
* The host I/F pins are easily jumpered to default pins, or easily reassigned if necessary.
* TTL-serial I/O on 2x17 headers. The pinout (8 wires per group) is compatible with my other interface paddle boards, YASC2, YASC6, YASC8, YASC485 and YASC485D and YASCDMXRJ4.
* You COULD use this board with the previous 26-pin Pi header interface, but a few critical signals may not be a quick 2-pin jumper. That's what wire jumpers (or wire-wrap wire!) are for.

That's right... I used wire-wrap for making some of the jumpers!

Same wire-wrap tool I've had since 1983. It's survived many thousands of connections!


First attempt at "default" jumper signal assignments. Of course, if there's a GPIO conflict with another stacked HAT, you can move signals around.

Adobe Portable Document Format - 48.04 kB - 10/14/2018 at 05:05



YASC-DMXRJ4 schematic, for reference.

Adobe Portable Document Format - 63.77 kB - 10/14/2018 at 05:04


Adobe Portable Document Format - 139.89 kB - 09/18/2018 at 02:19


  • 4 × NXP SC16IS752 (SPI/I2C DUART)
  • 1 × 24MHz oscillator, 5x7mm, 3.3v CMOS

  • Progress... 8upPiShield

    kbdhog04/05/2017 at 21:06 0 comments

    17-Oct-2018: Wired up the 8upPiShield to an Arduino-DUE board, for test purposes. Just started a little test-code to wiggle SPI pins and other control signals. Just need to prove out that everything works. I chose the DUE (over the standard UNO) specifically because it has 3.3V I/O, which is what the shield is designed for (as it normally connects to a RasPi).


    14-Oct-2018: Received the balance of the missing parts and installed them. Ready to start functional testing. Since I don't really have the time to learn any RasPi software, I'm just going to use an Arduino-UNO to wiggle SPI pins and merely prove the DUARTs can do... something. I've also documented my initial attempt at the "default jumper wiring". See file repository.

    9-Oct-2018: See pics... The 1st prototype of the 8upPiShield, and a companion YASC-DMX4 interface board, are just about completed. In my haste to order parts and some other intergoofups, there were a small handful of parts that didn't get ordered. These should all be here by Friday though. Once those are all in place, I'll be ready for some more serious checkout. Who wants to craft a "standard" Linux-compatible 32-port serial driver for this thing? By standard, I mean to support typical RS-232/485 async "TTY" serial port functionality. I have zero Linux driver expertise, so the first real user is going to have to do it. In the meantime, maybe I'll fly-wire this over to an Arduino just to wiggle some SPI signals.

    16-Sep-2018: After a bit of a hiatus, I finally finished this board and sent it off for fab. I have a friend interested in driving many DMX serial ports with a Pi, so that was my motivation for wrapping up the hardware at last. It's a good thing I waited actually, because I found a lot of tweaks were necessary compared the 1st version from a year ago.

    In order to drive the DMX (lighting) control links, the baud rate needs to be 250K (or 500K), so a 24MHz master oscillator divides down nicely for that purpose. It can also serve up a good range of "standard" uart baud rates with a small timing error. If you want perfect "standard" baud rates, you could easily substitute a 24.576MHz master oscillator.

    The DMX physical interface for the initial application will be provided by a "YASCDMXRJ4" interface board... which I've also finished (but not uploaded yet). It merely provides 4 independant "RS485" ports, pushed out over RJ45 connectors, in the commonly accepted pinout for "DMX-over-UTP". For each 8upPiShield, you would need 2 of the YASCDMXRJ4 interface boards. The cabling is like a standard 34-pin "floppy drive" style ribbon cable.

    18-Apr-2017: I added another jumper block allowing more flexibility with the 4 DUART interrupt signals. As this is my first RasPi shield - I might soon discover that my "default" signal assignments might not be optimal. Schematic & layout updated.

    11-Apr-2017: Essentially done. Now I'll do my usual 2-3 days of obsessing over it, optimizing, nudging, tweaking, etc.. If anyone has a suggestion, now would be a nice time to let me know. See layout pic.

    10-Apr-2017: Moving along nicely with routing the tracks. So far, no showstoppers. See pic.

    7-Apr-2017: A lot of rearranging (compared to the 8upShield for Arduino). Went round & round with the layout and what to do with the serial output headers. Finally, settled on using two 2x16 headers. This will allow easy ribbon-cabling to the external YASC interface boards. Once I start routing tracks for the 1st DUART chip I'll know if this is a practical layout. Keeping this to a 4-layer board.

    5-Apr-2017: Began converting the 8upShield (Arduino) layout to the 8upPiShield version. So far, seems feasible.

    5-Apr-2017: Just created this project. Stay tuned!

View project log

Enjoy this project?



Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates