STM32学习记录-09-1-I2C通信(软件)

1 I2C通信

I2C(Inter IC Bus)是由Philips公司开发的一种通用数据总线

两根通信线:SCL(Serial Clock)、SDA(Serial Data)

同步,半双工

带数据应答

支持总线挂载多设备(一主多从、多主多从)

2 硬件电路

所有I2C设备的SCL连在一起,SDA连在一起

设备的SCL和SDA均要配置成开漏输出模式

SCL和SDA各添加一个上拉电阻,阻值一般为4.7KΩ左右

主机完全掌控SCL线,空闲状态下主机可以主动发起对SDA的控制,只有在从机发送数据和从机应答的时候主机才会转交SDA的控制权给从机。在任何时刻SCL线都只能被动读取,从机不允许控制SCL线,从机不允许主动发起对SDA的控制。

主机SCL可以配置为推挽输出,从机的SCL配置成浮空输入或上拉输入。为避免设备出现短路,I2C禁止所有设备输出强上拉高电平,采用外置弱上拉电阻加开漏输出的电路结构。

一主多从:主机可以访问总线上的任何一个设备,每个设备要确定唯一的设备地址,主机在起始条件之后要发送一个字节叫从机的名字,被叫到的从机要响应之后主机的读写操作。从机设备地址在I2C协议标准分为7位地址和10位地址。MPU6050的芯片7位地址为1101 000,AT24C02的7位地址为1010 000。

引脚数据进来通过数据缓冲器进行输入,输出时采用开漏输出。

3 I2C时序基本单元

(1)起始条件:SCL高电平期间,SDA从高电平切换到低电平

终止条件:SCL高电平期间,SDA从低电平切换到高电平

都由主机控制

(2)发送一个字节:

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

最开始SCL低电平,主机如果想发送0就拉低SDA到低电平,想发送1就放手SDA回弹到高电平,在SCL低电平期间允许改变SDA电平,SDA放好后主机松手时钟线SCL回弹到高电平,高电平期间从机读取SDA,此时SDA不允许变化,主机放手SCL一段时间后就可以继续拉低SCL传输下一位。

(3)接收一个字节:

SCL低电平期间,从机将数据位依次放到SDA线上(高位先行),然后释放SCL,主机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可接收一个字节(主机在接收之前,需要释放SDA)

(4)发送应答:主机在接收完一个字节之后,在下一个时钟发送一位数据,数据0表示应答,数据1表示非应答

接收应答:主机在发送完一个字节之后,在下一个时钟接收一位数据,判断从机是否应答,数据0表示应答,数据1表示非应答(主机在接收之前,需要释放SDA)

4 I2C时序

4.1 指定地址写

对于指定设备(Slave Address),在指定地址(Reg Address)下,写入指定数据(Data)

起始条件+设备地址(7位地址位&

  • 28
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值