0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

关于I2C总线的读写操作流程详解

电子设计 来源:硬件助手 作者:硬件助手 2020-11-29 09:38 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

本文主要介绍I2C总线的读写操作流程。

I2C总线的操作包括读和写,具体的操作流程如下:

1、主机发送数据(I2C写)流程
I2C主机给从机写数据的操作流程如下:
Master发起START;
Master发送I2C ADDR(7bit)和W操作0(1bit),等待ACK;
Slave发送ACK(ACK=0);
Master发送reg addr(8bit),等待ACK(该地址为双方约定的需要写入数据的首地址,实际使用中随机写入时可以没有该地址数据);
Slave发送ACK;
Master收到Slave的ACK信号后开始发送第一个字节的数据(8bit),等待ACK;
Slave收到数据后发送ACK;
Master收到ACK后再发送下一个数据;
当Master发送完最后一个字节数据并收到Slave的ACK后,发起STOP。



★主机通过发送地址码与对应的从机建立了通信关系,而挂接在总线上的其它从机虽然同时也收到了地址码,但因为与其自身的地址不相符合,因此提前退出与主机的通信;
★主机的一次发送通信,其发送的数据数量不受限制。主机是通过STOP信号通知发送的结束,从机收到STOP信号后退出本次通信;
★主机的每一次发送后都是通过从机的ACK信号了解从机的接收状况,如果应答错误则重发(一般重发次数可以设置,但次数太多会影响效率);
★实际测试时,ACK信号会有一个毛刺,是因为数据和ACK是不同的角色发出的(当主机发送数据时,从机返回ACK;当从机发送数据时,主机返回ACK),这样ACK正好是方向切换的时候,毛刺的大小取决于主从之间的切换速度。

2、主机接收数据(I2C读)流程
I2C主机读取从机数据的操作流程如下:
Master发送START;
Master发送I2C ADDR(7bit)和R操作1(1bit),等待ACK;
Slave发送ACK;
Master发送reg addr(8bit),等待ACK;
Slave发送ACK;
Master发起START;
Master发送I2C addr(7bit)和r操作1(1bit),等待ACK;
Slave发送ACK;
Slave发送ACK后,紧接着向Master发送数据;
Master收到数据后发送ACK;
Slave接收到ACK后再向Master发送下一个数据;
当Master完成接收数据后,向Slave发送一个非应答信号(NAK=1),从机收到非应答信号后停止发送数据;
Master发送非应答信号后,再发送一个STOP信号。



★主机所接收数据的数量是由主机自身决定,当发送“非应答信号/A”时从机便结束传送并释放总线(非应答信号的两个作用:前一个数据接收成功,从机不再发送数据)。当从机收到NAK信号后如果没有停止信号,则从机会重发上一字节数据。

3、读写指定地址的方式
I2C读写指定地址有以下几种方式:
在从器件地址后面直接跟需要读写的寄存器首地址,然后直接跟数据,最后通过停止信号结束此次读写。

主从器件约定读写指令,在从器件地址后面直接跟读写指令,然后再跟需要读写的寄存器首地址,然后直接跟数据。

在发送完从器件地址后直接跟需要读写的寄存器地址,然后再通过重复开始信号(后跟从机地址)进行读写操作(数据直接写入或者读取相应的寄存器)。





★所有读写操作,都不会限定数据的长度,读写数据的长度由主机决定。不需要读写数据了就发送STOP信号。

4、复合传输实现方式
在传输过程中改变方向,开始条件和从机地址都要重复,而读写bit要取反。如果主机发送一个重复的开始条件,那么它在这之前要发送一个NAK。

★复合模式可以在比如控制串行寄存器时用到。在第一个数据字节时一定要写寄存器内部的地址。开始条件和从地址重复后,数据就开始传输了。
★自动增加或减少之前访问的寄存器地址都由设备的设计者决定。
★兼容I2C总线的设备在接收到开始条件或重复开始条件时都一定要重启它们的总线逻辑,即使开始条件都不是正确的格式,它们都期望发送从机地址。
★开始条件后马上跟着一个终止条件是不合法的格式。

以上就是针对I2C总线的主机发送、主机接收、读写指定地址数据、符合传输方式的操作流程介绍。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • I2C总线
    +关注

    关注

    8

    文章

    422

    浏览量

    63505
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    SGM4541 I2C总线过压保护器:设计与应用的详细解析

    SGM4541 I2C总线过压保护器:设计与应用的详细解析 在如今的电子设备设计中,保护电路免受过电压的损害是至关重要的。SG Micro Corp推出的SGM4541 I2C总线过压
    的头像 发表于 03-17 16:30 393次阅读

    SGM4541A:I2C总线过压保护的理想之选

    SGM4541A:I2C总线过压保护的理想之选 在电子设备的设计中,I2C总线的稳定运行至关重要。而SGM4541A作为一款低IQ I2C
    的头像 发表于 03-17 16:30 216次阅读

    P82B715:I2C总线扩展的得力助手

    )的P82B715,一款专门用于缓冲高电容I2C总线系统的器件,看看它是如何解决这些问题的。 文件下载: p82b715.pdf 1. 器件概述 P82B715是一款支持通过I²C
    的头像 发表于 12-26 10:20 1599次阅读

    基于FPGA的I2C控制模块设计

    I2C_WRITE_WDATA.v模块实现I2C写时序,I2C_Controller (I2C控制器)例化了I2C_WRITE_WDATA.
    的头像 发表于 12-26 09:48 6024次阅读
    基于FPGA的<b class='flag-5'>I2C</b>控制模块设计

    深入解析TCA9617B:I2C总线中继器的卓越之选

    深入解析TCA9617B:I2C总线中继器的卓越之选 在电子工程师的日常设计工作中,I2C总线和SMBus系统的应用极为广泛。而TCA9617B作为一款BiCMOS双双向缓冲器,专为
    的头像 发表于 12-22 15:20 645次阅读

    AS32X601的I2C模块操作EEPROM详解

    国科安芯推出的AS32X601系列MCU芯片内置的I2C模块提供了符合工业标准的两线串行制接口,可用于MCU和外部I2C设备的通讯。I2C总线使用两条串行线:串行数据线SDA和串行时钟
    的头像 发表于 12-21 21:39 1600次阅读
    AS32X601的<b class='flag-5'>I2C</b>模块<b class='flag-5'>操作</b>EEPROM<b class='flag-5'>详解</b>

    TCA9517-Q1电平转换I2C总线中继器:设计与应用详解

    TCA9517-Q1电平转换I2C总线中继器:设计与应用详解 在当今复杂的电子系统中,I2C和SMBus系统的应用越来越广泛,而电平转换和总线
    的头像 发表于 12-18 11:25 612次阅读

    I2C总线协议

    I2C 总线使用两根信号线(数据线 SDA 和时钟线 SCL)在设备间传输数据。SCL 为单向时钟线,固定由主机驱动。SDA 为双向数据线,在数据传输过程中由收发两端分时驱动。 I2C 总线
    发表于 12-15 08:07

    CW32单片机I2C接口来读写EEPROM芯片

    所有所需读取的数据全部读取,之后再发送停止信号。 四、硬件连接 如下图所示,MCU和EEPROM通过I2C总线互连。 五、实例演示:MCU采用页写和顺序读操作时序完成EERPOM的访问
    发表于 12-09 07:43

    I2C死锁的问题

    在实际使用过程中,I2C比较容易出现的一个问题就是死锁 ,死锁在I2C中主要表现为:I2C死锁时表现为SCL为高,SDA一直为低。 在I2C主设备进行
    发表于 12-04 06:00

    基于CW32 MCU的I2C接口优化稳定读写EEPROM关键技术

    问题,实现多个EEPROM设备的稳定读写操作。 通过这些优化技术,能够有效提升CW32 MCU在I2C通信中的稳定性和可靠性,确保在复杂环境下的数据传输安全和稳定。
    发表于 12-03 07:29

    深入剖析I2C协议

    I2C是由Philips开发的简单的双向两线总线,在深入浅出理解SPI协议中,我们区分了单工,半双工,全双工协议数据流向的区别,根据特征,I2C协议属于半双工协议(即同一时刻,数据单向流动)。此外
    的头像 发表于 08-21 15:10 3922次阅读
    深入剖析<b class='flag-5'>I2C</b>协议

    I2C总线通信,为什么要进行电气隔离?

    I2C总线采用双向二线制,支持多主机多从机通信,具备高可靠性、抗干扰能力强,广泛应用于嵌入式系统中。
    的头像 发表于 08-11 11:04 2681次阅读
    <b class='flag-5'>I2C</b><b class='flag-5'>总线</b>通信,为什么要进行电气隔离?

    【沁恒CH585开发板免费试用体验】I2C 读写EEPROM (三)

    */ I2C_Stop();/* 发送停止信号 */ return ucAck; } 注释很清楚,对照I2C的协议看就行。 接着就是实现AT2C02的读写
    发表于 08-05 22:25

    STM32H7CubeMX配置硬件I2C读写失败是什么问题呀?

    STM32H7CubeMX配置硬件I2C读写失败什么问题呀,同样的操作F4和F1都能正常使用,应该不存在i2c地址错误,操作都是一样的,但
    发表于 06-12 06:21