RCM — ESP32 Room Controller
WT32-ETH01 firmware
Loading...
Searching...
No Matches
i2c_bus.c
Go to the documentation of this file.
1
6#include "i2c_bus.h"
7
8#include "esp_check.h"
9#include "esp_log.h"
10
11static const char *TAG = "i2c_bus";
12
13static i2c_master_bus_handle_t s_bus;
14static bool s_initialized;
15
16esp_err_t i2c_bus_init(void)
17{
18 if (s_initialized) {
19 return ESP_OK;
20 }
21
22 i2c_master_bus_config_t bus_cfg = {
23 .i2c_port = I2C_BUS_PORT,
24 .sda_io_num = I2C_BUS_SDA_GPIO,
25 .scl_io_num = I2C_BUS_SCL_GPIO,
26 .clk_source = I2C_CLK_SRC_DEFAULT,
27 .glitch_ignore_cnt = 7,
28 .flags.enable_internal_pullup = true,
29 };
30 ESP_RETURN_ON_ERROR(i2c_new_master_bus(&bus_cfg, &s_bus), TAG, "i2c_new_master_bus failed");
31
32 s_initialized = true;
33 ESP_LOGI(TAG, "I2C master bus ready: SCL=GPIO%d SDA=GPIO%d @ %u Hz",
35 return ESP_OK;
36}
37
38i2c_master_bus_handle_t i2c_bus_handle(void)
39{
40 return s_bus;
41}
42
43esp_err_t i2c_bus_add_device(uint8_t addr7, i2c_master_dev_handle_t *dev)
44{
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");
47
48 i2c_device_config_t dev_cfg = {
49 .dev_addr_length = I2C_ADDR_BIT_LEN_7,
50 .device_address = addr7,
51 .scl_speed_hz = I2C_BUS_FREQ_HZ,
52 };
53 ESP_RETURN_ON_ERROR(i2c_master_bus_add_device(s_bus, &dev_cfg, dev),
54 TAG, "add device 0x%02X failed", addr7);
55
56 ESP_LOGI(TAG, "Added device 0x%02X", addr7);
57 return ESP_OK;
58}
static i2c_master_bus_handle_t s_bus
Definition i2c_bus.c:13
esp_err_t i2c_bus_init(void)
Создаёт master-шину I2C (идемпотентно).
Definition i2c_bus.c:16
static const char * TAG
Definition i2c_bus.c:11
static bool s_initialized
Definition i2c_bus.c:14
i2c_master_bus_handle_t i2c_bus_handle(void)
Вернуть handle общей шины (NULL, если i2c_bus_init ещё не вызывали).
Definition i2c_bus.c:38
esp_err_t i2c_bus_add_device(uint8_t addr7, i2c_master_dev_handle_t *dev)
Добавить устройство с 7-битным адресом на общую шину.
Definition i2c_bus.c:43
Общая I2C-шина master (I2C_NUM_0) для всех периферийных устройств.
#define I2C_BUS_PORT
Definition i2c_bus.h:16
#define I2C_BUS_SDA_GPIO
Definition i2c_bus.h:18
#define I2C_BUS_FREQ_HZ
Definition i2c_bus.h:19
#define I2C_BUS_SCL_GPIO
Definition i2c_bus.h:17