FPGA-I2C协议

一、I2C的概念

I2C总线为PHILIPS公司推出的串行通信总线,具有接线少,控制方式简单,通信速率高等优点。采用数据线SDA时钟线SCL构成通信线路,各器件可通过并联到总线上实现数据收发,器件间彼此独立,通过唯一的总线地址区分。传输数据时每个字节后需带一个响应位。

三种I2C传输模式:标准模式传输速率100k bit/s(小于等于都可以,不超过100K bit/s),快速模式传输速率400k bit/s,高速模式可达3.4M bits/s(一般设备不支持)。

二、I2C的硬件结构

I2C总线上各器件都采用漏极开路(只能输出低电平,不能输出高电平)(OD)的形式与总线连接,因此SCL和SDA均需接上拉电阻,才能输出高电平。

三、I2C的总线协议

I2C只有两条线,一条数据线SDA,一条时钟线SCL

 1.数据有效

        SDA线上的数据在时钟的高电平周期内必须稳定,数据线的高电平或低电平状态只能在SCL线上的时钟信号为低电平时才能改变,每传输一个数据位都会产生一个脉冲。

 2.START和STOP条件

        SDA由高电平转为低电平,并且SCL为高电平时,为开始条件

        SDA由低电平转为高电平,并且SCL为高电平时,为结束条件

3.数据传输过程

        在 SCL 的每个时钟脉冲期间传输一个数据位。一个字节由 SDA 线上的八个bit组成。一个字节的地址可以传输的数据是设备地址、寄存器地址或从从机写入或读取的数据。

        首先以最高有效位 (MSB) 传输数据。在 START 和 STOP 条件之间,可以将任意数量的字节数据从主设备传输到从设备。SDA线路上的数据在时钟周期的高电平阶段必须保持稳定,因为SCL高电平时数据线的变化被解释为控制命令。

4.应答(ACK)和不应答(NACK)

 

        数据的每个字节(包括地址字节)后跟来自接收器的一个 ACK​​ 位。ACK 位允许接收器与发送器通信该字节已成功接收并且可以发送另一个字节。发送应答时,ACK=0(因为都接上拉电阻,因此若ACK设置为1时,无法判别是否进行了应答操作)。

        在接收器可以发送 ACK 之前,发射器必须释放 SDA 线路。要发送ACK位,接收器应在ACK/NACK相关时钟周期(周期9)的低电平阶段拉下SDA线,以使SDA线在ACK/NACK相关时钟周期的高电平期间稳定为低电平。必须考虑设置和保持时间。

当 SDA 线在 ACK/NACK 相关时钟周期内保持高电平时,这被解释为 NACK。 有几个条件会导致 NACK 的产生:

1.接收器无法接收或发送,因为它正在执行一些实时功能,还没有准备好开始与主设备的通信。

2.在传输过程中,接收方得到了它不理解的数据或命令。

3.在传输过程中,接收方不能再接收任何数据字节。

4.主接收器完成读取数据并通过 NACK 将其指示给从设备。

四、I2C的读写过程

1.写标准流程

        1. Master发起START

        2. Master发送I2C addr(7bit)和w操作0(1bit),等待ACK

        3. Slave发送ACK

        4. Master发送reg addr(8bit),等待ACK

        5. Slave发送ACK

        6. Master发送data(8bit),即要写入寄存器中的数据,等待ACK

        7. Slave发送ACK

        8. 第6步和第7步可以重复多次,即顺序写多个寄存器

        9. Master发起STOP

 

2.读标准流程

        1. Master发送I2Caddr(7bit)和 W操作1(1bit),等待ACK

        2. Slave发送ACK

        3. Master发送reg addr(8bit),等待ACK

        4. Slave发送ACK

        5. Master发起START

        6. Master发送I2C addr(7bit)和 R操作1(1bit),等待ACK

        7. Slave发送ACK

        8. Slave发送data(8bit),即寄存器里的值

        9. Master发送ACK

        10.第8步和第9步可以重复多次,即顺序读多个寄存器

注意:在进行读操作时,首先主机需要发起一次写操作,第一次发起写操作的目的是为了获得数据即将存入的地址,否则不知道从哪个地址开始读数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值