1. ICM20948设备树配置概述
ICM20948作为TDK InvenSense推出的9轴MEMS运动传感器,集成了3轴加速度计、3轴陀螺仪和3轴磁力计,在嵌入式Linux系统中被广泛应用于无人机飞控、工业设备姿态检测和可穿戴设备等领域。设备树(Device Tree)作为ARM架构下硬件描述的标准方式,其正确配置直接决定了传感器能否正常工作。
我在多个基于i.MX6UL和RK3399的工控项目中调试过ICM20948,发现设备树配置不当会导致采样率异常、数据寄存器访问失败等问题。本文将结合Linux内核4.19版本驱动,详细解析各配置参数的实际作用。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 设备树节点基础结构
2.1 标准I2C接口配置
ICM20948通常通过I2C接口与主控连接,标准设备树节点应包含以下基础属性:
dts复制&i2c1 {
status = "okay";
clock-frequency = <400000>; // 标准模式400kHz
icm20948: imu@68 {
compatible = "invensense,icm20948";
reg = <0x68>; // 默认I2C地址0x68
vdd-supply = <&vdd_3v3>; // 3.3V电源
vddio-supply = <&vdd_1v8>; // IO电平1.8V
interrupt-parent = <&gpio1>;
interrupts = <5 IRQ_TYPE_EDGE_RISING>; // 中断引脚配置
};
};
关键细节说明:
- clock-frequency建议设为400kHz而非100kHz,实测采样率可提升30%
- 中断引脚必须配置,否则驱动会轮询数据增加CPU负载
- 电源轨需严格匹配,VDDIO电压错误会导致I2C通信失败
2.2 SPI接口的特别处理
当使用SPI接口时(如AD0引脚拉高),需要修改配置:
dts复制&spi0 {
cs-gpios = <&gpio0 8 GPIO_ACTIVE_LOW>;
