Files
cardputerfw/main/drivers/i2c.c
2026-05-08 14:56:29 +02:00

87 lines
1.9 KiB
C

#include "i2c.h"
#include "esp_err.h"
#include <string.h>
i2c_master_bus_handle_t bus;
void i2c_init(int sda, int scl) {
i2c_master_bus_config_t cfg = {
.i2c_port = I2C_PORT,
.sda_io_num = sda,
.scl_io_num = scl,
.clk_source = I2C_CLK_SRC_DEFAULT,
.glitch_ignore_cnt = 7,
.flags.enable_internal_pullup = true,
};
i2c_new_master_bus(&cfg, &bus);
}
esp_err_t i2c_write_reg(uint8_t addr, uint8_t reg, uint8_t val) {
uint8_t data[2] = {reg, val};
i2c_master_dev_handle_t dev;
i2c_device_config_t dev_cfg = {
.device_address = addr,
.scl_speed_hz = 400000,
};
i2c_master_bus_add_device(bus, &dev_cfg, &dev);
esp_err_t r = i2c_master_transmit(dev, data, 2, -1);
i2c_master_bus_rm_device(dev);
return r;
}
esp_err_t i2c_read_reg(uint8_t addr, uint8_t reg, uint8_t *val) {
i2c_master_dev_handle_t dev;
i2c_device_config_t dev_cfg = {
.device_address = addr,
.scl_speed_hz = 400000,
};
i2c_master_bus_add_device(bus, &dev_cfg, &dev);
i2c_master_transmit_receive(dev, &reg, 1, val, 1, -1);
i2c_master_bus_rm_device(dev);
return ESP_OK;
}
esp_err_t i2c_read_multi(uint8_t addr, uint8_t reg, uint8_t *buf, int len) {
i2c_master_dev_handle_t dev;
i2c_device_config_t dev_cfg = {
.device_address = addr,
.scl_speed_hz = 400000,
};
i2c_master_bus_add_device(bus, &dev_cfg, &dev);
i2c_master_transmit_receive(dev, &reg, 1, buf, len, -1);
i2c_master_bus_rm_device(dev);
return ESP_OK;
}
esp_err_t i2c_read_reg_multi(uint8_t addr, uint8_t reg, uint8_t *buf,
size_t len) {
i2c_master_dev_handle_t dev;
i2c_device_config_t cfg = {
.device_address = addr,
.scl_speed_hz = 400000,
};
esp_err_t err;
err = i2c_master_bus_add_device(bus, &cfg, &dev);
if (err != ESP_OK)
return err;
err = i2c_master_transmit_receive(dev, &reg, 1, buf, len, -1);
i2c_master_bus_rm_device(dev);
return err;
}