什么是IIC通信协议?

详解通信协议之IIC通信协议 本文结合AT24C02对IIC原理进行了描述。 阅读详情
AI摘要

本文详细介绍了IIC通信协议的基础知识,包括其工作原理、通信过程中的关键信号定义、数据帧格式及寻址方式等内容。IIC是一种常用的串行半双工总线标准,广泛应用于短距离、低速的芯片间通信。

目录

1.IIC简介

2.IIC通信协议

2.1 IIC的空闲状态

2.2 IIC总线的起始信号与终止信号

2.3 IIC总线上数据传送的应答信号

2.4 IIC总线上数据有效性

 2.5 IIC总线上数据帧格式

2.6 IIC寻址

2.7 IIC主机向从机发送数据

2.8 IIC从机向主机发送数据


🌈你好呀!我是 程序猿

🌌 2024感谢你的陪伴与支持 ~

🚀 欢迎一起踏上探险之旅,挖掘无限可能,共同成长!


1.IIC简介

        IIC通信协议,也称为I2C(Inter-Integrated Circuit),是一种串行、半双工总线,主要用于近距离、低速的芯片(如传感器、存储器、显示屏等)之间的通信。它由飞利浦(Philips)公司开发,用于简化PCB板上的连接和通信需求。

I2C协议采用两根双向的信号线进行通信:

  1. 串行数据线(SDA):用于传输数据的双向线路。
  2. 串行时钟线(SCL):用于同步数据传输的时钟信号线。

        这种协议支持多主设备(多个微控制器或主控制器)和多从设备(外部设备)的连接。通过地址分配和数据传输阶段,主控制器可以选择和控制特定的从设备进行通信,从而实现多设备之间的数据交换和控制操作。

I2C协议的优点包括简单、灵活、成本低廉,适合在资源有限的嵌入式系统中使用。

                                                                 I2C总线物理拓扑图

        SDA和SCL都是双向的,所有接到I2C总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。I2C总线上的每个设备都自己一个唯一的地址,来确保不同设备之间访问的准确性。

2.IIC通信协议

2.1 IIC的空闲状态

        当IIC总线的数据线SDA和时钟线同时处于高电平时,规定为总线的空闲状态。此时各个器件输出级场效应管均处在截止状态,即释放总线,由两条信号线的上拉电阻把电平拉高。

2.2 IIC总线的起始信号与终止信号

        IIC 总线在传送数据过程中一共有三种类型的信号,它们分别是:开始信号(S)、结束信号(P)和应答信号(ACK/NACK)。

        开始信号:在SCL 串行时钟线为高电平期间,SDA 线由高电平向低电平的变化表示起始信号,只有在起始信号以后,其他命令才有效。

                                                                        开始信号 

        结束信号:在SCL 串行时钟线为高电平期间,SDA 线由低电平向高电平的变化表示终止信号,随着终止信号的出现,所有外部操作就结束。

                                                                        结束信号

        起始信号和终止信号都是由主机发送的,起始信号产生之后,总线处于被占用的状态,在终止信号产生之后,总线就处于空闲状态。

2.3 IIC总线上数据传送的应答信号

  应答信号:IIC总线进行数据传送时,传送的字节数并没有限制,但是每个字节长必须为8位长。数据传送过程中,先传送最高位(MSB),每一个被传送的字节后面都必须跟随着1位由接收器反馈的应答位(即一帧共有9位长)。

        1、应答信号为低电平时,规定为有效应答位(ACK,简称应答位),表示接收器已经成功地接收了该字节;

        2、应答信号为高电平时,规定为非应答位(NACK),一般表示接收器接收该字节没有成功。

                             应答--ACK                                                                 非应答--NACK

        对于反馈有效应答位ACK的要求是:接收器在第9个时钟脉冲之前的低电平期间将数据线SDA拉低,并且确保在该时钟的高电平期间为稳定的低电平。 如果接收器是主控器,则在它收到最后一个字节后,发送一个NACK信号,以通知被控发送器结束数据发送,并释放数据线SDA,以便主控接收器发送一个停止信号P。

2.4 IIC总线上数据有效性

         IIC总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定;只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。 

        即:SDA线上的数据在SCL时钟“高”期间必须是稳定的,只有当SCL线上的时钟信号为低时,数据线上的“高”或“低”状态才可以改变。

        应答出现在每一次主机完成8个数据位传输后紧跟着的时钟周期,低电平0表示应答,1表示非应答。

 2.5 IIC总线上数据帧格式

        1.字节传输与应答:每一个字节必须保证是8bit长度。数据传送时,先传送最高位(MSB),每一个被传送的字节后面都必须跟随1bit的应答位(即每一帧数据一共有9bit)

        2.在IIC总线上传送的每一位数据都有一个时钟脉冲相对应(或同步控制),即在SCL串行时钟的配合下,在SDA上逐位地串行传送每一位数据。数据位的传输是边沿触发。

2.6 IIC寻址

在I2C(IIC)通信协议中,寻址是确定要发送或接收数据的目标设备的过程。以下是关于I2C寻址的关键点:

  1. 地址格式:

    • 每个I2C设备都有一个唯一的7位或10位地址。
    • 7位地址是最常见的,但有些设备支持10位地址,这取决于设备的制造商和规范要求。
  2. 地址类型:

    • 写地址(写操作):主设备(通常是微控制器)向从设备发送数据。写地址的最低位为0。
    • 读地址(读操作):主设备从从设备接收数据。读地址的最低位为1。
  3. 地址传输:

    • 在I2C通信的起始阶段,主设备通过SDA线发送目标设备的地址。
    • 主设备发送一个字节的数据,包括从设备的地址和读写位(最低位),告诉从设备是发送数据还是接收数据。
    • 如果设备支持10位地址,首先发送两个字节的扩展地址,然后再发送读写位。
  4. 地址确认:

    • 每当主设备发送完设备地址和读写位后,接收设备会发送一个应答信号(ACK)来确认它被正确地寻址和准备好进行数据传输。
    • 如果没有设备响应(应答),或者设备拒绝通信,则没有应答(NACK)信号被发送,通信将中止或重新尝试。
  5. 多主设备冲突:

    • I2C支持多主设备的连接,但是在多主模式下,会出现地址冲突的情况。
    • 主设备在发送地址后,会监视SDA线的状态,如果检测到其他主设备也在发送,则会停止发送,并等待总线空闲。

        总体来说,I2C的寻址过程是通过在总线上发送设备地址和读写位来确定通信目标,确保设备之间可以安全、有效地进行数据传输。

2.7 IIC主机向从机发送数据

 

S:主机首先产生START信号
从设备地址:然后紧跟着发送一个从机地址,这个地址共有7位,紧接着的第8位是数据方向位                              (R/W),0表示主机发送数据(写),1表示主机接收数据(读)
W:主机发送地址时,总线上的每个从机都将这7位地址码与自己的地址进行比较,若相同,则认         为自己正在被主机寻址,根据R/T位将自己确定为发送器和接收器
ACK:这时候主机等待从机的应答信号(A)
数据+ACK:当主机收到应答信号时,发送要访问从机的那个地址, 继续等待从机的应答信号
数据+ACK:当主机收到应答信号时,发送N个字节的数据,继续等待从机的N次应答信号,
P:主机产生停止信号,结束传送过程。

2.8 IIC从机向主机发送数据

S:主机首先产生START信号;

从设备地址:然后紧跟着发送一个从机地址,注意此时该地址的第8位为0,表明是向从机写命令;

R:这时候主机等待从机的应答信号(ACK);

ACK:当主机收到应答信号时,发送要访问的地址,继续等待从机的应答信号;

数据+ACK:当主机收到应答信号后,主机要改变通信模式(主机将由发送变为接收,从机将由接收变为发送)所以主机重新发送一个开始start信号,然后紧跟着发送一个从机地址,注意此时该地址的第8位为1,表明将主机设置成接收模式开始读取数据;

数据+NACK这时候主机等待从机的应答信号,当主机收到应答信号时,就可以接收1个字节的数据,当接收完成后,主机发送非应答信号,表示不再接收数据;

P:主机进而产生停止信号,结束传送过程。

期待批评指正,共同进步!

IIC通信协议 I2C由时钟线(SCL)和数据线(SDA)两根线构成通信线路,总线空闲时通过上拉电阻拉高电平。I2C是一种主从结构(Master/Slave)总线,总线上每个设备都可以作为主机或从机,主设备通常是CPU,用来产生传输的时钟信号,并初始化总线的数据传输,而从设备只能被动响应主机请求。因为一个I2C总线可以接多个从设备,这就需要主机通过地址来确定与哪个从机进行通信。I2C总线上的每个从设备都有一个唯一的7bit物理识别地址。因为I2C地址全0表示广播地址,所以一个I2C总线理论最多能挂载2^7 - 1=127个 阅读详情

相关推荐

IIC通讯协议详解(电路和时序图)

硬件电路设计 软件时序设计 1. 起始条件与终止条件 2. 发送与接收一个字节 3. 发送应答和接收应答 4. IIC时序 4.1 指定地址写 4.2 当前地址读 4.3 指定地址读

weixin_44115575的博客 3万+

IIC通讯协议

IIC(Inter-integerted Circuit)集成电路总线,该通信协议由NXP(原PHILIPS)公司设计,多用于主控制器和从器件间的主从通信,在小数据量场景下使用,传输距离短,任意时刻只能有一个主机的特性。

weixin_58609166的博客 1万+

IIC通信协议详解

IIC通信协议详解IIC的概述IIC分为软件IIC和硬件IICIIC通信协议空闲状态开始信号与停止信号开始信号程序: IIC的概述 IIC:两线式串行总线,它是由数据线SDA和时钟线SCL构成的串行总线,可发送和接收数据。 在CPU与被控IC之间、IC与IC之间进行双向传送,高速IIC总线一般可达400kbs以上。 时钟线SCL:在通信过程起到控制作用。 数据线SDA:用来一位一位的传送数据。 IIC分为软件IIC和硬件IIC 软件IIC:软件IIC通信指的是用单片机的两个I/O端口模拟出来的IIC,用

w492665264的博客 4467

通信协议——IIC协议

IIC(Inter-Integrated Circuit)协议是一种同步串行通信接口,它采用半双工工作模式,即在同一时间只能进行单向的数据传输。总线由两条信号线组成:一条是数据线SDA(Serial Data Line),用于传输数据;另一条是时钟线SCL(Serial Clock Line),由主设备提供时钟信号,以确保所有连接到总线的设备同步进行数据交换。在I2C总线上,每个从设备都有一个唯一的地址,主设备通过发送这个地址来选择与其通信的目标设备。

m0_66317799的博客 2万+

关于IIC通信协议的理解

前段时间,一直在调SDRAM与VGA的驱动,搞了很长一段时间,参考了很多资料,最终终于思路理清了,不过鉴于手上没有相关的硬件电路,所以暂时搁置了,回归正题,先来看IIC之间的通信吧。 首先,IIC通信与UART,还有SPI统称为串行接口通信,不过它们之间还是有区别的,如UART的负电平逻辑,还有UART通信不需要时钟,只需要特定的波特率即可,SPI与IIC都可以有一个主机,多个从机的情况,不过

qaaz12322的博客 1万+

IIC 通信协议

一、IIC 通信协议介绍 IC(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。 如今主要在服务器管理中使用,其中包括单个组件状态的通信。例如管理员可对各个组件进行查询,以管理系统的配置或掌握组件的功能状态,如电源和系统风扇。可随时监控内存、硬盘、网络、系统温度等多个参数,增加了系统的安全性,方便了管理。IIC数据传输速率有标准模式(100 kbps)、快速模式(400 kbps)和高速模式(3.4 Mbps),另外一些变种

思想开化的冰块博客 2781

通信协议(三)——IIC协议

通信协议(三)——IIC协议

好好学习,天天向上 1万+

通信协议之IIC总线

文章目录前言物理层协议层基本读写过程起始信号和停止信号数据有效性地址及数据方向响应 前言 IIC通信协议是Philips公司开发的,由于其引脚少,硬件简单,无须收发设备,因此应用广泛。本文主要简单介绍一下IIC协议。 本文主要参考一下资料: 刘火良, 杨森. STM32库开发实战指南——基于STM32F4.机械工业出版社 物理层 IIC的物理层有以下几个特点: 支持多个设备 。在同一个IIC总线中,可以挂载多个主机和从机。每个连接到总线的设备都有单独的地址,主机可以通过不同的地址来访问不同的从机。

我想想的博客 2377

iic通信协议

介绍IIC通信

weixin_62922370的博客 4363

通信协议一 IIC

通信协议第一讲:IIC通信,IIC控制器与模拟

m0_59406757的博客 1039

1.IIC通信协议详解

IIC总线是一种由飞利浦公司开发的串行通信总线,采用多主从架构。其核心引脚包括数据线SDA和时钟线SCL,通信过程通过起始/停止信号控制。IIC采用器件地址寻址机制,支持半双工通信,适用于控制场景而非大数据传输。通信时序要求严格,SCL高电平时SDA需保持稳定。实际应用中常采用软件模拟IIC实现,便于时序控制和引脚管理。典型工作流程包括起始信号、地址/数据传输、应答机制和停止信号,空闲状态下SDA和SCL保持高电平。

萱苏的博客 1206

通信协议之IIC

4、连接到IIC总线上的器件都有唯一的地址用来区别不同的芯片(7位),其中每个器件都可以作为主机或者从机,但同一时刻只能有一个主机,总线上的器件增加和删除不影响其他器件的正常工作;单片机A发送起始信号启用总线,其他主机和从机都能接受到信号,此时作为主机的单片机B就不会再启用总线了,其他从机接收到信号后就知道有主机开始通信了,此时总线处于被占用状态。注意:在IIC通信中,第一个字节都是由主机发送给从机的,确定数据的传输方向,后面的数据有可能主机发送,也可能是从机发送。1、起始信号表示一次数据传输的开始。

lyxx03_的博客 932

ESP32 Arduino 学习篇(五)TFT_eSPI库

该库有User_Setup.h和 User_Setup_Select.h两个配置文件,支持 ①自定义参数或 ②使用已有配置 驱动TFT屏幕。优点是: 1. 占用空间非常小 2. 动画清晰,充分利用每个像素点 3. 可以非常灵动. 4. 方便进行微调。首先在Libraries里面搜索安装TFT_eSPI库到你的工程文件里面。初始化屏幕, 如果是ST7735,可以往里面传一个参数, 具体用到时再看。缺点是: 1. 容易闪屏 2. 一般不会太复杂 3.需要大量的计算。特别注意: 字库7是仿7段数码屏的样式。

DOF526570的博客 2万+
上一篇: 并行与串行的区别及并行通信的系统同步方式
下一篇: MCAL 架构
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿!=程序员

感谢来过,感谢有你!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值