I began laying out my modified RC2014 bus and I realized it has more problems than just missing signals. There's not termination, layout is not friendly to cross coupling concerns, etc. It's a great breakout for a z80 but it's a badly designed bus for a backplane based system so I'm entirely dropping it. However, I have a better solution.
While researching some of these issues I ran across STEbus. I'm somewhat surprised I haven't run into it earlier. It's got a lot going for it:
- It's a proper standard. IEEE1000 to be specific. (latest rev seems to be 1988)
- It's designed to be processor agnostic so it's not just a breakout for a specific processor's pins.
- It was quite successful in its day and there are many industrial automation modules available
- The physical layout is based on eurocard (STEbus means STandard Eurocard bus). It supports 3U and 6U 160mm cards and uses the standardized DIN 41612 plug and socket. This means subracks and cases are plentiful and easy to find.
It's essentially an 8-bit version of the VME bus designed to reduce costs when 8-bits are enough. (often the case in industrial automation settings) It never really caught on in the homebrew computer world because it came a bit late when ISA was already dominating with the IBM PC and clones. It's a shame because it's really a great bus for the purpose. There are some homebrew computers using the bus and a lot of the industrial systems are useful too including a variety of CPU boards (z80, 6809, 68000, etc.), serial boards, etc.
One of the design goals of the bus is to make it very easy and inexpensive to create peripheral cards for STEbus. It puts most of the tricky arbitration logic on the System Controller card (often a CPU card) so peripherals typically just need some basic logic, buffers, and address decoding.
I'm attaching the relevant standards documents to the project but I'll summarize the important parts in this post.
The physical layout uses 100mm (3U) x 160mm eurocards. 6U cards are allowed but not suggested. This small size decreases cost and encourages separation of functions onto different cards. There are a few classes of cards to will different roles.
- System Controller - This is a required and there should be only one. It generates the system clock, system reset, and transfer error signals. This can be a separate card or it can be combined with another card. Often this is part of a CPU card.
- Arbiter - This handles allocation grants for masters. The STEbus allows multiple master cards (usually CPUs but can also include DMA sources) and the arbiter decides which gets to control the bus. Like the System Controller, this can be on a CPU card.
- Master - This is a card that can control the transfer of data on the bus. This is usually a CPU board or a DMA controller. There can be a special Master call the Default Master which automatically gets control of the bus until it releases control. A Master can be Release-On-Request (the Default master is always RoR) or Release-When-Done. A Default Master does not need to be present and if one isn't, the Arbiter will choose a current master.
- Slave - This includes all boards that can only receive and respond to bus transfers. Most peripherals will be Slave cards. A card can act as both a Master and a Slave.
The STEbus is asynchronous and uses various synchronization and attention lines to sequence data transfers.
A CPU card can use off-card memory but is limited to 1 MiB due to the 20-bit address space of the bus. A paging system can be implemented to address more memory or a CPU card and contain more memory which isn't accessible over the STEbus. In addition to memory, the bus allows for 4 KiB of I/O addresses for CPUs which have I/O ports (like the Z80).
The bus does not differentiate between DMA requests, interrupts, and similar functions but instead provides 8 attention request lines. These can be used for DMA, interrupts, and similar functions such as notifying of an imminent power failure.
Electrically, there are 2 power buses available. A +5V bus with a maximum available 4A per card. This is intended to be the primary power for all cards. In addition, +12V and -12V buses are provided at a maximum of 1A per card. These have looser noise requirements and are intended for RS-232 signaling, bipolar OPAMP rails, etc. Finally, an optional +5V battery bus is available at a maximum of 1A per card. This connects to a battery backup or UPS and is intended for critical components to function in the event of a power failure. It may be tied to the main +5V bus if a UPS is not available.
There are a few STEbus projects on hackaday including this one which contains links to a lot of STEbus cards and some great information on the bus itself.
Discussions
Become a Hackaday.io Member
Create an account to leave a comment. Already have an account? Log In.