92 lines
2.9 KiB
C
92 lines
2.9 KiB
C
#ifndef IIC_H
|
||
#define IIC_H
|
||
|
||
#include <stdint.h>
|
||
#include "driver/i2c.h"
|
||
#include "esp_log.h"
|
||
|
||
// 设备地址
|
||
#define Device_Address 0x6B
|
||
|
||
|
||
// I2C 主设备配置宏定义
|
||
// I2C 主设备时钟线连接的 GPIO 引脚号
|
||
#define I2C_MASTER_SCL_IO GPIO_NUM_4
|
||
// I2C 主设备数据线连接的 GPIO 引脚号
|
||
#define I2C_MASTER_SDA_IO GPIO_NUM_3
|
||
// I2C 主设备使用的 I2C 端口号
|
||
#define I2C_MASTER_NUM I2C_NUM_0
|
||
// I2C 主设备的时钟频率
|
||
#define I2C_MASTER_FREQ_HZ 400000
|
||
// I2C 主设备不使用发送缓冲区
|
||
#define I2C_MASTER_TX_BUF_DISABLE 0
|
||
// I2C 主设备不使用接收缓冲区
|
||
#define I2C_MASTER_RX_BUF_DISABLE 0
|
||
|
||
/**
|
||
* @brief 初始化 I2C 主设备
|
||
*
|
||
* 该函数用于对 I2C 主设备进行初始化配置,包括设置 I2C 模式、引脚、上拉电阻和时钟频率等,
|
||
* 并安装 I2C 驱动。
|
||
*
|
||
* @return esp_err_t 初始化结果,ESP_OK 表示成功,其他值表示失败
|
||
*/
|
||
esp_err_t i2c_master_init(void);
|
||
|
||
/**
|
||
* @brief 向 8 位地址的寄存器写入一个字节数据
|
||
*
|
||
* 该函数通过 I2C 总线向指定地址的寄存器写入一个字节的数据。
|
||
*
|
||
* @param addr 寄存器的内部地址
|
||
* @param Data 要写入的数据
|
||
* @return unsigned char 操作结果,1 表示成功,0 表示失败
|
||
*/
|
||
unsigned char i2cwrite(unsigned char addr, unsigned char Data);
|
||
|
||
/**
|
||
* @brief 向 8 位地址的寄存器写入多个字节数据
|
||
*
|
||
* 该函数通过 I2C 总线向指定地址的寄存器开始写入指定长度的字节数据。
|
||
*
|
||
* @param addr I2C 设备内部寄存器地址
|
||
* @param length 要写入的数据长度
|
||
* @param Data 要写入的数据的地址
|
||
* @return unsigned char 操作状态,1 表示成功,0 表示失败
|
||
*/
|
||
unsigned char i2cwrites(uint8_t addr, uint8_t length, const uint8_t *Data);
|
||
|
||
/**
|
||
* @brief 从 8 位地址的寄存器读取一个字节数据
|
||
*
|
||
* 该函数通过 I2C 总线从指定地址的寄存器读取一个字节的数据。
|
||
*
|
||
* @param addr I2C 设备内部寄存器地址
|
||
* @param Data 存储读取数据的地址
|
||
* @return unsigned char 操作状态,1 表示成功,0 表示失败
|
||
*/
|
||
unsigned char i2cread(unsigned char addr, unsigned char *Data);
|
||
|
||
/**
|
||
* @brief 从 8 位地址的寄存器读取多个字节数据
|
||
*
|
||
* 该函数通过 I2C 总线从指定地址的寄存器开始读取指定长度的字节数据。
|
||
*
|
||
* @param addr I2C 设备内部寄存器地址
|
||
* @param length 要读取的数据长度
|
||
* @param Data 存储读取数据的地址
|
||
* @return unsigned char 操作状态,1 表示成功,0 表示失败
|
||
*/
|
||
unsigned char i2creads(unsigned char addr, unsigned char length, unsigned char *Data);
|
||
|
||
|
||
/**
|
||
* @brief 扫描 I2C 总线上的设备
|
||
*
|
||
* 该函数会遍历 I2C 地址范围(0 - 127),尝试与每个地址的设备进行通信,
|
||
* 若通信成功则表示该地址存在设备,并输出相应的日志信息。
|
||
*
|
||
*/
|
||
void i2c_scan(void);
|
||
|
||
#endif // IIC_H
|