前言:平时做fpga项目中,学习好各种通讯协议是最基本的,之前没有系统的整理过,导致理解不透,印象不深,今天开始会一点一点整理所接触到的协议。
总线通讯协议主要包括:USB、SPI、CAN、IIC
今天先介绍IIC通讯协议
1.IIC特性
IIC总线是一种串行、半双工总线,适用于近距离,低速芯片之间的通信,一般我们应用于 EEPROM 读写,或者是一些芯片的寄存器读写。
IIC 是一个两线制(双向) 的异步通信结构,分为:串行数据线SDA(收发数据),串行时钟线SCL(通信双方时钟同步)
可以看到所有设备的SCL连在一起,所有设备的SDA也连在一起。
工作时如果是多个主机同时要进行通讯工作,会先进行仲裁,保证同一时刻只有一个主机工作。(不是本篇内容的重点)
之后进入一主多从的控制方式(本篇重点),如何进行通信呢?下面开始介绍。
1.通讯开始和结束时序:
通讯启动和结束的条件:
通讯过程中S(START)表示开始,并以P(STOP)表示终止。
S:SCL为HIGH时,SDA线上出现高到低的变化,表示通讯过程启动。
P:SCL为HIGH时,SDA线上出现低到高的变化,表示通讯过程结束。
2.数据有效时序:
IIC协议特点是:时钟信号高电平有效,即当SCL为高时,SDA输入的数据有效,且需要保持稳定。
3.iic写时序:
4.iic读时序:
读时序相对于写时序来说,稍微复杂一点,包括两个过程:
1.设备地址+寄存器地址(可以理解为定位的过程)
2.设备地址+要读的数据(是真正的接收数据过程)
注意:两个不同过程中数据的传输方向要清楚。