集成电路总线(IIC)¶
IIC概述¶
IIC总线是飞利浦半导体公司开发的,用于芯片之间连接的一种双线双向的串行总线。IIC总线由一根串行数据线(SDA)和一根串行时钟线(SCL)组成。允许多个Master 和多个Slave设备共享总线。任何时刻总线只能由一个主设备控制,当从设备空闲时总线启动数据传输。它包括总线冲突检查和仲裁机制,以保证当多个主机试图控制总线时,数据不会丢失。该总线特别适合于多个器件之间的短距离通信。I²C总线的标准速率为100kbit/s,快速模式为400kbit/s。CI1122仅有一组IIC0。
API¶
函数名 | 描述 |
---|---|
i2c_master_init | Master 模式初始化 |
i2c_slave_init | Slave 模式初始化 |
i2c_io_init | I/O 初始化 |
i2c_master_transfer | 消息传输 |
i2c_master_only_send | 只发送数据 |
i2c_master_send_recv | 先发送数据再读取数据 |
i2c_master_only_recv | 只读取数据 |
使用示例¶
#include "ci112x_i2c.h" /*包含I2C相关接口定义*/
#include "ci112x_system.h" /*包含I2C寄存器、基地址相关定义*/
#include "platform_config.h" /*包含引脚选择接口定义i2c_io_init*/
/*不带读写位,IIC设备地址左移一位,或上读写位后为0x40,0x41*/
#define IIC_TEST_SLAVE_ADDR 0x20
void i2c_master_test()
{
/*I/O 引脚初始化*/
i2c_io_init();
/*master模式初始化,IIC0总线,100K速率,超时等待时间*/
i2c_master_init(IIC0,100,LONG_TIME_OUT);
/*往IIC设备地址为0x20的设备,只写入5个字节*/
char only_send_buf[5] = {0x01,0x02,0x03,0x04,0x05} ;
i2c_master_only_send(IIC_TEST_SLAVE_ADDR,only_send_buf,5);
/*往IIC设备地址为0x20的设备,先写入1个字节,再读出5个字节*/
char send_recv_buf [10] = {0} ;
send_recv_buf [0] = 0x01;
i2c_master_send_recv(IIC_TEST_SLAVE_ADDR,send_recv_buf,1,10);
/*往IIC设备地址为0x20的设备,只读出5个字节*/
char only_recv_buf [10] = {0} ;
i2c_master_only_recv(IIC_TEST_SLAVE_ADDR,only_recv_buf,10);
}