type
status
date
slug
summary
tags
category
icon
password
什么是I2C
IIC(Inter-Integrated Circuit)也称I2C,中文叫集成电路总线。是一个多主从的串行总线,由飞利浦公司发明的通讯总线,属于半双工同步传输类总线,仅由两条线就能完成多机通讯,一条SCL时钟线,另外一条双向数据线SDA,IIC总线要求每个设备SCL/SDA线都是漏极开路模式,因此必须带上拉电阻才能正常工作。I2C协议占用引脚少,硬件实现简单,可扩展性强,I2C数据传输速率有标准模式(100kbps)、快速模式(400kbps)和高速模式(3.4Mbps)。
IIC使用两根信号线进行通信:一根时钟线SCL,一根数据线SDA。IIC将SCL处于高时,SDA拉低的动作(SDA下降沿)作为开始信号,SCL处于高时,SDA拉高的动作作(SDA上升沿)为结束信号;传输数据时,SDA在SCL低电平时改变数据,在SCL高电平时保持数据,每个SCL脉冲的高电平传递1位数据。
I2C的特点和优势
总线上可以连接多个IIC通讯设备,支持多个通信主机及多个通信从机。
双线制:I2C使用两根信号线进行通信,包括时钟线(SCL)和数据线(SDA)。
多从机:多个从机设备可以连接到同一条I2C总线上,每个从机都有唯一的地址。
每个连接到总线的设备都有一个独立的地址,主机可以利用这个地址进行不同设备之间的访问。
多主机:多个主机设备可以通过I2C总线进行并行通信,通过仲裁机制实现多主机冲突的解决。
简单和灵活的连接:I2C协议使用统一的总线结构,可以方便地连接各种设备,减少硬件复杂性。
三种传输模式:标准模式为100kbit/s ,快速模式为400kbit/s ,高速模式下可达3.4Mbit/s,但目前大多I2C 设备尚不支持高速模式。意味着IIC是一种低速通信。
时钟频率由主机设备控制,它决定了数据传输的速率。时钟频率越高,数据传输速度越快,但也会增加总线负载和干扰的风险。
总线通过上拉电阻接到电源。当I2C设备空闲时,会输出高阻态,而当所有设备都空闲,都输出高阻态时,由上拉电阻把总线拉成高电平。
寻址
I2C没有像SPI那样的从属选择线,因此它需要另一种方式让从机知道数据正在发送给它,而不是另一个从机站。它通过寻址来做到这一点。地址帧始终是新消息中起始位之后的第一个帧。
主机将它想要与之通信的从机的地址发送给连接到它的每个从机。然后,每个从机将从主机发送的地址与其自己的地址进行比较。如果地址匹配,则将低电平ACK位发送回主机。如果地址不匹配,则从机不执行任何操作,并且 SDA 线路保持高电平。
缺点
- 数据传输速率比 SPI 慢
- 数据帧的大小限制为8位
- 需要实现比SPI更复杂的硬件
通信过程
I2C数据传输格式示意图
当总线空闲时,SDA 和SCL 都处于高电平状态,当主机要和某个从机通讯时,会先发送一个起始信号,然后发送从机地址和读写控制位,接下来传输数据(主机发送或者接收数据),数据传输结束时主机会发送停止条件。传输的每个字节为8 位,高位在前,低位在后。
主机发送起始信号启用总线(其他主机收到后就知道现在总线被占用)
主机发送一个字节数据指明从机地址(7bit)和后续字节的传送方向,即读、写数据(1bit,0:主到从,1:从到主)
被寻址的从机发送应答信号回应主机
发送器发送一个字节数据
接收器发送应答信号回应发送器 (循环步骤4、5)
通信完成后主机发送停止信号释放总线
起始信号:在空闲状态下,时钟信号SCL继续保持高电平,数据信号SDL出现由高电平转换为低电平的下降沿,此时产生一个起始信号,与总线相连的I2C设备检测到起始信号之后,进入起始状态等待控制字节的输入
停止条件:I2C通信的停止信号由主设备发出,SCL保持高电平,SDA由低电平跳变到高电平。
从机地址帧:主机发送的第一个字节为从机地址,高7 位为地址,最低位为R/W 读写控制位,1 表示读操作,0 表示写操作,指定主机是向从机(低电平)发送数据还是从中请求数据(高电平)的单个位。
一般从机地址有7 位地址模式和10 位地址模式两种,如果是10 位地址模式,第一个字节的头7 位是11110XX 的组合,其中最后两位(XX)是10 位地址的两个最高位,第二个字节为10 位从机地址的剩下8 位,如下图所示:
7 位地址和10 位地址格式示意图
应答(ACK)和非应答(NACK) 位:应答信号接收端收到有效数据后需要向对方响应的信号,发送端每发送一个字节(8位)数据,在第9个时钟周期释放数据线去接收对方的应答。在第9个时钟周期:当SDA是低电平为有效应答(ACK),表示对方接收成功;当SDA是高电平为无效应答(NACK),表示对方没有接收成功。注意:数据发射端需要在第9个时钟周期等待接收端的应答信号。
SPI总线
SPI总线是同步、双向、全双工的4线式串行接口总线。SPI是由“单个主设备+多个从设备”构成的系统。需要说明的是:在系统中,只要任意时刻只有一个主设备是处于激活状态的,就可以存在多个SPI主设备。常运用于EEPROM、FLASH、实时时钟、AD转换器、数字信号处理器和数字信号解码器之间实现通信。为了实现通信,SPI共有4条信号线,分别是:
- SDO/MOSI – 主设备数据输出,从设备数据输入;
- SDI/MISO – 主设备数据输入,从设备数据输出;
- SCLK – 时钟信号,由主设备产生;
- CS/SS – 从设备使能信号(选择和哪个从设备通信),由主设备控制。当有多个从设备的时候,因为每个从设备上都有一个片选引脚接入到主设备机中,当我们的主设备和某个从设备通信时将需要将从设备对应的片选引脚电平拉低或者是拉高(一般来说是低电平选中)
SPI 以主从方式工作,通常有一个主设备和一个或多个从设备。通信由主设备发起,主设备通过 CS 选择要通信的从设备,然后通过 SCLK 给从设备提供时钟信号,数据通过 MOSI 输出给从设备,同时通过 MISO 接收从设备发送的数据。
主设备能够控制时钟,因为SPI通信并不像UART或者IIC通信那样有专门的通信周期,起始信号,结束信号;所以SPI协议能够通过控制时钟信号线,当没有数据交流的时候我们的时钟线要么是保持高电平要么是保持低电平。
速度比IIC和串口快,但是比USB和网口慢。
SPI 的通讯模式
SPI 的 有四种模式:
CPOL=0,表示当SCLK=0时处于空闲态,空闲低电平,所以有效状态就是SCLK处于高电平时
CPOL=1,表示当SCLK=1时处于空闲态,空闲高电平,所以有效状态就是SCLK处于低电平时
CPHA=0,表示数据采样是在第1个边沿
CPHA=1,表示数据采样是在第2个边沿
所以最终有 4 种配置可选 :
CPOL | CPHA |
1 | 1 |
0 | 0 |
1 | 0 |
0 | 1 |
当 CPHA= 1 的时候:
当 CPHA= 0 的时候:
不同的从设备可能在出厂时由工厂配置为某种通信模式,无法改变,所以我们得根据从设备的通讯模式来设置主设备的模式。
I2C与SPI异同
相同点:
- 串行、同步
- TTL电平,传输距离不长
- 主从方式
不同点:
- I2C为半双工,SPI全双工
- I2C有应答,SPI无应答
- 寻址方式:I2C通过向总线广播从机地址寻址,SPI通过使能不同CS引脚寻址
- I2C时钟极性和相位固定,SPI有4种模式
因为SPI无应答、快速寻址等优势,所以SPI速率比I2C快很多,几M到几十Mbps。
I2C一般几百kbps,超高速模式下能5Mbps。
CAN协议
这个。。。。本来想做笔记的,但是一查资料,有够难的。。。我终于知道为啥平时通信协议讲解视频没有CAN这玩意的出现了,复杂性比其他几个多多了。
CAN 总线协议已经成为汽车计算机控制系统和嵌入式工业控制局域网的标准总线
听着挺牛逼,但不是这行业的能接触到CAN协议的机会也少,以后有需要时候再学习吧!先放几个链接上来
- Author:黄光灿
- URL:guangcan.icu/article/10a698a0-fad5-806f-83de-ef45665dc66f
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!