美文网首页Network
8. Linux I2C协议

8. Linux I2C协议

作者: JalynFang | 来源:发表于2020-01-14 07:05 被阅读0次

    1. I2C通信介绍

    ▪ 由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据,是一个多主机的半双工通信方式;
    ▪ 每个挂接在总线上的器件都有个唯一的地址
    ▪ 位速在标准模式下可达 100kbit/s,在快速模式下可达400kbit/s,在高速模式下可待3.4Mbit/s

    2. I2C总线系统结构

    其中SCL时钟线的频率由主机提供,且从机不能主动来引起数据传输,必须等待主机先发信号才行;
    两个或多个主机同时发起数据传输时,可以通过冲突检测和仲裁来防止数据被破坏;

    3. I2C时序介绍

    1)空闲状态

           当总线上的SDA和SCL两条信号线同时处于高电平,便是空闲状态; SDA和SCL被上拉电阻拉高,即进入空闲状态;

    2)起始信号

           当SCL为高期间,SDA由高到低的跳变;便是总线的启动信号,只能由主机发起,且在空闲状态下才能启动该信号,如下图所示:

    3)停止信号

           当SCL为高期间,SDA由低到高的跳变;便是总线的停止信号,表示数据已传输完成,如下图所示:

    4)传输数据格式

    当发了起始信号后,就开始传输数据,传输的数据格式如下图所示:
        ▪ 当SCL为高电平时,便会获取SDA数据值,其中SDA数据必须是稳定的(若SDA不稳定就会变成起始/停止信号)
        ▪ 当SCL为低电平时,便是SDA的电平变化状态
    若主从机在传输数据期间,需要完成其它功能(例如一个中断),可以主动拉低SCL,使I2C进入等待状态,直到处理结束再释放SCL,数据传输会继续

    5)应答信号ACK

            I2C总线上的数据都是以8位数据(字节)进行的,当发送了8个数据后,发送方会在第9个时钟脉冲期间释放SDA数据,当接收方接收该字节成功,便会输出一个ACK应答信号,当SDA为高电平,表示为非应答信号NACK,当SDA为低电平,表示为有效应答信号ACK
        ▪ 当主机为接收方时,收到最后一个字节后,主机可以不发送ACK,直接发送停止信号来结束传输。
        ▪ 当从机为接收方时,没有发送ACK,则表示从机可能在忙其它事、或者不匹配地址信号和不支持多主机发送,主机可以发送停止信号再次发送起始信号启动新的传输

    6)完整的数据传输

            主机发送起始信号后,便发送一个8位的设备地址,其中第8位是对设备的读写标志,后面紧跟着的就是数据了,直到发送停止信号终止
    ❖ 当我们第一次是读操作,然后想换成写操作时,可以再次发送一个起始信号,然后发送读的设备地址,不需要停止信号便能实现不同的地址转换

    相关文章

      网友评论

        本文标题:8. Linux I2C协议

        本文链接:https://www.haomeiwen.com/subject/ofjoactx.html