资讯详情

IIC协议通信原理

零. 声明

我们将以连载的方式不断更新本专栏的文章。本专栏计划更新如下:

ESP-IDF基本介绍,主要涉及模块、芯片开发板、环境建设、程序编译下载、启动过程等基本操作,让您ESP-IDF对发展有一个全面的了解,比我们后续的学习打下基础!

ESP32-IDF外设驱动介绍主要基于esp-idf现有的driver,提供各种外设的驱动,如LED,OLED,SPI LCD,TOUCH,红外,Codec ic等等,在这篇文章中,我们不仅要做外设驱动,还要介绍常用的外设总线,让大家知道为什么!

目前比较火热的GUI LVGL介绍,主要设计LVGL7.1,LVGL8移植介绍,也将介绍每个组件,了解原理,最后,我们将推出一个组态软件来构建我们GUI,提高我们的效率!

ESP32-蓝牙,熟悉我,应该知道,即使我从事蓝牙协议堆栈的开发,所以这是我们独特的优势,在本章中,我们将提供蓝牙应用知识,也将应用蓝牙底协议堆栈理论,让您从上到下完全通过蓝牙监督!

Wi-Fi介绍,熟悉我应该知道,我们也做过一个sdio wifi驱动教程板,所以在wifi我们在这方面也有独特的优势,在这一章中,我们不仅提供Wi-Fi应用知识也会结合底层理论,让你对Wi-Fi有清晰的认知!

FreeRTOS介绍,主要介绍FreeRTOS使用和操作各种功能(任务管理/消息队列/信号量/相互排斥/事件/软件定时器/任务通知/内存管理/中断管理等)。

Arduino介绍,主要介绍ESP32 Arduino基本操作(环境建设、烧录、下载等开发流程)Arduino蓝牙,wifi的使用。

Demo,本章整合上述章节,做一些全面的工作demo,在巩固上述章节的同时,也可以学习实际项目!

此外,我们的教程包括但不限于上述章节,,请详细查看!

------------------------------------------------------------------------------------------------------------------------------------------

购买开发板(点击我)

文档目录(点击我)

Github代码仓库(点击我)

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

------------------------------------------------------------------------------------------------------------------------------------------

一.IIC概念

I2C 通讯协议(Inter-Integrated Circuit)是由 Phiilps 由于引脚少,硬件实现简单,可扩展性强 USART、 CAN 外部收发设备的外部收发设备现在广泛应用于系统中的多个集成电路(IC)间的通讯。

二.IIC物理层

I2C 通信设备之间常见的连接方式见图 :

(1) 它是支持多设备的总线。总线是指多设备共用的信号线。 I2C 多个通信总线可以连接到通信总线 I2C 支持多个通信主机和多个通信从机的通信设备。 (2) 一个 I2C 总线只使用两条总线,一条双向串行数据线(SDA) ,串行时钟线(SCL)。数据线用于表示数据,时钟线用于数据收发同步。 (3) 每个连接到总线的设备都有一个独立的地址,主机可以使用该地址访问不同的设备。 (4) 当总线通过上拉电阻接收电源时。 I2C 当设备有空时,会输出高阻态,当所有设备都有空时,都会输出高阻态,上拉电阻将总线拉到高电平

(5) 当多个主机同时使用总线时,为了防止数据冲突,仲裁决定哪个设备占用总线。 (6) 传输方式有三种:标准模式传输速率为 100kbit/s ,快速模式为 400kbit/s ,高速模式下可达 1Mbit/s,但目前大多 I2C 该设备不支持高速模式。 (7) 连接到相同的总线 IC 总线最大电容量为总线最大电容 400pF 限制 。

三.IIC协议层

I2C 该协议定义了信号的开始和停止、数据有效性、响应、仲裁、时钟同步和地址广播。

1.读写的基本过程

先看看 I2C 通信过程的基本结构见图

这些图表示主机和从机通信, SDA 线数据包序列。 其中 S 由主机表示 I2C 传输接口产生的起始信号(S),这时连接到 I2C 总线上的所有从机器都会收到这个信号。 起始信号生成后,所有从机器开始等待主机,然后广播 从机地址信号(SLAVE_ADDRESS)。 在 I2C 在总线上,每个设备的地址都是唯一的, 当主机广播的地址与设备地址相同时,选择设备,未选择的设备将忽略后续的数据信号。根据 I2C 协议,这个从机地址可以是 7 位或 10 位。 在地址位之后,是传输方向的选择位,该位为 0 当表示后面的数据传输方向是从主机传输到从机,即从机写数据。这个位置 1 相反,主机由从机读取数据。 从机器接收匹配地址后,主机可以从机会返回响应(ACK)或非应答(NACK)只有在接收到响应信号后,主机才能继续发送或接收数据。 若配置的方向传输位为“写数据”方向, 也就是幅图的情况, 收到响应信号后,广播地址, 主机开始正式向从机传输数据(DATA),数据包的大小为 8 位置,每次主机发送字节数据,都要等待从机的响应信号(ACK),重复这个过程可以从机器传输到 N 数据,这个 N 大小没有限制。当数据传输结束时,主机向从机发送停止传输信号(P),数据不再传输。 若配置方向传输位于读数据方向, 也就是幅图的情况, 收到响应信号后,广播地址, 从机器开始返回主机的数据(DATA),数据包的大小也是 8 每次从机发送数据时,都会等待主机的响应信号(ACK),重复这个过程可以返回 N 数据,这个 N 大小没有限制。当主机想停止接收数据时,将非响应信号返回从机(NACK),则从机自动停止数据传输。 除基本读写外, I2C 复合格式更常用于通信,即第三幅图的情况。传输过程中有两个起始信号(S)。一般在第一次传输中,主机通过 SLAVE_ADDRESS 找到设备后,发送一个数据,通常用来表示设备内的寄存器或存储器地址(注意区分它和 SLAVE_ADDRESS 差异);在第二次传输中,读写地址的内容。也就是说,第一次通讯是告诉从机读写地址,第二次是读写的实际内容。 上述通信过程中包含的信号分解如下

2.信号的开始和停止

上述开始(S)和停止(P)当信号是两种特殊状态时 SCL 线是高电平时 SDA 线路从高电平切换到低电平,表示通信的开始。

当 SCL 是高电平时 SDA线路从低电平切换到高电平,表示通信停止。主机通常会产生启停信号。 如下图:

3.数据有效性

I2C 使用 SDA 使用信号线传输数据 SCL 数据同步的信号线。 SDA数据线在 SCL 每个时钟周期传输一个数据。传输时, SCL 高电平时 SDA数据有效,即此时 SDA 为高电平时表示数据1,为低电平时表示数据0。当 SCL低电平时, SDA 数据无效,通常在这个时候 SDA电平切换为下一次数据表示做好准备 ,如下图:

4.地址和数据方向

I2C 总线上的每个设备都有自己的独立地址。主机发起通信时,通过 SDA 发送设备地址的信号线(SLAVE_ADDRESS)找机器。 I2C 协议规定了设备地址 7 位或 10 位,实际中 7 位的址应用比较广泛。紧跟设备地址的一个数据位用来表示数据传输方向,它是 数据方向位(R/W),第 8 位或第 11 位。数据方向位为“1”时表示主机由从机读数据,该位为“0”时表示主机向从机写数据。见图

读数据方向时,主机会释放对 SDA 信号线的控制,由从机控制 SDA 信号线,主机接收信号,写数据方向时, SDA 由主机控制,从机接收信号。

5.响应

I2C 的数据和地址传输都带响应。响应包括“应答(ACK)”和“非应答(NACK)”两种信号。作为数据接收端时,当设备(无论主从机)接收到 I2C 传输的一个字节数据或地址后,若希望对方继续发送数据,则需要向对方发送“应答(ACK)”信号,发送方会继续发送下一个数据;若接收端希望结束数据传输,则向对方发送“非应答(NACK)”信号,发送方接收到该信号后会产生一个停止信号,结束信号传输。见图

传输时主机产生时钟,在第 9 个时钟时,数据发送端会释放 SDA 的控制权,由数据接收端控制 SDA,若 SDA 为高电平,表示非应答信号(NACK),低电平表示应答信号(ACK)。

标签: 2000v103pf电容

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台