(1)I2C
集成电路互连总线接口(Inter IC):同步串行半双工传输总线,连接嵌入式处理器及其外围器件。
支持器件:LCD驱动器、Flash存储器
特点:
①有两根传输线(时钟线SCL、双向数据线SDA)、GAN接地。
②主从模式:通信双方为主设备(Master)和从设备(Slave),在总线上的每一个设备都可以作为主设备或从设备,但一个总线上一般只有一个主设备和多个从设备。主设备是用来产生允许传输的时钟信号,并初始化总线的数据传输,所以主设备通常是CPU,而从设备只能被动相应主设备发起的通信请求,所以各种I2C接口芯片作为从设备使用。
③I2C上每个从设备都有7bit的物理地址(MSB),且该地址是唯一的,固化在芯片上,可以从datasheet中获取。I2C地址中全0为广播地址,所以I2C总线上理论可以有2^7-1个从设备
设计用于低速设备的连接,速度不及SPI,快于串口通信,接线简单
总体上主设备是先发送地址,再发送或接受数据
iic是同步通信方式,允许不定长度的数据,也就是每一对起始信号和终止信号中间可以传输多个8bit数据。
主机发送数据流程
1、当总线空闲的时候,主机发送一个起始信号S,代表开始通信
2、主机接着发送一个从机的物理地址7bit和一位读写控制位(0为写、1为读)
3、从机进行地址匹配,匹配成功后发送一个应答信号ACK(低电平为0)
4、主机收到应答信号,接着开始发送第一个字节的数据
5、从机收到数据后返回一个ACK
6、主机收到应答信号后,接着发送下一个字节
7、当主机发送完最后一个字节,并且接收到从机的应答信号时,接着发送一个停止信号P结束通信,并且释放总线
8、从机收到P信号之后也退出和主机之间的通信
主机接收数据流程
当总线空闲的时候,主机发送一个起始信号S,代表开始通信
主机接着发送一个从机的物理地址7bit和一位读写控制位(0为写、1为读)
从机进行地址匹配,匹配成功后发送一个应答信号ACK Acknowledge(低电平为0),接着开始发送第一个字节数据
主机收到数据之后向从机返回一个ACK
从机收到应答信号后,接着发送下一个字节
当主机接收完数据之后,向从机发送一个NAK信号Not Acknowledge,从机收到非应答信号后停止发送数据
主句发送ACK之后,发送一个停止信号结束通信,并释放总线
字节格式
SDA数据线上的每个字节必须是8位,对于每次传输的字节数没有限制。每个字节(8位)数据传送完后紧跟着应答信号(ACK,第9位)。数据的先后顺序为:高位在前 。
(2)SPI
SPI(Serial Peripheral Interface串行外设接口)。SPI总线是同步、全双工双向的4线式串行接口总线。它是由“单个主设备+多个从设备”构成的系统。
SPI
是一个同步的数据总线,也就是说它是用单独的数据线和一个单独的时钟信号来保证发送端和接收端的完美同步
时钟是一个振荡信号,它告诉接收端在确切的时机对数据线上的信号进行采样
SPI总线包括4条逻辑线
MISO:Master input slave output 主机输入,从机输出(数据来自从机);
MOSI:Master output slave input 主机输出,从机输入(数据来自主机);
SCLK :Serial Clock 串行时钟信号,由主机产生发送给从机;
SS:Slave Select 片选信号,由主机发送,以控制与哪个从机通信,通常是低电平有效信号。
整体的传输过程:
1、主机先将NSS信号拉低,这样保证开始接收数据;
2、当接收端检测到时钟的边沿信号时,它将立即读取数据线上的信号,这样就得到了一位数据(1bit);
注:由于时钟是随数据一起发送的,因此指定数据的传输速度并不重要,尽管设备将具有可以运行的最高速度(。
3、主机发送到从机时:主机产生相应的时钟信号,然后数据一位一位地将从MOSI信号线上进行发送到从机;
4、主机接收从机数据:如果从机需要将数据发送回主机,则主机将继续生成预定数量的时钟信号,并且从机会将数据通过MISO信号线发送;
时钟极性和时钟相位
时钟极性和相位共同决定读取数据的方式,比如信号上升沿读取数据还是信号下降沿读取数据;
CKP = 0
:时钟空闲IDLE
为低电平0
;CKP = 1
:时钟空闲IDLE
为高电平1
CKE = 0
:在时钟信号SCK
的第一个跳变沿采样;CKE = 1
:在时钟信号SCK
的第二个跳变沿采样;
其中黑色线为采样数据的时刻;
蓝色线为SCK时钟信号;
模式编码
SPI的时钟极性和相位的配置通常称为 SPI模式,所有可能的模式都遵循以下约定;具体如下表所示
多从机模式
多NSS
菊花链
菊花链的最大缺点是因为是信号串行传输,所以一旦数据链路中的某设备发生故障的时候,它下面优先级较低的设备就不可能得到服务了;
另一方面,距离主机越远的从机,获得服务的优先级越低,所以需要安排好从机的优先级,并且设置总线检测器,如果某个从机超时,则对该从机进行短路,防止单个从机损坏造成整个链路崩溃的情况;
优缺点
- 全双工串行通信;
- 高速数据传输速率。
- 简单的软件配置;
- 极其灵活的数据传输,不限于8位,它可以是任意大小的字;
- 非常简单的硬件结构。从站不需要唯一地址(与I2C不同)。从机使用主机时钟,不需要精密时钟振荡器/晶振(与UART不同)。不需要收发器(与CAN不同)
- 没有硬件从机应答信号(主机可能在不知情的情况下无处发送);
- 通常仅支持一个主设备;
- 需要更多的引脚(与I2C不同);
- 没有定义硬件级别的错误检查协议;
- 与RS-232和CAN总线相比,只能支持非常短的距离;
(3)UART
UART(Universal Asynchronous Receiver Transmitter:通用异步收发器),是电脑硬件的一部分,它把将要传输的资料在串行通信与并行通信之间加以转换,UART通常被集成于其他通讯接口的连接上。UART即我们通常说的“串口”。该总线有两条数据线,可以实现全双工的发送和接收,在嵌入式系统中常用于主机与辅助设备之间的通信。
对于发送设备和接收设备来说,两者的串行通信配置应该设置为完全相同
空闲位:不进行传输数据时,默认为逻辑1,为高电平;
起始位:先发出一个逻辑“0”,表示消息帧的开始;
数据位:紧接着起始位之后,可由5~8位组成,通常传输8位即一个字节。先发送数据的低位,后发送数据的高位;
奇偶校验位:紧接着数据位后面(可有可无),使得“1”的位数应为偶数(偶校验)或奇数(奇校验),校验数据传输是否正确;
停止位:它是消息传输结束的标志,它可以是1位、1.5位、2位的高电平, 由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。
波特率:是衡量数据传输速率的指标,表示每秒钟传输的位数。例如设置串口的波特率为9600,则表示是1s传输9600个bit的数据,则传送每个位的时间为 1s / 9600 ≈ 104us,从而区分消息帧中每个位传输的数据;
缺点:UART一般直接使用TTL信号来表示0和1,但TTL信号抗干扰能力较差,数据在传输过程中很容易出错;且TTL信号的通信距离也很短;