TC-USB – TURBOchannel USB host option


TC-USB is a single-slot-width TURBOchannel USB host option based upon a Cypress (former ScanLogic) SL811HS USB 1.1 controller. It can be operated at typical TURBOchannel frequencies between 12.5 MHz and 25 MHz. A Lattice ispMACH 4000ZE family CPLD serves as glue logic for interfacing the 8-bit USB controller and 32-bit TURBOchannel. I/O read and write transactions and interrupts are supported. A basic option module ROM implemented in the CPLD compatible with TCF0 and TCF1 systems provides option information. The USB host port is an ESD-protected USB-A receptacle connector capable of sourcing 500 mA of current (limited) to devices.

Available boards

Batch 1: sold out
Batch 2: sold out


TC-USB Rev. A schematic

TC-USB Rev. A V1.0 CPLD JEDEC file

TC-USB User's Manual Ver. 1.0

NetBSD kernel binaries

NetBSD/alpha 7.99.39 GENERIC with TC-USB and GPIO
SHA1 (netbsd.alpha.TC-USB.gz) = 4dcb38c927e229a42653adb0b4dd2d3feeb21c23

Note: NetBSD/alpha GENERIC supports TC-USB since CVS Rev. 1.369.

NetBSD/pmax 7.99.39 GENERIC with TC-USB and GPIO
SHA1 (netbsd.pmax.TC-USB.gz) = a70271d12b542c00b9af4b0f8032af25d0d19484

Note: NetBSD/pmax GENERIC_USB supports TC-USB since CVS Rev. 1.1.

Note: NetBSD/vax GENERIC_USB supports TC-USB since CVS Rev. 1.1.

2017-01-15: New TC-USB boards available

After still getting requests for available TC-USB boards from time to time, I decided to have the surplus of 9 PCBs from the first lot assembled with SMT parts. I will complete the boards with mechanical and THT parts as soon as ordered. Price could be kept at 43 € plus shipping per board, as increased costs due to lower volume could be compensated with some remaining parts from the first batch.

Number of available boards is updated at the top of this page. Order by writing to m4j0rd0m0@gmail.com.

TC-USB second batch

2016-10-12: NetBSD kernel binaries

I thought it could be useful for some of you if I would provide NetBSD kernel binaries with TC-USB and GPIO support for alpha and pmax. Device support has been committed to NetBSD already as tcu(4), but it still has to be added to all the config files and hopefully GENERIC kernels of the three architectures. For vax, this also means adding real support for the TURBOchannel bus adapter. Work is already in progress!

2016-09-21: User's manual, delivery

The first version of TC-USB user's manual is available above, just in time as most options have been delivered to you in the last days! I hope to hear from your experiences with the boards soon.
For the impatient: Flip switch S1-1 to ON in 12.5 MHz TURBOchannel systems only to gain a few percent of data rate, else leave it OFF (risk of data corruption). The other switches should be OFF. The factory default of all switches OFF is always safe.

2016-09-10: Test rig

This is what a TC-USB test rig looks like: A DEC 3000 AXP with all three TURBOchannel slots filled with USB options. Domination!

TC-USB test rig 1  TC-USB test rig 2

2016-09-02: Mechanical parts, shipping

The remaining mechanical parts (self-clinching nuts and blind rivets) arrived, fit well, so shipping will start in the next days. All of you who ordered should already have received an e-mail requesting your address data.

Blind rivets and self-clinching nuts top  Blind rivets and self-clinching nuts bottom

2016-08-28: Assembled PCBs

The assembled PCBs came back this week and while I still wait for the rivets and nuts (in transit) to arrive, I temporarily put together an option to adapt and complete the CPLD design.
The THT parts I will solder to all boards are the JTAG header, the 4-position switch, the 220µF USB VBUS capacitor and the custom USB connector. The 96-pin TC connector was hand-soldered by the EMS, the most economic solution for our batch size. All additional headers shown are optional and can be soldered by you.
Everything worked instantly when I first powered up the board and programmed the CPLD, which I consider a huge success! Further details will be posted here in the next days.

TC-USB Rev. A prototype 1  TC-USB Rev. A prototype 2

TC-USB Rev. A prototype 3  TC-USB Rev. A prototype 4

TC-USB Rev. A prototype 5

2016-08-08: ISA-WS-SL811

In a previous post I mentioned an ISA adapter for the SL811 I made to help debugging the NetBSD driver. While waiting for TC-USB assembly and the nearly finished options to return, I made a project site for this ISA-WS-SL811 adapter. The PCBs can be ordered through an OSH Park shared project, the schematic and BoM are available from here, and the Waveshare SL811 USB board can be ordered directly from them or cheaper at a certain auction site...

2016-07-28: PCBs

"TC-USB Rev. A" PCBs arrived yesterday from German manufacturer Ätzwerk. I heard before that they make quality PCBs in many technologies for good prices, and I can only confirm that. The board parameters are 144 mm x 116 mm, 2 layers, 1.6mm thickness, ENIG (Ni/Au) finish, green soldermask TOP + BOT, and white silkscreen TOP. Testing is always included.

TC-USB Rev. A PCB top side TC-USB Rev. A PCB bottom side

As mentioned, I consider the quality really good for the price. ENIG was chosen for best finepitch solderability.


The pictures from the microscope show for a sample PCB that there is only a small horizontal offset in the soldermask (vertical is perfect), but well within specification. It is more important that solder stop is even between the finepitch (0.5mm) pads (take care of your DRU files if you have finepitch, make soldermask isolation as small as allowed)! Cheap manufacturers with coarse processes will often just remove it.
BTW it is an insiders' tip that green soldermask has better process parameters and can be used for finer structures than other colors! This is also stated on Ätzwerk's website, as green can be applied automatically. I would only use green mask for finepitch.

TC-USB PCB soldermask horizontal TC-USB PCB soldermask vertical

Drill accuracy is also good, most vias (shown are 0.4mm "drill"/inner diameter vias) are hit exactly in the center.

TC-USB PCB drill accuracy

The somewhat dotty silkscreen in white was obviously done by an inkjet printer. Offset print and different colors are also offered, but it costs more. You will only see the dots in the microscope anyway, it looks fine with the naked eye.

TC-USB PCB silkscreen

2016-06-29: slhci driver, SL811 ISA adapter, custom bulkhead

I was busy hunting down bugs in NetBSD's slhci driver together with skrll@, even made a small SL811 ISA adapter for the WaveShare board to help providing hardware for more common (yet old) machines! Nevertheless I admit I should have spent my time more efficiently by moving up other tasks of the project (PCB! PCB! PCB!).

The custom bulkheads are here, laser-cut from 1 mm zinc-plated steel sheet and bent. I think I could get them for a real hobbyist price from a friend (just around 2.50 € for one). So you can hopefully forgive the somewhat rough edges and visible marks from bending. Next steps are getting and pressing in the fasteners, as well as complete and order the PCB finally! :-/

Custom bulkheads

Bulkhead detail

2016-05-17: TC-USB-Cn – a USB connector PCB

It has been a while since the last update, but I am active in the shadows. As pointed out by another VAXstation 4000 owner, the clearance of the slot window is really tight. So I pondered over how to get the USB connector into the middle of the slot. There seem to be no USB connectors (that I could find) on the market with more clearance from the PCB. The solution I finally found was to use one of these vertical USB-A connectors, mount it on TC-USB-Cn, a tiny PCB (which I ordered from OSH Park, just under 0.50 € for one) and mount this connector/adapter PCB to the main TC-USB PCB by using a 2x6 angled pin header for stability and clearance (5.08 mm). I will do the hand-soldering to keep costs small for us!

USB connector PCBs

2016-04-25: Prototype stable, first VAX with USB, GPIO

The assembled prototype seems to be in stable shape and works in my DEC 3000/400 as well as VAXstation 4000/60 with TC adapter (with a heavily hacked kernel). This might be the first VAX with USB ever! :-) I already started seeking and ordering parts for the collective order.

GPIO is a basic implementation, features 8 pins and is controlled by three registers (direction, input, output). Input register can always be read, direction register controls if an individual pin is a push-pull output or high-impedance (input) with weak pull-down. The output register determines if a high or low state is output, as far as the pin is configured as output. This also enables I/O configurations like open drain or tri-state. Only configurable weak pull resistors are not possible.
The GPIO pads (2x10 header, with 5 V, 3.3 V, GND) are directly connected to CPLD pins, which evaluates (LV)TTL levels, is 5 V tolerant, has weak pull-down resistors on the inputs, has built-in input hysteresis, and can source/sink up to -4.0/8.0 mA per pin.

TC-USB prototype PCBs

TC-USB prototype PCBs

2016-04-18: Collective order funding complete

Funding for the collective order is complete. The first (and maybe only) revision of TC-USB will be ordered in a lot of 30.

In the meantime and before botching it up with all our money at risk, I took another iteration and had a well-routed prototype board made at Eurocircuits which arrived just today. It (hopefully cleanly) connects a TC connector, the LC4256ZE break-out board and WaveShare SL811 board, together with LEDs and a header for 8 GPIOs, solid ground etc. The GPIO option will also make it on the final board (thanks Tobias for the suggestion!). I pay for the prototype alone of course (costs will not be allocated). And the final board design will not have much in common with this "naked" PCB of course!

TC-USB prototype PCBs

This prototype in a stable state is the prerequisite for me to continue with the project and kick off, otherwise I must assume it is not easily possible to provide good enough quality of the circuit. This would mean cancellation and refund.

I expect to finish assembly and tests of one prototype board in about a week, so stay tuned and keep fingers crossed...

2016-04-05: Hobbyist collective order of a professionally assembled option

PayPal deposit of EUR €79 (I'm in Germany...) per piece + shipping (EUR €9 worldwide insured for one) is required. Send your desired amount and your shipping address for an estimate to m4j0rd0m0@gmail.com. I will reply with payment details, please make sure you get the reply from aforementioned e-mail address to prevent fraud...

Excess money will be refunded individually (or donated to the NetBSD Foundation if you like) after completion of the project, which is likely if volume is increased further and/or everything goes as estimated. My decision for a refund policy is also a reason why common crowdfunding platforms cannot be used (not allowed), but I see no other practical way for me.
No business involved, I will not earn a single cent, just between hobbyists.

Deadline is April 17th, 2016. New orders are only possible until then. I must also reserve the right to cancel the project altogether with your money refunded.

This is a private sale (or better: collective order) under hobbyists, no warranty or guarantee. The options will be tested before shipment (in antistatic bags) of course.

2016-04-02: Proof of concept

NetBSD driver/glue for "slhci at tc" (slhci_tc.c)

Early proof-of-concept composed of a Lattice LC4256ZE breakout board and a WaveShare SL811HST board, all "frankensteined" with Dupont wires directly to the TC slot of a DEC 3000 AXP Model 400 (not really stable though, system's bus frequency is 22.2 MHz over those lengthy and capacitative wires, horrible grounding, ...):

Proof of concept 1

Proof of concept 2

Proof of concept 3

Proof of concept 4

dmesg output booting a NetBSD 7 kernel with above patch (sd1 is a USB drive attached to the SL811HST):

NetBSD 7.0 (GENERIC-$Revision: 1.368 $) #9: Sat Apr  2 17:50:31 CEST 2016
DEC 3000 - M400, 133MHz, s/n
8192 byte page size, 1 processor.
total memory = 65536 KB
(2048 KB reserved for PROM, 63488 KB used by NetBSD)
avail memory = 50248 KB
mainbus0 (root)
cpu0 at mainbus0: ID 0 (primary), 21064-1
tcasic0 at mainbus0
tc0 at tcasic0: 25 MHz clock
ioasic0 at tc0 slot 7 offset 0x0: fast mode
le0 at ioasic0 offset 0xc0000: address 08:00:2b:xx:xx:xx
le0: 32 receive buffers, 8 transmit buffers
zsc0 at ioasic0 offset 0x100000
vsms0 at zsc0 channel 0
wsmouse0 at vsms0 mux 0
zstty0 at zsc0 channel 1
zsc1 at ioasic0 offset 0x180000
lkkbd0 at zsc1 channel 0
wskbd0 at lkkbd0 mux 1
zstty2 at zsc1 channel 1 (console i/o)
mcclock0 at ioasic0 offset 0x200000: mc146818 compatible time-of-day clock
bba0 at ioasic0 offset 0x240000
audio0 at bba0: full duplex, playback, capture, mmap
tcds0 at tc0 slot 6 offset 0x0: TurboChannel Dual SCSI (baseboard)
asc0 at tcds0 chip 0: NCR53C94, 25MHz, SCSI ID 0
scsibus0 at asc0: 8 targets, 8 luns per target
asc1 at tcds0 chip 1: NCR53C94, 25MHz, SCSI ID 7
scsibus1 at asc1: 8 targets, 8 luns per target
slhci0 at tc0 slot 4 offset 0x0
slhci0: ScanLogic SL811HS/T USB Host Controller  (rev 1.4 or 1.5)
slhci0: Max Current 500 mA (value by code, not by probe)
usb0 at slhci0: USB revision 1.1
sfb0 at tc0 slot 3 offset 0x0: 1280x1024, 8bpp
wsdisplay1 at sfb0 kbdmux 1
scsibus0: waiting 2 seconds for devices to settle...
scsibus1: waiting 2 seconds for devices to settle...
uhub0 at usb0: ScanLogic/Cypress SL811HS/T root hub, class 9/0, rev 1.01/0.00, addr 1
umass0 at uhub0 port 1 configuration 1 interface 0
umass0: SMI Corporation USB DISK, rev 2.00/11.00, addr 2
scsibus2 at umass0: 2 targets, 1 lun per target
sd0 at scsibus0 target 2 lun 0: <DEC, RZ26     (C) DEC, 392A> disk fixed
sd0(asc0:0:2:0):  Check Condition on CDB: 0x00 00 00 00 00 00
    SENSE KEY:  Not Ready
     ASC/ASCQ:  Logical Unit Not Ready, Initialization Command Required

sd0: drive offline
sd0: sync (200.00ns offset 15), 8-bit (5.000MB/s) transfers, tagged queueing
cd0 at scsibus0 target 4 lun 0: <DEC, RRD42   (C) DEC, 4.5d> cdrom removable
cd0: async, 8-bit transfers
sd1 at scsibus2 target 0 lun 0: <INTENSO, USB, 1100> disk removable
sd1: 3824 MB, 7872 cyl, 16 head, 63 sec, 512 bytes/sect x 7831552 sectors
sd1: no disk label
root on le0