# 通过 BMI270 AUX 接口控制 BMM150 [English](README.md) 本示例演示如何通过 BMI270 的 AUX 接口访问外部 BMM150 磁力计,完成设备唤醒、Chip ID 校验、工作模式配置、原始数据读取与休眠释放,涵盖以下四个公开接口: - `bmi270_aux_set_config()` - `bmi270_aux_get_config()` - `bmi270_aux_read()` - `bmi270_aux_write()` ## 硬件连接 通信链路为:`ESP32 -> BMI270 (主 I2C) -> BMM150 (AUX I2C)` 默认预设适配 **M5Stack AtomS3R** 开发板: | 信号 / 参数 | AtomS3R 默认配置 | 说明 | | --- | --- | --- | | SDA / SCL | GPIO45 / GPIO0 | ESP32-S3 到 BMI270 主总线(400 kHz) | | BMI270 主地址 | `0x68` | SDO 接地 | | ASDA / ASCL | 板载互联 | BMI270 辅助 I2C 接口连接至 BMM150 | | BMM150 AUX 地址 | `0x10` | 对应从机 AUX 地址 | | ASDA 内部上拉 | 2 kΩ | 由 BMI270 内部上拉配置提供 | 若使用其他开发板,请将磁力计连接至 BMI270 的 **ASDA** 与 **ASCL** 引脚,确保共地与必要总线上拉,并在配置中修改对应的 GPIO 与从机地址。 ## 构建与运行 1. 进入示例目录,设置目标芯片并构建: ```sh idf.py set-target esp32s3 idf.py menuconfig idf.py build ``` 2. 烧录并打开监视器: ```sh ESPBAUD=921600 idf.py -p PORT flash monitor ``` 在 `menuconfig` 的 **BMI270 AUX BMM150 Example Configuration** 中可调整引脚、从机地址、轮询间隔及采样帧数。 ## 执行流程 1. **总线与传感器初始化**:创建主 I2C 总线并初始化 BMI270。 2. **AUX 模式配置**:关闭省电模式,配置 ASDA 上拉,启用 AUX 8 字节手工模式并读回核对。 3. **使能 AUX 电源**:调用 `bmi2_sensor_enable()` 使能 AUX 通道。 4. **唤醒与识别 BMM150**:向 `0x4B` 寄存器写入唤醒指令,延时后读取 `0x40` 验证 Chip ID(固定为 `0x32`)。 5. **配置测量模式**:设置 XY/Z 重复采样次数,将工作模式配置为 10 Hz 正常模式。 6. **循环读取数据**:从 `0x42` 寄存器连续读取 8 字节数据帧,解析 X/Y/Z 轴原始数值与霍尔电阻值(RHALL)。 7. **安全释放**:达到预设帧数或检测到异常后,将 BMM150 置于休眠,禁用 AUX 并释放传感器与总线资源。 ## 输出说明 启动成功后输出初始信息及 CSV 采样数据: ```text AUX manual mode, address=0x10, 8-byte read burst BMM150 chip ID=0x32 BMM150 normal mode at 10 Hz, XY repetitions=9, Z repetitions=15 timestamp_us,mag_x_raw,mag_y_raw,mag_z_raw,rhall,valid ``` | CSV 字段 | 含义 | | --- | --- | | `timestamp_us` | ESP32 读取该帧数据的主机微秒时间戳 | | `mag_x_raw`、`mag_y_raw` | 13 位有符号原始 ADC 读数 | | `mag_z_raw` | 15 位有符号原始 ADC 读数 | | `rhall` | 14 位无符号霍尔电阻值(供补偿算法使用) | | `valid` | 数据有效标志,读数溢出或 RHALL 为 0 时标为 0,正常为 1 | > **提示**:本示例输出为 ADC 原始计数值。若需将读数转换为微特斯拉(µT)物理量或计算航向,需结合 BMM150 出厂校准参数进行温度与霍尔补偿(可配合官方 `espressif/bmm150` 组件使用)。 默认在输出 20 帧数据后自动退出并释放资源: ```text Finished after 20 frames Sensor and bus released ``` 若需连续输出,可在 `menuconfig` 中将输出帧数(`CONFIG_AUX_BMM150_FRAME_COUNT`)设置为 `0`。
To create a project from this example, run:
idf.py create-project-from-example "espressif/bmi270_sensor=0.4.0:aux_bmm150"