IIC总线通信协议

I2C的定义

        I2C是由飞利浦公司(没错就是你刮胡刀的那个飞利浦)开发的两线式串行同步总线(串口的通信速率是BPS波特率)

        通信使用两根线 时钟线 数据线

        一个时钟周期传输一位数据

        SCL: 时钟线 (用于区分异步)

        SDA: 数据线【

        IIC的速率:标准模式 100Kb/s

                           快速模式 400Kb/s

                           高速模式 3.4Mb/s

                           超高速模式 5Mb/s

        了解IIC总线的连接方式 —- 下面参考图

uart和IIC的的对比

        UART 一根数据线 tx rx

                由于没有时钟线, 没有办法调节通信时序, 所以通信的时序需要在通信之前就协商好

                低位先出

        IIC 两根线 SCL SDA

                由于有时钟线, 所以将来可以自己调节读写时序

                高位先出

了解通信的辅助信号:

        start data stop ……

        设备有主从之分

        主设备需要知道从设备的设备地址

        主设备 —》 从设备

        《—

        接受/发送

时序

        空闲状态下 SDA 和 SCL上应该呈现高电平

        开始信号: SCL处于高电平期间, SDA由高到低产生一个下降沿

        终止信号: SCL处于高电平期间, SDA由低到高产生一个上升沿

        开始信号和终止信号都由cpu(主设备)产生

        数据位: 一次传输8bit 在SCL处于低电平期间, 将数据放在SDA上

        ack: 应答信号,第9个时钟周期 SCL处于高电平期间 接收方将SDA拉低 (低电平保持一个时钟周期)

        nack: 应答信号,第9个时钟周期 SCL处于高电平期间 接收方将SDA拉高(拉高电平保持一个周期)

        设备地址+读写位

        高位先出 低送高取 –》低送高取,低电平发送方发,高电平接收方取,画图还是依旧画不按照这句

        R/W非—》1电平读,0电平写

图中的start错了并不独占一个时钟周期,只要体现出下降沿就可以

实际应用

        大多数I2C从设备(如EEPROM、传感器)内部有一个地址指针寄存器,用于指示当前操作的数据位置。

        工作原理​ 写地址阶段​:主设备发送寄存器地址(如0x00),从设备收到后将该地址存入指针寄存器,相当于 设置数据读取的起点。 读数据阶段​:从设备根据指针寄存器的值返回对应地址的数据,并在每次读取后自动递增指针(连续读时)。

        说白话就是当你用I2C总线操作外设寄存器时,写只需要写一遍,读需要先写在读。

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
鲜香虾仁菠萝炒饭便当的头像 - 鹿快
评论 抢沙发

请登录后发表评论

    暂无评论内容