Modules and Busses

Posted by Joe George at

It is ideal when we design modules if we can generalize the interface between them so that they communicate in a standard way. This has traditionally been done using a bus protocol. In the early days large circuit cards were required for functions that now are contained in a small part of an integrated circuit. So there may have been multiple memory cards that plugged into a backplane using a standard bus protocol. All the I/O options were also plug in cards. Even the processor required a card of its own. As circuitry has decreased in size, more functions have been integrated into integrated circuits and now busses are used inside of chips. Plug in cards are now generally used for single purpose I/O functions and are implemented with point-to-point protocols like PCI Express, HDMI, and SATA.

Some busses are used now to connect chips together like SPI and I2C. Many of the sensors we are designing have I2C and SPI interfaces. But a lot of the ICs we use in our modules do not have any standard interface at all.

I2C Bus Example (Thanks to Colin M.L. Burnett for releasing this figure under the GFDL license)

I2C is a two wire multi-drop interface (see This means that all the modules connect to the same 2 wires in parallel. This is great and theoretically one could put a number of modules on an I2C bus and all could talk to the master controller. But the problem is addressing. Each I2C slave module needs to respond to a unique address. Assigning addresses to the modules is generally done using zero or more pins on the devices. Many of the modules only respond to a single address. Some respond to one of two addresses based on the state of an address pin. So sometimes two modules could be put together but it is totally dependent on the particular design of the chip.

SPI Bus Example (Thanks to Colin M.L. Burnett for releasing this figure under the GFDL license)

SPI bus used in the independent slave mode works great for a multi-drop bus if the microprocessor supports it (see Each slave can be interrogated individually and identified. But unfortunately many microprocessors only include one slave select signal. So in practice SPI bus also has an addressing problem unless external circuitry is used to augment the addressing.

We are using SPI bus for one of our module families using external circuitry to augment the addressing. This allows us to stack four modules on top of a microcontroller module and an additional four modules below the microcontroller. I will explain more fully what we are doing in a future post.

Share this post

← Older Post Newer Post →