IIC协议

目录

IIC概述

IIC/I²C总线的主要特点:

构成:

IIC协议的详细解析:

一、协议概述

二、硬件要求与信号线

三、协议状态与信号

1. 空闲状态

2. 开始信号

3. 停止信号

4. 应答信号

四、数据传输过程

五、通信流程

关键点


IIC概述

IIC全称Inter-Integrated Circuit (集成电路总线) 是由PHILIPS公司在80年代开发的两线式串行总线,用于连接微控制器及其外围设备。IIC属于半双 工同步通信方式。

IIC/I²C总线的主要特点:

  1. 两线制:仅需要SDA(数据线)和SCL(时钟线)两条线即可实现设备间的通信,大大简化了连接方式和布线难度。

  2. 多主机系统:IIC总线允许多个主机设备同时存在于总线上,通过仲裁机制决定哪个主机可以占用总线进行通信。

  3. 地址识别:每个连接到IIC总线的设备都有一个唯一的地址,主机通过发送设备的地址来选择与哪个设备进行通信。

  4. 同步通信:IIC总线是一种同步通信总线,所有的数据传输都是在时钟信号的驱动下进行的。

  5. 灵活的数据传输:IIC总线支持多种数据传输速率,并且可以在传输过程中进行数据的读写操作。

  6. 广泛的设备支持:许多微控制器、传感器、存储器等外围设备都支持IIC接口,使得IIC总线在嵌入式系统中非常流行。

构成:

IIC串行总线一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL,其时钟信号是由主控 器件产生。所有接到IIC总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线 的SCL上。对于并联在一条总线上的每个IC都有唯一的地址。

IIC协议的详细解析:

一、协议概述
  • 开发公司:PHILIPS公司
  • 类型:两线式串行、同步、半双工通信协议
  • 主要线路:数据线SDA、时钟线SCL
  • 应用领域:广泛应用于电子设备、传感器、显示器等领域的集成电路通信
二、硬件要求与信号线
  • SDA:串行数据线,用于传输数据。在硬件上,SDA和SCL都属于外加上拉电阻的开漏输出,以确保在总线空闲时能够保持高电平。
  • SCL:串行时钟线,由主设备提供时钟信号,以控制数据在总线上的同步传输。
三、协议状态与信号
1. 空闲状态
  • 当IIC总线的SDA和SCL两条信号线同时处于高电平时,规定为总线的空闲状态。此时,各个器件的输出级场效应管均处在截止状态,由两条信号线各自的上拉电阻把电平拉高。
2. 开始信号

  • 当SCL为高电平时,SDA由高电平到低电平的跳变定义为起始信号,表示总线通信的开始。

3. 停止信号

  • 当SCL为高电平时,SDA由低电平到高电平的跳变定义为停止信号,表示总线通信的结束。

4. 应答信号
  • 有效应答(ACK):发送器每发送一个字节后(8个bit),在第9个时钟脉冲期间释放数据线(即拉高SDA),由接收器反馈一个低电平的应答信号,表示接收器已成功接收该字节。
  • 无效应答(NACK):应答信号为高电平时,表示接收器接收该字节没有成功,一般在最后一个字节后发送以通知发送器结束数据传输。

四、数据传输过程
  • 发送数据:在SCL为高电平时,SDA线必须保持稳定;在SCL为低电平时,SDA线的电平可以变化。发送器通过控制SDA线的高低电平变化,在SCL的同步下逐位发送数据。
  • 接收数据:接收器在SCL的每一个时钟脉冲下读取SDA线上的数据,实现数据的接收。
五、通信流程
  1. 主机发送起始信号:通知总线上的所有设备开始通信。
  2. 主机发送设备地址+读写位:选择需要通信的从设备,并指定是读操作还是写操作。
  3. 从设备应答:被选中的从设备通过拉低SDA线进行应答。
  4. 数据传输:根据读写位的不同,主机和从设备之间进行数据的发送或接收。
  5. 发送停止信号:通信完成后,主机发送停止信号,表示总线通信结束。

这段代码是I2C通信中用于发送一个字节数据的函数IIC_Send_Byte的实现。

关键点:

  1. 位操作:通过&<<操作符,函数能够逐位地处理要发送的数据。dataSend & 0x80检查dataSend的最高位(第7位),而dataSend = dataSend << 1则将dataSend左移一位,以便在下一次迭代中处理下一个位。

  2. 时钟控制:SCL(时钟线)的拉高和拉低控制数据的发送时机。在SCL拉高期间,SDA(数据线)上的数据应该保持稳定,以便接收设备能够正确读取。

  3. 延时_nop_()函数(或其等效物)用于在关键操作之间提供必要的延时,以确保数据稳定传输。然而,需要注意的是,_nop_()的具体实现和效果可能取决于编译器和硬件平台。在某些情况下,您可能需要使用更精确的延时函数(如循环延时或定时器延时)。

  4. 数据准备:在每次发送数据位之前,通过将SCL拉低,可以确保SDA上的数据在发送之前已经稳定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值