/* * SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ /** * @file * @brief ESP IO expander: TCA9554 */ #pragma once #include #include "esp_err.h" #include "driver/i2c_master.h" #include "esp_io_expander.h" #ifdef __cplusplus extern "C" { #endif /** * @brief Create a TCA9554(A) IO expander object * * @param[in] i2c_bus I2C bus handle. Obtained from `i2c_new_master_bus()` * @param[in] dev_addr I2C device address of chip. Can be `ESP_IO_EXPANDER_I2C_TCA9554_ADDRESS_XXX` or `ESP_IO_EXPANDER_I2C_TCA9554A_ADDRESS_XXX`. * @param[out] handle_ret Handle to created IO expander object * * @return * - ESP_OK: Success, otherwise returns ESP_ERR_xxx */ esp_err_t esp_io_expander_new_i2c_tca9554(i2c_master_bus_handle_t i2c_bus, uint32_t dev_addr, esp_io_expander_handle_t *handle_ret); /** * @brief I2C address of the TCA9554 * * The 8-bit address format is as follows: * * (Slave Address) * ┌─────────────────┷─────────────────┐ * ┌─────┐─────┐─────┐─────┐─────┐─────┐─────┐─────┐ * | 0 | 1 | 0 | 0 | A2 | A1 | A0 | R/W | * └─────┘─────┘─────┘─────┘─────┘─────┘─────┘─────┘ * └────────┯────────┘ └─────┯──────┘ * (Fixed) (Hareware Selectable) * * And the 7-bit slave address is the most important data for users. * For example, if a chip's A0,A1,A2 are connected to GND, it's 7-bit slave address is 0100000b(0x20). * Then users can use `ESP_IO_EXPANDER_I2C_TCA9554_ADDRESS_000` to init it. */ #define ESP_IO_EXPANDER_I2C_TCA9554_ADDRESS_000 (0x20) #define ESP_IO_EXPANDER_I2C_TCA9554_ADDRESS_001 (0x21) #define ESP_IO_EXPANDER_I2C_TCA9554_ADDRESS_010 (0x22) #define ESP_IO_EXPANDER_I2C_TCA9554_ADDRESS_011 (0x23) #define ESP_IO_EXPANDER_I2C_TCA9554_ADDRESS_100 (0x24) #define ESP_IO_EXPANDER_I2C_TCA9554_ADDRESS_101 (0x25) #define ESP_IO_EXPANDER_I2C_TCA9554_ADDRESS_110 (0x26) #define ESP_IO_EXPANDER_I2C_TCA9554_ADDRESS_111 (0x27) /** * @brief I2C address of the TCA9554A * * The 8-bit address format is as follows: * * (Slave Address) * ┌─────────────────┷─────────────────┐ * ┌─────┐─────┐─────┐─────┐─────┐─────┐─────┐─────┐ * | 0 | 1 | 1 | 1 | A2 | A1 | A0 | R/W | * └─────┘─────┘─────┘─────┘─────┘─────┘─────┘─────┘ * └────────┯────────┘ └─────┯──────┘ * (Fixed) (Hareware Selectable) * * And the 7-bit slave address is the most important data for users. * For example, if a chip's A0,A1,A2 are connected to GND, it's 7-bit slave address is 0111000b(0x38). * Then users can use `ESP_IO_EXPANDER_I2C_TCA9554A_ADDRESS_000` to init it. */ #define ESP_IO_EXPANDER_I2C_TCA9554A_ADDRESS_000 (0x38) #define ESP_IO_EXPANDER_I2C_TCA9554A_ADDRESS_001 (0x39) #define ESP_IO_EXPANDER_I2C_TCA9554A_ADDRESS_010 (0x3A) #define ESP_IO_EXPANDER_I2C_TCA9554A_ADDRESS_011 (0x3B) #define ESP_IO_EXPANDER_I2C_TCA9554A_ADDRESS_100 (0x3C) #define ESP_IO_EXPANDER_I2C_TCA9554A_ADDRESS_101 (0x3D) #define ESP_IO_EXPANDER_I2C_TCA9554A_ADDRESS_110 (0x3E) #define ESP_IO_EXPANDER_I2C_TCA9554A_ADDRESS_111 (0x3F) #ifdef __cplusplus } #endif