inav icon indicating copy to clipboard operation
inav copied to clipboard

esp_err_t mpu6500_i2c_master_write(uint8_t dev_addr, uint8_t reg_addr, uint8_t data)

Open laigerousongmianbao opened this issue 9 months ago • 0 comments

esp_err_t mpu6500_i2c_master_write(uint8_t dev_addr, uint8_t reg_addr, uint8_t data) { // 使用I2C_SLV0写操作,确保写操作标志(最高位为0) mpu6500_write_reg(I2C_SLV0_CTRL, 0x80); mpu6500_write_reg(I2C_SLV0_ADDR, dev_addr & 0x7F); mpu6500_write_reg(I2C_SLV0_REG, reg_addr); mpu6500_write_reg(I2C_SLV0_DO, data);

vTaskDelay(pdMS_TO_TICKS(10));
return ESP_OK;

}

esp_err_t mpu6500_i2c_master_read(uint8_t dev_addr, uint8_t reg_addr, uint8_t *data, size_t len) { // 配置从设备0进行读操作 mpu6500_write_reg(I2C_SLV0_CTRL, 0x80 | len); // 使能读取并设置长度 mpu6500_write_reg(I2C_SLV0_ADDR, dev_addr | 0x80); // 置位最高位表示读操作 mpu6500_write_reg(I2C_SLV0_REG, reg_addr);

// 等待数据就绪
vTaskDelay(pdMS_TO_TICKS(10));

// 读取数据
for (int i = 0; i < len; i++) {
    data[i] = mpu6500_read_reg(EXT_SENS_DATA_00 + i);
}
return ESP_OK;

}我是这样写的但不对。 寄存器是这样配置的 // 启用I2C主模式 mpu6500_write_reg(USER_CTRL, 0x20); vTaskDelay(pdMS_TO_TICKS(10));

// 配置I2C主机时钟为400kHz (8MHz/(2*10)=400kHz)
mpu6500_write_reg(I2C_MST_CTRL, 0x0D);
vTaskDelay(pdMS_TO_TICKS(10));

有没有人知道该怎么做

Originally posted by @laigerousongmianbao in https://github.com/iNavFlight/inav/discussions/10767

laigerousongmianbao avatar Mar 19 '25 07:03 laigerousongmianbao