“金三银四”已至,又到了人才招聘的高峰期,提前祝愿各位朋友都能找到一份满意的工作。 找工作是一种双向选择,作为应聘者,了解企业的岗位需求、再针对性地强化技能是十分必要的。下方是笔者在Boss直聘招聘平台上找到的几家公司的嵌入式开发岗位的技能需求。 ![]() ![]() 岗位技能需求中都要求掌握一些 通信威廉希尔官方网站
,这期将讲解嵌入式开发中常用一种通信协议——IIC(或写成I2C)。本文内容包含个人观点,不一定完全正确,但欢迎大家指正错误或提出建议,必有重谢。 主要内容: 结合图表、问答形式介绍IIC通信的特点、应用、流程。
适合人群:
想找 单片机开发、嵌入式开发相关工作的,想入坑单片机的初学者。
文章的末尾会分享一份IIC协议文档,有需要的朋友自行下载。
01 IIC通信基本介绍 IIC,(Inter-Integrated Circuit)其实是IICBus简称,全称是 集成电路总线。该名称的正确念法是“I方C”,因为正确的写法是I²C。 IIC由Philips公司设计,其基本信息如下表。
基本特点 | 同步、串行、全双工 | 总线构成 | 主要由2根线构成:SDA,串行数据线;SCL,串行时钟线。且SDA和SCL总线都需要连接上拉电阻 | 通信速度 | 有3种速度:(bps是指“位/秒”)标准模式,不超过100K bps;快速模式,不超过400K bps;高速模式,不超过3.4M bps。 | 应用 | 电脑主板、嵌入式系统或手机用IIC总线以连接低速周边设备。IIC总线可用于驱动多数传感器、存储器以及显示器。(比如:温湿度传感器、姿态传感器、EEPROM芯片、LCD屏等) | 数据帧格式 | 除去开始条件和停止条件,一帧数据构成是:本帧数据的发送方提供8位数据,优先传送数据高位(简称MSB),之后由接收方提供1位应答(一般提供‘0’表示有效应答) |
看到这里,初次接触IIC的朋友可能会觉得有点懵了,且听笔者慢慢道来。
02 关于IIC通信的一些问题 本节内容中,笔者会以通俗的语言去描述,方便新人理解。 Q1:IIC通信的示意图是怎样的,简单分析一下? A1: ![]() 上方是笔者绘制的一个单片机(或称MCU)和两个模块通过IIC总线进行通信的简图。因为IIC总线是支持一个主机和多个从机通信的,即支持“一主多从”通信(也支持“多主多从”通信),故参与通信的器件都需要将自己接口中的数据引脚和时钟引脚分别接入总线中的SDA和SCL。 IIC总线在硬件设计上需要为串行数据线SDA和串行时钟线增加上拉电阻,阻值一般选用10KΩ及以下。该上拉电阻的主要作用有:增强总线的驱动能力、以及使总线空闲时其状态自动被拉高。同时阻值的选择也影响当前IIC总线支持的通信速度。
Q2:IIC通信的基本特点为什么是同步、串行、全双工?通信的基本特点还有哪些? A2:在描述通信的基本特点时,一般采用如下词汇进行描述。 同步 or 异步 , 串行 or 并行 , 单工 or 半双工 or 全双工 。分别解释一下它们。 同步 | 通信双方保持步调一致,一般需要连接双方的时钟引脚。在嵌入式通信中,同步一般意味着存在主从关系,多数场景下MCU将作为主机控制着通信的时序,从机通信速度受控于主机。 | 异步 | 通信双方不通过硬件连接方式保持速度一致,双方独立产生通信时序,但要求速度必须一致或十分接近。以上课为例,讲师和学员就如同通信的双方,由于人是独立且有个性的,所以讲师和学生都有自己的节奏,但是如果双方节奏差距过大,比如老师讲解很快(发送方速度较大),而学生理解很慢(接收方速度较小),这必然会导致学生没有完全学会(传输数据发生丢失) | 串行 | 通信双方在进行数据传输时,如A发B收,每个时钟周期内仅能一位数据,即串行通信。对应的硬件特征是,在每个传输方向上,数据线仅1根。 | 并行 | 数据传输时,如A发B收,每个时钟周期内可以传输多位数据(一般是8或16位数据),即并行通信。对应的硬件特征是,在每个传输方向上,数据线有多根。 | 单工 | 通信双方只能A方发送,B方接收。 | 半双工 | 通信双方都可以发送数据,但是同一时间内只能一方发送,另一方接收。对应的硬件特征是数据线只有1组(不一定是1根) | 全双工 | 通信双方可以同时发送数据,并接收来自对方发送的数据。对应的硬件特征是数据线只有2组或以上,即能支持两个方向数据传输同时进行。 |
此时,再结合IIC的总线构成:SDA和SCL。推导出以下结论:由于存在时钟线,故IIC通信特点包含同步;数据线仅1根,通信双方无法同时发送数据,故IIC通信特点包含串行和半双工。
Q3:IIC通信的流程是怎样的? A3:详情如下。 ![]() IIC通信基本流程:主机建立通信开始条件,数据传输阶段,主机建立通信停止条件。
开始条件:主机控制SCL维持高电平状态,控制SDA先拉高一段时间,再拉低一段时间(这也是“重复开始条件” / “再开始条件”)。
停止条件:主机控制SCL维持高电平状态,控制SDA先拉低一段时间,再拉高一段时间。
数据传输阶段的时序:空闲时SCL拉低。在SCL上升沿时传输数据à在SCL拉低期间准备数据(调整SDA状态),在SCL拉高期间,保持数据(SDA状态不变)。 原因:若在数据传输阶段,SCL拉高期间,更改了数据线状态,可能导致从机误认为接收到“开始条件”或“停止条件”信号,导致通信流程混乱。
Q4:数据传输阶段中的应答位如何理解? A4:应答机制是IIC通信中提高传输可靠性的一种机制。在数据传输阶段中,无论主机还是从机中哪一方发送1Byte数据,本次接收方都需要提供一位应答,这样发送方就可以获取到本次接收方的状态:是否异常?是否收到数据?或是否需要发送方继续发送数据等。 应答信号中,‘0’(低电平)对应有效应答,‘1’(高电平)对应无效应答。常规情况下,一帧数据的接受者需要提供有效应答。 通常,两种场景下会需要/会出现无效应答: a. 一帧数据的接收方出现故障时,因为总线上有上拉电阻,所以本帧的发送方获取到的应答为‘1’。 b. 当主机作为接收方,需要停止从机继续发送数据时,提供无效应答。
Q5:IIC总线上出现一主多从时,主机如何选中与哪个从机通信? A5:支持IIC通信的从设备都有器件地址(一般由生产厂商规定),在一组IIC总线上,要求所有从机的器件地址各不相同,该器件地址是7位的。主机需要在产生每个开始条件后,立刻传输一帧数据(这帧数据由主机发送,从机应答), 这帧数据有两个作用: a. 指定从设备(因为这帧数据包含从机的器件地址,只有地址匹配的从机才会在本帧数据传输后应答)。 b. 确定之后数据传输的方向(即接下来的数据帧是由主机还是从机作为发送者)。这帧数据是由7位器件地址 + 1位读写方向位构成(0,表示写;1表示读)。
关于IIC通信中主机指定从机通信的操作步骤,可以结合生活场景理解。比如上课时老师是和很多学生进行通信,可以想象成“一主多从”通信,当老师需要指定学生提问时,需要喊出目标学生的姓名(主机发送从机地址),此时教室中的所有学生都会听到该姓名、并确认是否是自己(总线上所有从机收到该地址数据,并分别和自身的设备地址比对),目标学生站起来回答问题(被选中的从机响应本帧数据)。
|