I2C总线(开发概述)
I2C 是一种分组交换串行通信协议,允许多个主设备连接到多个从属设备,每个连接只需使用2根电线。 它用于在短距离、板内通信中将低速外设 IC 连接到处理器和微控制器。
Pixhawk/PX4 支持:
- 连接那些需要比严格的串行通用异步收发器(UART)所能提供的数据速率更高的板外组件,例如测距仪。
- 与仅支持 I2C 的外围设备兼容。
- 允许多个设备连接到单个总线(有效保护端口)。 例如,LED、指南针、测距仪等。
INFO
硬件 > I2C 外设页面包含有关如何使用(而非集成)I2C 外设以及解决常见设置问题的信息。
TIP
惯性测量单元(IMU,包括加速度计/陀螺仪)不应通过 I2C 连接(通常使用的是 SPI 总线)。 即使只连接一个设备,该总线的速度也不够快,无法进行振动滤波(例如),并且随着总线上每增加一个设备,性能会进一步下降。
集成 I2C 设备
驱动程序应 #include <drivers/device/i2c.h>
,然后针对目标硬件(即对于 NuttX,可参考 此处)提供在 I2C.hpp 中定义的抽象基类 I2C
的实现。
少数驱动程序还需要包含 /src/drivers/ 中对应设备类型的头文件(drv_*.h),例如 drv_led.h。
要将驱动程序包含在固件中,必须将该驱动程序添加到与要构建的目标相对应的特定于开发板的 CMake 文件中。 可以针对单个驱动程序进行此操作:
drivers/sf1xx
也可以包含特定类型的所有驱动程序。
CONFIG_COMMON_DISTANCE_SENSOR=y
TIP
例如,可以在 px4_fmu-v4_default 配置中查找 CONFIG_DRIVERS_DISTANCE_SENSOR_LIGHTWARE_LASER_I2C
。
I2C 驱动程序示例
要查找 I2C 驱动程序示例,请在 /src/drivers/ 中搜索 i2c.h。
仅举几个例子:
- drivers/distance_sensor/lightware_laser_i2c - Lightware SF1XX 激光雷达的 I2C 驱动程序。
- drivers/distance_sensor/lightware_laser_serial - Lightware SF1XX 激光雷达的串行驱动程序。
- drivers/ms5611 - 通过 I2C(或 SPI)连接的 MS5611 和 MS6507 气压传感器的 I2C 驱动程序。