Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
laigerousongmianbao opened this issue Mar 19, 2025 · 0 comments

Comments

@laigerousongmianbao
Copy link

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 #10767

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant