I2C通信

I2C通信

I2C Inter IC Bus )是由 Philips 公司开发的一种通用数据总线
两根通信线: SCL Serial Clock )、 SDA Serial Data
同步,半双工
带数据应答
支持总线挂载多设备(一主多从、多主多从)
第一个图片是MPU6050模块(进行姿态测量)
第二个图片是OLED模块,可以显示图片字符
第三个图片是AT24C02,存储器模块
第四个图片DS3231(实时时钟模块)
第一块就是介绍协议规则,然后用软件模拟的形式来实现协议啊。
第二块就是介绍s三二的I2C外设,然后用硬件来实现协议
要求一:把全双工变为半双工
要求二:增加应答机制
要求三:要求这一根线上能同时接多个模块。
单面积可以指定和任意一个模块通信,同时,单面积在跟某个模块进行通信时,其他模块不能对正常通信产生干扰
要求四:同步时序,加一条时钟线来知道对方读写(对传输时间要求不高,单片机可以随时暂停传输,去处理其他事情)

硬件电路

所有 I2C 设备的 SCL 连在一起, SDA 连在一起
设备的 SCL SDA 均要配置成开漏输出模式(下端接地,上端断开,这是为了避免总线没协调好导致电源短路这个问题,禁止所有设备输出强上拉的高电平,采用外置弱上拉电阻加开漏输出的电路结构)

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

I2C时序基本单元

起始条件: SCL 高电平期间, SDA 从高电平切换到低电平
终止条件: SCL 高电平期间, SDA 从低电平切换到高电平
起始和终止都是由主机产生的,从机不允许产生,所以在主线空闲时,从机必须始终双手放开,不允许主动跳出,触碰主线
                                                    发送一个字节: SCL 低电平期间,主机将数据位依次放到 SDA 线上(高位先行),然后释放 SCL ,从机将在 SCL 高电平期间读取数据位,所以 SCL 高电平期间 SDA 不允许有数据变化,依次循环上述过程 8 次,即可发送一个字节
接收一个字节: SCL 低电平期间,从机将数据位依次放到 SDA 线上(高位先行),然后释放 SCL ,主机将在 SCL 高电平期间读取数据位,所以 SCL 高电平期间 SDA 不允许有数据变化,依次循环上述过程 8 次,即可接收一个字节(主机在接收之前,需要释放 SDA

应答机制

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

I2C时序

指定地址写
对于指定设备( Slave Address ),在指定地址( Reg Address )下,写入指定数据( Data
第一个寻找从机地址
第二个寻找存储数据的地址
第三个寻找存储数据
当前地址读
对于指定设备( Slave Address ),在当前地址指针(指针上电默认)指示的地址下,读取从机数据( Data
第一个寻找从机地址
第二个(无指定地址环节)
指针上电默认零地址,每写入一个字节和读出一个字节后,指针就会自动自增一次移动到下一个位置,当主机没有要求读取哪个地址,从机就会返回当前指针指向的寄存器的值,
指定地址读
指定地址读
对于指定设备( Slave Address ),在指定地址( Reg Address )下,读取从机数据( Data
把指定地址写后面写的部分去掉,然后把前面追加到当前地址读时序的前面(复合时序)。
1寻址
2用来指定地址
3再来一个起始条件(先起始,再重复起始再终止)。
  • 16
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值