嵌入式 IIC(I2C)协议

简介: 嵌入式 IIC(I2C)协议

一、IIC(I2C)的介绍

 IIC(I2C)总线:是Philips公司推出的串行总线标准(为二线制,不包括地线)。总线上扩展的外围器件以及外设接口通过总线寻址,是具备总线仲裁和高低速设备同步(时钟线)等功能的高性能多主机总线。

作用:

串口:STM32跟电脑进行通信;

IIC:两个器件之间进行相互通信。(STM32跟AT24C02之间通信,所以两个通信的器件必须具备IIC总线接口)。

二、工作原理

串行数据线SDA和串行时钟线SCL构成的,可发送和接收数据。IIC 是由数据线和时钟线组成的。

硬件连接图:

所有挂接在I2C总线上的器件和接口电路都应具有I2C总线接口,且所有的SDA/SCL同名端相连总线上所有器件要依靠SDA发送的地址信号寻址,不需要片选线。

特点:

组成系统结构简单,占用空间小,芯片管脚的数量少,无需片选信号,价格低。

允许若干兼容器件共享总线,应用比较广泛。

总线的长度可达7.6m,传送速度:快速IIC 400kbps ,标准IIC 100kbps,高速IIC 1M bps。

支持多个组件。支持多主控器件(某时刻只能有一个主控器件)。

I2C总线上所有设备的SDA, SCL引脚必须外接上拉电阻

开发板上的AT24C02 接了STM32 的硬件IIC接口,但是 STM32的IIC硬件接口存在BUG.所以我们不用

它的硬件IIC接口,直接用IO口模拟的方法。 IIC的的通信速并不快,用IO口模拟的方法完全可以达到它的通信速度。

IO口模拟:读 、写 数据的过程都是通信代码来完成的,所以速度会比较慢。

硬件接口:读 、写 数据的过程由硬件功能自主完成。速度会比较快。

三、IIC总线协议

时序图:

 

从时序图可以得到 :

1. MSB--> 高位先发(IIC)  ; LSB : --> 低位先发(串口)

2.起始信号:SCL为高电平期间,SDA由高电平向低电平跳变。

void IIC_Start(void)
{
SCL=1;
SDA=1;
delay_us(5);
SDA=0;
delay_us(5);
SCL=0;
}

3.停止信号:SCL为高电平器件,SDA由低电平向高电平跳变。

4.应答信号:每个字节(8bit)传输完成后的下一个时钟信号,在SCL为高电平器件,SDA为低电平,则表示一个应答信号;

IIC里面应答信号非常重要,IIC要求:接收方没接收一个数据都必须要给发送方一个应答;

应答: 主机给从机的应答, 从机给主机的应答! ! ! !

主机可以给 2 种应答:

1. 主机给应答-------继续给数据

2. 主机给非应答-------不需要再给数据了

应答信号的产生:

在主机发送数据完成后, 从机就会给出应答信号, 应答信号就是SDA 拉为低电平! ! !

主机可以读取SDA的电平状态来判断 从机是否给出应答信号

主机接收到数据后, 主机把 SDA 拉为低电平表示应答, 拉为高电平表示非应答! ! ! !

注意: IIC 里面应答信号也需要一个完整的时钟周期! ! ! ! !

同样这个应答信号也是在 SCL

  1. 非应答信号:每个字节( 8bit) 传输完成后的下一个时钟信号, 在 SCL 为高电平期间, SDA 为高, 则表示一个非应答信号(ack)。
  2. 空闲状态: SCL为高电平,SDA为高电平。

注意: 起始和停止信号总是由主设备发出。 应答信号和非应答信号是由接收数据方发出,发送数据方则是检测这个信号。 主机和从机都可以发生应答信号和非应答信号。

四、IIC数据的发送和接收

  1. 数据的发送过程

IIC 属于串行通信, 数据位也是一个位一个位的发送, IIC 里面固定是高位先发送! ! !

IIC 通信在 SCL 变为低电平后给出数据, 高电平采样数据! ! ! !

发送数据:

低电平主机给数据

高电平从机采样数据

记得: IIC 采用模拟时序的时候, 时钟采用: 低—高—低

 

void IIC_Send_byte(u8 data)
{
int i=8;
While(i--)
{
SCL=0;
if(data&0x80)
{
SDA=1
}
}
else
SDA=0;
data<<=1;
SCL=1;
}

2.数据的接收过程

IIC 通信在 SCL 变为低电平后给出数据, 高电平采样数据! ! ! !

接收数据:

低电平从机给数据

高电平主机采样数据

记得: IIC 采用模拟时序的时候, 时钟采用: 低

注意: SCL 的高电平的持续时间! ! ! ! !

高电平时间: 标准 IIC 4.0  us, 快速 IIC 0.6  us

低电平时间: 标准 IIC 4.7  us, 快速 IIC 1.3  us

u8 IIC_res_byte(void)
{
  u8 data=0;
  u8 i=8;
  while(i--)
{
  data<<=1;
  SCL=1;
  if(SDA)
    Data |= 0x01;
 }
}


相关文章
|
7月前
|
API 数据格式
嵌入式系统中的串口通信
嵌入式系统中的串口通信
138 0
|
2月前
【通信协议讲解】单片机基础重点通信协议解析与总结之IIC(一)
【通信协议讲解】单片机基础重点通信协议解析与总结之IIC(一)
|
5月前
|
传感器 芯片
嵌入式通信协议全解析:SPI、I²C、UART详解(附带面试题)
通信是指人与人或人与自然之间通过某种行为或媒介进行的信息交流与传递。从广义上来说,通信是指需要信息的双方或多方在不违背各自意愿的情况下采用任意方法、任意媒质,将信息从某方准确安全地传送到另方。在出现电波传递通信后,通信被单一解释为信息的传递,是指由一地向另一地进行信息的传输与交换,其目的是传输消息。通信方式包括利用“电”来传递消息的电信,这种通信具有迅速、准确、可靠等特点,且几乎不受时间、地点、空间、距离的限制,因而得到了飞速发展和广泛应用。
1165 0
|
7月前
|
传感器 监控 芯片
嵌入式系统中MCU与SoC通信方式的选择与应用
嵌入式系统中MCU与SoC通信方式的选择与应用
268 3
|
7月前
|
网络协议 Linux
嵌入式单片机开源的串口示波器实现方法
嵌入式单片机开源的串口示波器实现方法
62 0
|
存储 机器人 芯片
嵌入式 STM32 步进电机驱动,干货满满,建议收藏
嵌入式 STM32 步进电机驱动,干货满满,建议收藏
嵌入式 STM32 步进电机驱动,干货满满,建议收藏
|
网络协议 算法 网络架构
嵌入式 STM32 通讯协议--MODBUS
嵌入式 STM32 通讯协议--MODBUS
|
数据格式
嵌入式 STM32 红外遥控
嵌入式 STM32 红外遥控
15 玩转STM32之IIC通信(芯片硬件篇)(上)
15 玩转STM32之IIC通信(芯片硬件篇)