常见通信协议之IIC

本文详细介绍了I2C通信协议,包括其两线结构、地址和数据传输、时序规则、地址扩展以及读写流程,特别强调了SDA和SCL线的上拉电阻和I2C在多设备连接中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

常见通信协议–系列


IIC

一、简介

IIC(Inter-Integrated Circuit,集成电路总线)是由由飞利浦公司开发的一种两线式串行总线通信协议,也可以写作I2C。IIC有如下基本特征:

  • 两线制结构:I2C总线由两根线组成,即数据线SDA和时钟线SCL。SDA负责传输数据,而SCL用于同步数据传输。
  • 地址帧与数据帧:在I2C通信中,消息被分为地址帧和数据帧。地址帧用于主设备指明消息发往哪个从设备,数据帧则包含实际传输的数据。
  • 支持多设备连接:I2C允许多个设备通过总线连接,并通过设备地址来识别每个设备,从而实现设备间的信息交换。
  • 软件控制:I2C的一个优势是微控制器只需要两个通用I/O引脚和相应的软件即可控制整个芯片网络。
  • 速度与地址扩展:I2C最初设计时只允许100KHz的速度和7-bit标准地址,后来的规范增加了400KHz的快速模式以及10bit地址扩展,IIC的高速模式可达3.4MHZ
  • 短距离通信:I2C适用于短距离的设备间通信,如处理器与外围设备的接口。
  • 半双工通信:I2C属于半双工同步通信方式,数据传输线只有一根,传输和接收要去占用SDA线。
  • 多主控:任何能够进行发送和接收的设备都可以成为主控设备,当然在任何时间点上只能有一个设备总线的主控。
    总的来说,I2C协议因其简洁的布线要求和高效的通信机制,在嵌入式系统和电子设备中得到广泛应用,特别是在需要微控制器与多个外围设备通信的场景中。

二、IIC总线拓扑结构

IIC总线拓扑结构

为什么SDA和SCL需要外接上拉电阻?
由于IIC总线支持多设备连接,所以需要采用开漏输出实现“线与“功能。这样一来就会导致只能输出低电位无法输出高电位,所以需要外接上拉电阻,才能实现输出高点位。

三、IIC协议的三种信号

IIC在传输过程中共有三种类型的信号:开始信号接收信号应答信号
IIC设备的一般流程:闲置——开始信号——发送地址/应答——发送数据/应答——停止信号

  • 开始信号:
    在时钟线(SCL)为高时,数据线(SDA)由高到低进行跳变
  • 停止信号:
    当时钟线(SCL)为高时,数据线(SDA)由低到高进行跳变
  • 应答信号:
    接收数据的IC在接收完八位数据后会发送一个特定低电平脉冲的信号,告诉发送方已经完成接收。应答信号为电平时,规定为有效应答位(ACK,简称应答位);应答信号为电平时,规定为非应答位(NACK)

四、IIC协议时序

IIC协议时序图

  • 在SCL时钟信号为高电平期间,SDA上的数据必须保持稳定。
  • 只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。

五、IIC协议的传输地址以及数据

IIC总线上传送的数据信号不仅包括真正的数据信号,并且包括地址信号
IIC总线规定,在起始信号后面必须传送一个从设备的地址(7位),第8位是数据传送的方向位。用”0“表示主设备发送;”1“表示主设备读取。每次数据传送总是由主设备产生终止信号而结束。

六、IIC协议读写流程

主机向从机写数据:

  1. 主机产生开始信号
  2. 紧跟着发送一个从机地址(7位),第8位是数据方向位0表示主机发送数据(写);1表示主机接收数据(读)
  3. 总线上的每个从机都将自己的设备地址与主机发出的从机地址进行比较。如果 相同,则认为主机正在被主机寻址,然后根据第8位确定自己位发送器或接收器。
  4. 主机等待从机应答信号
  5. 主机收到应答信号,发送要访问从机的地址,继续等待从机的应答信号。
  6. 主机收到应答信号,发送N个字节的数据,继续等待从机的N此应答信号
  7. 主机产生停止信号。

主机从从机读取数据

  1. 主机产生开始信号
  2. 紧跟着发送一个从机地址(7位),但是此时第8位应该为0
  3. 主机等待从机应答信号
  4. 主机收到应答信号,发送要访问从机的地址,继续等待从机的应答信号。
  5. 收到应答信号后,主机改变通信模式,主机重新发送一个开始信号,然后紧跟着发送一个从机地址,但是此时第8为应该设置为1,设置成接收模式开始读取数据
  6. 等到从机的应答信号,当主机收到应答信号时就可以开始就收一个字节的数据。接收完成后主机发送非应答信号表示不在接收数据,当然也可以发送应该信号,继续接收下一个 地址的一个字节数据。
  7. 主机产生停止信号。

为什么主机读取数据时需要进行两次寻址?为什么主机第一次发送从机地址第8位为0表示写?
->如果第一次发送从机地址第8位就设置位1(读)时,从机开始应答后就会开始发送从机当前地址的数据,主机无法控制读取从机的地址,所以必须用一次写寻址来将从机定位到主机要读的地址。第一次的寻址操作其实就是控制从机发送数据的地址。

回答: IIC通信协议常见问题包括以下几个方面: 1. IIC总线的主设备如何结束通信过程?主设备可以通过产生一个停止条件来结束通信过程,停止条件由SCL上的0->1转换后SDA上的0->1(低到高)转换定义,SCL保持高电平。在正常的数据写操作时,SDA上的值应该不会在SCL为高电平时改变,以避免错误的停止条件。\[2\] 2. IIC总线的高级特性之一是10-bit地址是什么意思?10-bit地址是指在IIC总线中,地址可以使用10位来表示,相比于传统的7位地址,10-bit地址提供了更大的地址空间,可以连接更多的设备。\[3\] 3. IIC总线是一种多主机总线,如何处理多个主机同时启用总线的情况?当总线上有多个主机同时启用总线时,IIC总线具备冲突检测和仲裁的功能来防止错误产生。每个连接到IIC总线上的器件都有一个唯一的地址(7位),且每个器件都可以作为主机也可以作为从机,总线上的设备增加和删除不影响其他器件的正常工作。\[3\] 4. IIC通信总线的通信过程是怎样的?通信过程包括以下几个步骤:主机发送起始信号启用总线,主机发送一个字节数据指明从机地址和后续字节的传递方向,被寻址的从机发送应答信号回应主机,发送器发送一个字节数据,接收器发送应答信号回应发送器,循环进行数据传输,通信完成后主机发送停止信号释放总线。\[3\] 总的来说,IIC通信协议是一种串行、半双工的总线协议,主要用于近距离、低速的芯片之间的通信。它具有简单的硬件结构和低成本,并且在各个领域得到了广泛的应用。\[3\] #### 引用[.reference_title] - *1* *2* [【硬件通信协议】1. 详细解析IIC通信协议](https://blog.csdn.net/sishuihuahua/article/details/88128761)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [stm32常见通信协议IIC](https://blog.csdn.net/nbbskk/article/details/127861990)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值