Question: 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.

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.
Unless the device already has a USB interface, such as a keyboard or mouse, this is going to entail a lot of work and extra hardware. For example, connecting to a temperature sensor that only has an I2C interface. You are not going to be able to add a USB interface to the sensor, so you will have to add a small microcontroller, such as a PIC18 that has both a USB device and I2C interface. The PIC then talks USB back to your host and I2C to the temperature sensor. But why not just connect the temperature sensor directly to your host microcontroller?