I2C Bus
Last updated
Last updated
I2C is a packet-switched serial communication protocol that allows multiple master devices to connect to multiple slave devices using only 2 wires per connection. It is intended for attaching lower-speed peripheral ICs to processors and microcontrollers in short-distance, intra-board communication.
Pixhawk/PX4 support it for:
Connecting off board components that require higher data rates than provided by a strict serial UART, such as rangefinders.
Compatibility with peripheral devices that only support I2C.
Allowing multiple devices to attach to a single bus (useful for conserving ports). For example, LEDs, Compass, rangefinders etc.
:::note The page contains information about how to use (rather than integrate) I2C peripherals and solve common setup problems. :::
:::tip IMUs (accelerometers/gyroscopes) should not be attached via I2C (typically the bus is used). The bus is not fast enough even with a single device attached to allow vibration filtering (for instance), and the performance degrades further with every additional device on the bus. :::
Drivers should #include <drivers/device/i2c.h>
and then provide an implementation of the abstract base class I2C
defined in I2C.hpp for the target hardware (i.e. for NuttX ).
A small number of drivers will also need to include headers for their type of device (drv_*.h) in - e.g. .
To include a driver in firmware you must add the driver to the board-specific cmake file that corresponds to the target you want to build for. You can do this for a single driver:
You can also include all drivers of a particular type.
:::tip For example, you can see/search for CONFIG_DRIVERS_DISTANCE_SENSOR_LIGHTWARE_LASER_I2C
in the configuration. :::
Just a few examples are:
To find I2C driver examples, search for i2c.h in .
- I2C driver for .
- Serial driver for .
- I2C Driver for the MS5611 and MS6507 barometric pressure sensor connected via I2C (or SPI).
(Wikipedia)
(learn.sparkfun.com)