I2C总线协议教程,接口与应用程序

如今,协议在阶段发挥着重要作用嵌入式系统设计。如果要扩展微控制器的外围设备,则复杂性和功耗将增加。有不同类型的总线协议,如ustr,spi,can,I2C总线协议等,用于在两个系统之间传输数据。

I2C协议

什么是I2C总线?


发送和接收两个或两个以上的设备之间的信息需要称为总线系统的通信路径。I2C总线是双向双有线串行总线,用于传输集成电路之间的数据。I2C代表“Inter Integrated电路”。它是在1982年由飞利浦半导体引入的。I2C总线包括三种数据传输速度,如标准,快速模式和高速模式。I2C总线支持7位和10位地址空间设备,其操作与低电压不同。

I2c总线协议
I2c总线协议

I2C信号线路

I2C信号线路
I2C信号线路

I2C是一种串行总线协议,由两条信号线组成,如SCL和SDL线,用于与设备通信。SCL代表“串行时钟线”,这个信号总是由“主设备”驱动。SDL代表“串行数据线”,这个信号由主控设备或I2C外设驱动。当I2C外围设备之间没有传输时,这些SCL和SDL线都处于开路漏极状态。

排水明沟输出


开漏是FET晶体管的概念其中,晶体管的漏极端处于开路状态。主器件的SDL和SCL引脚是用开路晶体管设计的,所以只有当这些晶体管被传导时,数据才能传输。因此,这些线路或漏极端子被连接到VCC传导模式的彻底上拉电阻。

I2C接口

许多从设备与微控制器相连借助I2C总线通过I2C电平移位器IC来传输它们之间的信息。用于连接最多128个设备的I2C协议,该设备全部连接到主单元的SCL和SDL行以及从设备通信。它支持多方管理员通信,这意味着两个大师用于传达外部设备。

I2C数据传输速率

I2C协议有三种模式:快速模式、高速模式和标准模式,其中标准模式数据传输速度为0Hz ~ 100Hz,快速模式数据传输速度为0Hz ~ 400khz,高速模式数据传输速度为10khz ~ 100KHz。每一次传输都发送9位数据,其中8位由发送端MSB发送到LSB,第9位是接收端发送的确认位。

I2C数据传输速率
I2C数据传输速率

I2C通信

I2C总线协议是最常用的主从通信,其中主称为“微控制器”,从称为其他设备,如ADC、EEPROM、DAC和嵌入式系统中的类似设备。在I2C总线的帮助下,从设备的数量被连接到主设备,其中每个从设备都包含一个唯一的地址来与它通信。以下步骤用于主设备和从设备之间的通信:

步骤1:首先,主设备发出一个启动条件来通知所有从设备,以便它们在串行数据线上监听。

步骤2:主设备发送目标从设备的地址,这个地址与连接到SCL和SDL线路的所有从设备的地址相比较。如果有任何地址匹配,就选择该设备,其余所有设备都将与SCL和SDL线路断开连接。

步骤3:具有从主设备接收的匹配地址的从设备,在数据总线上的主设备和从设备之间建立通信,响应于主服务器的确认。

目的:主站和从站都接收并根据通信是否被读取或写入数据来接收和传输数据。

顾不上然后,主机可以发送8位的数据给接收方,接收方以1位的确认回复。

I2C教程

I2C协议是关于时钟脉冲的一步一步串行地发送和接收信息。它是一种系统间的短距离协议,也就是说,它在电路板内用于主设备和从设备的通信。

I2C协议的基础

通常,I2C总线系统由两根电线组成,可轻松地扩展输入和输出外围功能,例如ADC,EEROM和RTC,以及其他基本组件使系统的复杂性大大降低。

例子:由于8051单片机没有内置ADC -因此,如果我们想将任何模拟传感器接口到8051单片机-我们必须使用ADC设备,如ADC0804-1通道ADC, ADC0808- 8通道ADC,等等。利用这些adc,我们可以将模拟传感器连接到单片机。

不需要使用该协议来扩展任何微控制器或处理器的I/O特性,我们可以使用8255的8引脚设备。的8051微控制器是40针微控制器;通过使用8255 IC,我们可以扩展3-I/O端口,每个端口有8针。通过使用所有的设备,如RTC, ADC, EEPROM,定时器等-为扩展外围电路-复杂性,成本,功耗和产品尺寸也增加。

为了克服这个问题,协议概念进入了缩小硬件复杂性和功耗的图片。通过使用此I2C协议,我们可以扩展更多功能,例如I / 0外设,ADC,T / C和存储器设备,例如128个设备。
I2C协议中使用的术语

发送器:将数据发送到总线的设备称为发送器。

接收方:从总线接收数据的设备称为接收器。

主:启动传输以生成时钟信号并终止传输的设备称为主设备。

奴隶:由主设备寻址的设备称为从设备。

Multimaster:多个主服务器可以尝试在同一时间控制总线而不破坏消息被称为多主服务器。

仲裁:程序确保,如果多个主机同时尝试控制总线 - 只允许一个人这样做;获奖消息未损坏。

同步:将两个或多个设备的时钟单点同步称为同步。

I2C基本命令序列

  1. 起始位条件
  2. 停止位条件
  3. 确认条件
  4. 主从写操作
  5. 读取从操作到主操作

启动和停止位条件

当主(微控制器)希望与从设备(例如ADC)对话时,它通过在I2C总线上发出一个启动条件开始通信,然后发出一个停止条件。图中显示了I2C启动和停止逻辑级别。

当SCL线高时,I2C启动条件定义为SDA线从高到低的转换。当SDA线从低切换到高而SCL线是高时,I2C停止条件发生。

I2C主机始终生成S和P条件。一旦I2C主站启动了一个启动条件,I2C总线就被视为忙碌状态。

启动和停止位条件
启动和停止位条件

编程:

开始状态:

sbit SDA = P1 ^ 7;//初始化单片机的SDA和SCL引脚//
sbit sci = P1 ^ 6;
空白延迟(unsigned int);
void main()
{
SDA = 1;/ / / /处理数据
sci = 1;/ /时钟高/ /
延迟();
SDA = 0;/ / / /发送数据
延迟();
sci = 0;//时钟信号低//
}
空白延迟(int p)
{
unsignedinta,b;
(= 0; < 255; + +);/ / / /延迟函数
(b = 0; b < p, b + +);
}

停止条件:

void main()
{
SDA = 0;//停止处理数据//
sci = 1;/ /时钟高/ /
延迟();
SDA = 1;/ /停止/ /
延迟();
sci = 0;//时钟信号低//
}
空白延迟(int p)
{
unsignedinta,b;
(= 0; < 255; + +);/ / / /延迟函数
(b = 0; b < p, b + +);
}

确认(ACK)和不确认(NCK)条件

在I2C总线上传输的每一个字节后面都有一个来自接收器的确认条件,这意味着,在主机拉低SCL完成8位的传输后,SDA会被接收器拉低到主机。如果接收机发射后不拉,则认为SDA线低为NCK条件。

确认(ACK)
确认(ACK)

编程

承认
void main ()
{
SDA = 0;//SDA线变为low//
sci = 1;//时钟从高到低
延迟(100);
sci = 0;
}
没有确认:
void main ()
{
SDA = 1;//SDA行返回high//
sci = 1;//时钟从高到低
延迟(100);
sci = 0;
}

主从写操作

I2C协议以包或字节的形式传输数据。每个字节后面跟着一个确认位。

数据传输格式

数据传输格式
数据传输格式

开始:主要是由主机发起的数据传输序列生成启动条件。

7位地址:之后,主服务器以两种8位的格式发送从地址,而不是一个单独的16位地址。

r / w:如果读写位高,则执行写操作。

应答:如果在从设备中执行写操作,则接收器将1位ACK发送到微控制器。

站:在从设备完成写操作后,微控制器将停止条件发送给从设备。

编程

写操作

voidwrite(无符号字符d)
{
Unsigned char k, j=0x80;
(k = 0; k < 8; k + +)
{
SDA =(曹磊);
J = > > 1;
sci = 1;
延迟(4);
sci = 0;
}
SDA = 1;
sci = 1;
延迟(2);
c = SDA;
延迟(2);
sci = 0;
}

主从读操作

数据以位或字节的形式从从设备读回——先读最高有效位,后读最低有效位。

数据读取格式

数据读取格式
数据读取格式

开始:数据传输序列主要由生成启动条件的主程序启动。

7位地址:之后,主服务器以两种8位的格式发送从地址,而不是一个单独的16位地址。

r / w:如果读取和写入位低,则执行读取操作。

应答:如果在从设备中执行写操作,则接收器将1位ACK发送到微控制器。

站:在从设备完成写操作后,微控制器将停止条件发送给从设备。

编程

无效的read ()
{
Unsigned char j, z=0x00, q=0x80;
SDA = 1;
(j = 0; < 8; j + +)
{
sci = 1;
延迟(100);
国旗= SDA;
如果(标志= = 1)
{
z = (z | q);
q = q > > 1;
延迟(100);
sci = 0;
}

8051单片机与ADC接口的实例

ADC是一种设备,用于将模拟数据转换为数字和数字到模拟的形式。8051微控制器没有内置ADC,因此我们必须通过I2C协议添加外部。PCF8591是基于I2C的模拟到数字和数字到模拟转换器。该设备最多可以支持4个模拟输入通道以及2.5到6V电压。

模拟输出

模拟输出以电压的形式出现。例如,5v模拟传感器输出逻辑为0.01v到5v。
5v的最大值为= 256。
2.5v的值根据最大电压值=123。

模拟输出公式为:

数字输出公式:

将ADC接口到8051微控制器
将ADC接口到8051微控制器

上图显示了使用从ADC设备到8051微控制器的I2C协议的数据传输。SCL和SDA的ADC引脚连接到微控制器的引脚1.7和1.6,以在它们之间建立通信。当传感器向ADC提供模拟值时,它通过I2C协议将数据转换为数字并将数据传送到微控制器。

这是关于I2C总线协议教程和适当的程序。我们希望所给的内容能够给您提供一个实用的概念,即使用I2C通信将多个设备与微控制器连接起来。如果您对本协议的接口程序有任何疑问,可以在下面评论我们。

添加评论