I2C

A9/A9G有三个I2C接口,使用的时候注意与哪些引脚复用了的,引脚情况查看pudding开发板引脚图 只支持主模式

例程:demo/i2c

1. 宏定义

1.1. I2C_DEFAULT_TIME_OUT

默认超时时间

#define I2C_DEFAULT_TIME_OUT 10 //10ms

2. 枚举类型

I2C_ID_t

I2C编号

typedef enum
{
I2C1 = 1 ,
I2C2 = 2 ,
I2C3 = 3 ,
I2C_ID_MAX
} I2C_ID_t;

2.1. I2C_FREQ_t

I2C支持的频率

typedef enum
{
I2C_FREQ_100K,
I2C_FREQ_400K,
I2C_FREQ_MAX
} I2C_FREQ_t;

2.2. I2C_Error_t

I2C错误信息

typedef enum{
I2C_ERROR_NONE = 0 ,
/// A resource reset is required
I2C_ERROR_RESOURCE_RESET,
/// An attempt to access a busy resource failed
I2C_ERROR_RESOURCE_BUSY,
/// Timeout while trying to access the resource
I2C_ERROR_RESOURCE_TIMEOUT,
/// An attempt to access a resource that is not enabled
I2C_ERROR_RESOURCE_NOT_ENABLED,
/// Invalid parameter
I2C_ERROR_BAD_PARAMETER,
/// Communication failure
I2C_ERROR_COMMUNICATION_FAILED = 14,

I2C_ERROR_MAX
} I2C_Error_t;

2.3. I2C_CMD_Mask_t

I2C标志位,功能函数中带Raw的函数使用

typedef enum{
I2C_CMD_MASK_MASTER_NACK = (1<<0) ,
I2C_CMD_MASK_MASTER_READ = (1<<4) ,
I2C_CMD_MASK_MASTER_STOP = (1<<8) ,
I2C_CMD_MASK_MASTER_WRITE = (1<<12) ,
I2C_CMD_MASK_MASTER_START = (1<<16) ,
I2C_CMD_MASK_MAX
} I2C_CMD_Mask_t;

3. 结构体类型

3.1. I2C_Config_t

I2C配置

typedef struct{
I2C_FREQ_t freq;
} I2C_Config_t;

4. 功能函数

4.1. I2C_Init

bool I2C_Init(I2C_ID_t i2c, I2C_Config_t config);
功能

初始化I2C

参数
  • i2c:I2C编号
  • config:I2C初始化配置
返回值
  • 是否成功设置I2C

4.2. I2C_Transmit

I2C_Error_t I2C_Transmit(I2C_ID_t i2c, uint16_t slaveAddr, uint8_t* pData, uint16_t length, uint32_t timeOut);
功能

通过I2C发送数据

参数
  • i2c:I2C编号
  • slaveAddr:从机地址
  • pData:需要发送的数据
  • length:长度
  • timeOut:超时时间,单位毫秒
返回值
  • 是否成功发送数据

4.3. I2C_Receive

I2C_Error_t I2C_Receive(I2C_ID_t i2c, uint16_t slaveAddr, uint8_t* pData, uint16_t length, uint32_t timeOut);
功能

通过I2C接收数据

参数
  • i2c:I2C编号
  • slaveAddr:从机地址
  • pData:接收到的数据存放位置
  • length:长度
  • timeOut:超时时间,单位毫秒
返回值
  • 是否成功接收数据

4.4. I2C_WriteMem

I2C_Error_t I2C_WriteMem(I2C_ID_t i2c, uint16_t slaveAddr, uint32_t memAddr, uint8_t memSize, uint8_t* pData, uint16_t length, uint32_t timeOut);
功能

通过I2C写从器件寄存器

参数
  • i2c:I2C编号
  • slaveAddr:从机地址
  • memAddr:从机寄存器地址
  • memSize:从机寄存器地址长度,单位字节,即memAddr的字节数,最大为4
  • pData:要写的数据的数据
  • length:写数据长度
  • timeOut:超时时间,单位毫秒
返回值
  • 是否成功写入数据

4.5. I2C_ReadMem

I2C_Error_t I2C_ReadMem(I2C_ID_t i2c, uint16_t slaveAddr, uint32_t memAddr, uint8_t memSize, uint8_t* pData, uint16_t length, uint32_t timeOut);
功能

通过I2C读从器件寄存器

参数
  • i2c:I2C编号
  • slaveAddr:从机地址
  • memAddr:从机寄存器地址
  • memSize:从机寄存器地址长度,单位字节,即memAddr的字节数,最大为4
  • pData:读取的数据存放的位置
  • length:读取数据长度,单位字节
  • timeOut:超时时间,单位毫秒
返回值
  • 是否成功读取从机寄存器数据

4.6. I2C_WriteRawByte

I2C_Error_t I2C_WriteRawByte(I2C_ID_t i2c, uint8_t sendByte, I2C_CMD_Mask_t cmdMask, uint32_t timeOut);
功能

通过I2C写单个字节数据

参数
  • i2c:I2C编号
  • sendByte:需要发送的数据,一个字节
  • cmdMask:附加的命令,I2C_CMD_Mask_t中的值
  • timeOut:超时时间,单位毫秒
返回值
  • 是否成功写入数据

4.7. I2C_ReadRawByte

uint8_t I2C_ReadRawByte(I2C_ID_t i2c, I2C_CMD_Mask_t cmdMask, uint32_t timeOut);
功能

通过I2C读单个字节数据

参数
  • i2c:I2C编号
  • cmdMask:附加的命令,I2C_CMD_Mask_t中的值
  • timeOut:超时时间,单位毫秒
返回值
  • 读取到的值

4.8. I2C_Close

bool I2C_Close(I2C_ID_t i2c);
功能

关闭I2C

参数
  • i2c:I2C编号
返回值
  • 是否成功关闭I2C

results matching ""

    No results matching ""