11static const char *
TAG =
"i2c_bus";
13static i2c_master_bus_handle_t
s_bus;
22 i2c_master_bus_config_t bus_cfg = {
26 .clk_source = I2C_CLK_SRC_DEFAULT,
27 .glitch_ignore_cnt = 7,
28 .flags.enable_internal_pullup =
true,
30 ESP_RETURN_ON_ERROR(i2c_new_master_bus(&bus_cfg, &
s_bus),
TAG,
"i2c_new_master_bus failed");
33 ESP_LOGI(
TAG,
"I2C master bus ready: SCL=GPIO%d SDA=GPIO%d @ %u Hz",
45 ESP_RETURN_ON_FALSE(
s_initialized, ESP_ERR_INVALID_STATE,
TAG,
"bus not initialized");
46 ESP_RETURN_ON_FALSE(dev != NULL, ESP_ERR_INVALID_ARG,
TAG,
"null dev");
48 i2c_device_config_t dev_cfg = {
49 .dev_addr_length = I2C_ADDR_BIT_LEN_7,
50 .device_address = addr7,
53 ESP_RETURN_ON_ERROR(i2c_master_bus_add_device(
s_bus, &dev_cfg, dev),
54 TAG,
"add device 0x%02X failed", addr7);
56 ESP_LOGI(
TAG,
"Added device 0x%02X", addr7);
static i2c_master_bus_handle_t s_bus
esp_err_t i2c_bus_init(void)
Создаёт master-шину I2C (идемпотентно).
static bool s_initialized
i2c_master_bus_handle_t i2c_bus_handle(void)
Вернуть handle общей шины (NULL, если i2c_bus_init ещё не вызывали).
esp_err_t i2c_bus_add_device(uint8_t addr7, i2c_master_dev_handle_t *dev)
Добавить устройство с 7-битным адресом на общую шину.
Общая I2C-шина master (I2C_NUM_0) для всех периферийных устройств.