I2C通信

  1. I2C总线(Inter IC BUS)是由Philips公司开发的一种通用数据总线。
  2. 两根通信线:SCL(Serial Clock),SDA(Serial Data)
  3. 同步,半双工
  4. 支持总线挂载设备(一主多从,多主多从)。

1. 将全双工,变为了半双工 2. 应答机制 3.在一个线上,可以接过个从机,单片机可以指定,和任意一个模块通信 4. 串口是异步时序,发送方和接受方约定的传输速率是非常严格的,不能太大偏差。也不能单片机有事进入中断了,时序是不能暂停的,对于异步时序来说,这是不行的。 必须要有USART电路才能方便的使用,如果没有USART的支持,串口是很难用软件模拟的 , i2C是同步的。有一条时钟线,对传输的时间要求不高,单片机可以随时暂停传输,去处理其他事情。

注意 I2C与USART有啥区别 :1.I2C 是半双工通讯,是指一条数据线实现发送和接受, USART 是全双工通讯,需要两条线连接,实现发送接收。2. I2C是同步,USART 是异步。3. 串口低位现行,I2C是高位先行。4.串口可以发送给电脑信息,而I2C不行

硬件电路

1.所有的I2C设备的SCL连在一起,SDA连在一起。
2. 设备的SCL和SDA均配置为开漏 模式
3. SCL和SDA各添加一个上拉电阻,阻值一般为4.7K欧左右。
在这里插入图片描述
使用开漏加弱上拉的模式。低电平向下拉杆子,高电平放手。
在这里插入图片描述

I2C时序基本单元

  1. 起始条件:SCL高电平期间,SDA从高电平切换到低电平。
  2. 终止条件:SCL高电平期间,SDA从低电平切换到高电平。

在这里插入图片描述
发送一个字节:SCL低电平期间,主机将数据位依次放到SDA线上(高位先行),然后释放SCL ,从机将从SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即发送一个字节。
在这里插入图片描述

从这里可以看到全程都是主机张掌控SCL和SDA .从机只能被动读取。

接受一个字节SCL低电平期间,从机将数据位依次放到SDA 上(高位现行),主机将SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可接受一个字节。
在这里插入图片描述
发送应答:主机在接受一个字节之后,在下一个时钟发送一个数据,数据0表示应答,数据1表示非应答。
接受应答:主机在发送完一个字节之后,在下一个时钟接受一位数据,判断从机是否应答,数据0表示应答,数据1表示非应答(主机在接受之前,需要释放SDA)
在这里插入图片描述

I2C时序

数据帧
对于一主多从的模式,怎么确定的那个从机设备呢,这就需要首先把每个从设备都确定一个唯一的设备地址。
主机在起始条件之后,要先发送一个字节叫一下从机的名字

指定地址写

对于指定设备(slave address),在指定地址(Reg Address)下,写入指定数据(Data)
在这里插入图片描述

当前地址读

对于指定设备(Slave Address), 在当前地址指针指示的地址下,读取从机数据(Data)
在这里插入图片描述

指定地址读

对于指定设备(Slave Address ),在指定地址(reg Address )下,读取从机数据(Data)
在这里插入图片描述

I2C外设简介
  1. STM32内部集成了硬件I2C收发电路,可以由硬件执行时钟生成,起始终止条件生成,应答位收发,数据收发等功能,减轻cpu的负担
  2. 支持多主机模型
  3. 支持7位/10位地址模型
  4. 支持不同的通讯速度,标准速度(100khz),快速(高达400kHZ)
  5. 支持DMA
  6. 兼容SMBus协议
    STM32F103C8T6 硬件I2C资源 : I2C1.I2C2
I2C框图

在这里插入图片描述

I2C基本结构

在这里插入图片描述

主动发送

在这里插入图片描述

主机接受

在这里插入图片描述

软件/硬件 波形对比

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值