Electronic – USB as a local bus in an embedded system

busembeddedlinuxusb

Is USB a reasonable choice for a local bus?

what are pros and cons?

what reliability concerns are there?

Bus spec device count ~4; peripheral devices are permanently connected to same PCB as host (soldered or via headers).

Some device are puny, e.g. serial port or temperature sensor, some are complex, e.g. an LTE modem or ethernet or wifi. Peripherals are such that are available as standalone USB devices or same chips are used in such devices. Linux is supposed to have all the drivers already.

Ideally I'd use only one bus (with hubs if necessary) for simplicity and eventually modifications without some components and with other low-speed components.

System spec ARM, Linux, DC powered, roughly equivalent to an Android tablet.

Best Answer

What you are looking at is a problem I like to call bus hierarchy.

You have high speed devices that need a fast low-latency path to the CPU (like the LTE modem) and slow devices like the temperature sensor. Connecting a full fledged LTE modem over I2C will seriously bottleneck the system. And connecting a temperature sensor on USB is a serious overkill. You need to prioritize.

What devices are to be accessed most often? Which ones need to respond quickly? And which don't need that much bandwidth?

Feel free to edit your question.


Edit:

USB may not be such an overkill after all. Only in the latest versions of it (2.0, 3.0) it has gotten the notion of being targeted to fast peripherals only. Before that, it was simply a Universal Serial Bus.

This doesn't change anything on the fact that it's implementation cost is very often too high.