单片机
返回首页

STM32-(19):I2C通信(理论基础)

2019-08-12 来源:eefocus

I2C BUS是Philips公司推出的一种基于两线的芯片间串行传输总线。I2C总线采用了器件地址的硬件设置方法,通过软件寻址完全避免了器件的片选线寻址方法,从而使硬件系统具有最简单而灵活的扩展方法。

I2C总线在标准模式下,数据传输率可达100kbps,高速模式下可达400kbps。目前 I2C 总线被广泛应用于消费了电子产品、通信产品、仪器仪表及工业测控系统中。

在I2C总线上只需要串行数据SDA线和串行时钟线SCL线两条线。

每个器件都有一个唯一的地址以供识别,并工作在主模式或者从模式下,而且各器件都可以作为一个发送器或接收器。

微控制器包含的I2C 发送/接收器都可以选择作为主模式( Master )或从模式( Slave )工 作。但任一时刻 I2C 总线上只允许一个微控制器工作在主模式下,作为主控器;而另一个微控制器必须工作在从模式下,作为被控器。
在这里插入图片描述
注:作为主模式,必须内部有时钟,以产生波特率,任何时候只有两个之间进行通信。

I2C总线的特点

1.二线传输
2.无中心主机
3.软件寻址
4.应答式数据传输过程(好处:保证传输过程中数据的稳定和可靠)
5.节点可带电接入或撤出(大概是热插拔的意思)

I2C数据传输

传输的第一个8位数据为寻址字节,包括7位的被控器地址和1位方向位,接着被控器发出A (应答位),紧接着的是主控器与被控器之间数据传输和应答。在数据传输完成后,主控器要发出停止信号。

数据传输格式如图:
在这里插入图片描述

分析:在总线上,SCL和SDA是开漏输出,会接上拉电阻,所以空闲的时候是高电平(即开始信号之前),在SCL处于高电平器件,发现SDA的电平由高到低跳变,即产生开始信号;在SCL处于高电平器件,发现SDA的电平由低到高跳变,即产生停止信号;这中间,SCL电平会变化,一般来说,SCL产生上升沿,发送方发送数据,接收方接收数据,SCL产生下降沿时,发送方开始修改SDA上的数据。第9位为应答位,发送方会将SDA总线线释放,由接收方产生应答,SDA总线默认是高电平,若接收方有应答,会强制拉低电平,表示有应答,即应答位低电平有效。

STM32的I2C模块

介绍:
I2C总线接口连接微控制器和串行I2C总线。它提供多主机功能,控制所有I2C总线特定的时序、协议、仲裁和定时。支持标准和快速两种模式,同时与SMBUS2.0兼容。

I2C总线有多种用途,包括CRC码的生成和校验、MBus(System Management Bus)、PMBus(Power Management Bus)。

根据特定设备的需要,可以使用DMA以减轻CPU的负担。

特点:
1、 I2C主设备功能
一产生时钟
一产生起始和停止信号
2、 I2C从设备功能
一可编程的丨2C地址检测
一可响应2个从地址的双地址能力
一停止位检测
3、 状态标志:
一发送器/接收器模式标志
一字节发送结束标志
一 I2C总线忙标志
4、 错误标志
一主模式时的仲裁丢失
一地址/数据传输后的应答(ACK)错误
—检测到起始和停止错位
一禁止拉长时钟功能后的上溢或下溢

I2C接口可以下述4种模式中的一种运行

  • 从发送器模式

  • 从接收器模式

  • 主发送器模式

  • 主接收器模式

默认模式为从模式。接口在生成起始条件后自动从从模式切换到主模式;当仲裁丢失或产生停止信号,则从主模式切换到从模式。
在这里插入图片描述
在这里插入图片描述
分析:数据往DR寄存器内丢,也可以从DR寄存器读取,当发生一些错误的时候,访问状态寄存器,根据不同的状态在软件中进行不同的操作。
注:DR寄存器实际上有两个,一个用于发送,一个用于接收,物理上是分开的,不会互相干扰。

比较重要的寄存器简介:

I2C_SR1

在这里插入图片描述
在这里插入图片描述
位7:判断寄存器是否为空,当寄存器为空时,才能继续发送。若不为空,说明DR寄存器内数据还没发完,需要继续等待。
在这里插入图片描述
在这里插入图片描述

主模式下的发送流程:

在这里插入图片描述
在这里插入图片描述

分析:
①首先发送一个S位,起始条件。然后会出现一个事件EV5,若发送成功,SB位置1,然后读SR1寄存器的这个位,当这个SB位为1时再将SR1寄存器的地址写入DR寄存器就会清除因该位置1而产生的事件。
②发送一个8位的地址。一个总线上可能有多个器件,首先你得确认你要跟那个器件进行通信,若有应答,就会产生EV6事件,ADDR置1,表示地址发送成功,EV8_1事件,TxE置1,将发送寄存器清空
③发送数据Data。当获得应答A,既然获得应答,肯定发送成功,会产生EV8,TxE置1,清除该事件,以便发送后面新的数据。
④发送停止信号P停止位
注:各种事件的产生改变了 SR 状态寄存器相应的位

主模式下的接收流程:

在这里插入图片描述

I2C库函数

在这里插入图片描述
在这里插入图片描述


进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 家用电源无载自动断电装置的设计与制作

  • PIC单片机控制的遥控防盗报警器电路

  • 短波AM发射器电路设计图

  • 使用ESP8266从NTP服务器获取时间并在OLED显示器上显示

  • 如何构建一个触摸传感器电路

  • 基于TDA2003的简单低功耗汽车立体声放大器电路

    相关电子头条文章