美文网首页
FPGA笔记 | I2C通信-读写数据过程

FPGA笔记 | I2C通信-读写数据过程

作者: 力卉编程 | 来源:发表于2020-02-18 10:43 被阅读0次

预置条件:

在通信之初,主从机必须根据自己的要求约定好通信规则:command的定义和位置、address的位数和位置。
以读写从机寄存器数据为例:
假设从机寄存器地址为8位、从机寄存器也位8位(被读取数据为8位);
约定读command为0x01,写command位0x02;
约定主机发起通信后,第一个slave address字节收到ack后,紧跟的一个字节为command,再下面一个字节为address。

读寄存器数据步骤:

1.1 主机先发起一次通信,将读command(0x01)和需要读取的寄存器地址address写入从机;(主机发出写操作)
1.2 从机firmware的处理:
      1.2.1 将command和address分别提取出来;
      1.2.2 判断command的含义(本例中,是读指令还是写指令);
      1.2.3 根据收到的的address,将对应寄存器的的数据放入从机I2C输出buffer;(这个步骤可以使用指针)
1.3 主机再次发起一次通信,读取从机的数据;(主机发出读操作)
读寄存器数据
读寄存器数据2

写操作步骤:

2.1 主机发起通信,按约定依次写入command、要写入的从机寄存器地址address和要写入的数据data;
2.2 从机firmware要做的处理:
      2.2.1 分别提取command、address和data;
      2.2.2 根据command做出判断(本例中则判断是写入还是读取);
      2.2.3 将data写入与接收到的address对应的寄存器。(这个步骤可以使用指针)。
写寄存器数据

主机发送数据流程

(1)主机在检测到总线为“空闲状态”(即 SDA、SCL 线均为高电平)时,发送一个启动信号“S”,开始一次通信的开始
(2)主机接着发送一个命令字节。该字节由 7 位的外围器件地址和 1 位读写控制位 R/W组成(此时 R/W=0)
(3)相对应的从机收到命令字节后向主机回馈应答信号 ACK(ACK=0)
(4)主机收到从机的应答信号后开始发送第一个字节的数据
(5)从机收到数据后返回一个应答信号 ACK
(6)主机收到应答信号后再发送下一个数据字节
(7)当主机发送最后一个数据字节并收到从机的 ACK 后,通过向从机发送一个停止信号P结束本次通信并释放总线。从机收到P信号后也退出与主机之间的通信


发送数据图

注意:①主机通过发送地址码与对应的从机建立了通信关系,而挂接在总线上的其它从机虽然同时也收到了地址码,但因为与其自身的地址不相符合,因此提前退出与主机的通信;②主机的一次发送通信,其发送的数据数量不受限制。主机是通过 P 信号通知发送的结束,从机收到 P 信号后退出本次通信;③主机的每一次发送后都是通过从机的 ACK 信号了解从机的接收状况,如果应答错误则重发。

主机接收数据流程

(1)主机发送启动信号后,接着发送命令字节(其中 R/W=1)
(2)对应的从机收到地址字节后,返回一个应答信号并向主机发送数据
(3)主机收到数据后向从机反馈一个应答信号
(4)从机收到应答信号后再向主机发送下一个数据
(5)当主机完成接收数据后,向从机发送一个“非应答信号(ACK=1)”,从机收到ASK=1 的非应答信号后便停止发送
(6)主机发送非应答信号后,再发送一个停止信号,释放总线结束通信


接收数据流程

注意:主机所接收数据的数量是由主机自身决定,当发送“非应答信号/A”时从机便结束传送并释放总线(非应答信号的两个作用:前一个数据接收成功,停止从机的再次发送)。

文 | 力卉编程

相关文章

  • FPGA笔记 | I2C通信-读写数据过程

    预置条件: 在通信之初,主从机必须根据自己的要求约定好通信规则:command的定义和位置、address的位数和...

  • Ginkgo USB-I2C适配器

    典型应用: - I2C总线设备,芯片控制、调试; - I2C接口传感器测试; - I2C存储器EEPROM数据读写...

  • 9.26总结

    今天学习了I2C通信协议 I2C是串行同步半双工通信 IIC通信处于空闲状态时,两条信号线各自上拉处于高电平 数据...

  • FPGA串口通信失败可能的原因和解决方法

    今天使用AT STAR进行UART(RM232)通信实验,原本的设计是想从电脑发送数据给FPGA,然后FPGA立刻...

  • I2C通信二

    一、数据在I2C总线上的传输协议 (1) I2C通信时的基本数据单位也是以字节为单位的,每次传输的有效数据都是1个...

  • 基于I2C的STM32与树莓派通信

      传统的串口通信会丢失数据,不可靠,故采用I2C(同步串行总线)通信。  树莓派上使用python脚本,后期将使...

  • fpga通信

    uart通信 波特率9600 计数器其实有分频的作用 堆栈的认识:(heap和stack的区别): 1.h...

  • 项目15 之 I2C通信方式原理与应用

    项目15 之 I2C通信方式原理与应用 I2C是各类传感器与模块与Arduino通信的最常用方式之一 I2C的全称...

  • OSError: [Errno 121] Remote I/O

    打开raspberryPi I2C功能,连接上I2C通信的扩展板即可

  • 8. Linux I2C协议

    1. I2C通信介绍 ▪ 由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据,是一个多主机的半双工通信方...

网友评论

      本文标题:FPGA笔记 | I2C通信-读写数据过程

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