Expansion bus

From OpenCircuits
Revision as of 22:00, 24 February 2024 by DavidCary (talk | contribs) (rough draft)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search


Expansion buses are designed to allow people to mix-and-match peripheral devices and CPUs.


History

The earliest expansion buses were more-or-less directly connected to the pins of a CPU.

Some early systems had a unified "system bus" that both memory cards and peripherals plugged into, leading to "memory-mapped I/O". Typically a "system bus" is composed of the address bus, the data bus, and the control bus, and often also includes multiple pins dedicated to ground and power rails.

Later systems generally separate high-speed stuff (the CPU, the RAM, on-board video (if any), graphics card slot (if any), and coprocessors (if any)) (the "Front-side bus") from slower speed stuff (expansion bus slots, off-board cables and ports).

There are two different reasons for this separation: In low-cost microcontrollers, the cost of pins is a significant cost of the whole system, so (a) we can use a much lower-cost packaging (far fewer pins) if we don't expose the address bus or data bus outside the chip (by putting all of the program Flash and data RAM on the same chip as the CPU) (b) using a "narrower" bus to communicate with peripherals also saves a bunch of pins in those peripherals, making them cost less. In high-end systems, the CPU, video, and RAM run much faster than peripherals, so separating the busses allows the CPU to do dozens or hundreds of memory cycles while waiting for a peripheral to handle a single expansion bus cycle.

qwiic

SparkFun's Qwiic Connect System uses 4-pin JST connectors. It's based on the I2C bus.

UEXT

Universal EXTension (UEXT) is a connector layout which includes power and three serial buses: Asynchronous, I2C, and SPI separately over 10 pins in a 2x5 layout.

RC2014 bus

"RC2014 is a simple 8 bit Z80 based modular computer. It was designed to be simple. Simple to build, simple to understand, and simple to program."

Backbone Bus

Backbone is a proposal for a backplane interconnect that supports multiple bus masters.<ref> "Backbone Bus". </ref> Samuel A. Falvo II

STEbus

PC104

The PC/104 standards defines both form factors and computer buses allowing consumers to stack together boards from a variety of manufacturers to produce a customized embedded system.

PC/104 boards are stacked on top of each other like LEGOs, unlike nearly all other expansion buses.

The original PC/104 connectors are electrically the same signals as the IBM PC/AT but with a different, stacking connector.

PATA

Parallel ATA (PATA) is also electrically the same signals as the IBM PC/AT, but with a different physical hardware -- PATA uses ribbon-cables and square header pins.


Expansion bus design considerations

  • latency (often *more* important than bandwidth)
  • How far apart are the ends of the bus (length)?
  • How many data bits to transfer per transaction (data bus width)?
  • how many address bits to transfer per transaction (address bus width)?
  • Dedicated 1 wire line for each address bit and and separate wire for each data bit (easier to test)? Or somehow multiplex 2 or more of those signals (lower cost)?
  • How many peripheral devices can be plugged into the bus at the same time?
  • How many controllers can be plugged into the bus at the same time? (A single controller and everything else are peripherals? Or multi-controller?)
  • Can 2 identical peripherals be plugged into the bus at the same time, and how can software distinguish them?
  • hot-pluggable?
  • fault-tolerant?
  • EMI/EMC
  • Fixed, dedicated, unshared interrupt lines from each peripheral to the CPU? Or daisy-chained interrupt line?
  • Fixed maximum number of peripherals per bus? Or daisy-chaining an arbitrary number of peripherals?
  • What's the maximum fanout of the devices that drive the bus? Early TTL-based systems used chips with a typical max fanout of around 5, so "clever" techniques were required to support more than 5 peripherals. Modern high-speed systems often use point-to-point links (fanout of 1) for speed.
  • Backplane? Motherboard? Stacking connectors? Ribbon cables? Something else?
  • Off-the-shelf connectors available from second sources?
  • Rugged connectors that are reliable for hundreds of plug/unplug cycles?
  • stripboard/Veroboard with 0.1″ header sockets?
  • bandwidth

For many years, the bandwidth (the number of bits we can shove across the bus per second) seemed to be so important that we sacrificed many things to increase the bandwidth. But surprisingly often, new systems are specifically designed for *lower* bandwidth in order to regain some of the things that were sacrificed.


Related