SPI
SPI是串行外设接口(Serial Peripheral Interface)的缩写。SPI是一种串行、全双工、同步的通信总线,支持主从模式。
通信逻辑线:
- MISO:
Master input slave output主机输入,从机输出(数据来自从机); - MOSI:
Master output slave input主机输出,从机输入(数据来自主机); - SCLK:
Serial Clock串行时钟信号,由主机产生发送给从机; - CS:
Chip Select片选信号,由主机发送,以控制与哪个从机通信,通常是低电平有效信号。
通信过程:
- 主机先将
CS信号拉低,这样保证开始接收数据; - 当接收端检测到时钟的边沿信号时,它将立即读取数据线上的信号,这样就得到了一位数据(1
bit); - 主机发送到从机时:主机产生相应的时钟信号,然后数据一位一位地将从
MOSI信号线上进行发送到从机; - 主机接收从机数据:如果从机需要将数据发送回主机,则主机将继续生成预定数量的时钟信号,并且从机会将数据通过
MISO信号线发送。
优点:
- 全双工串行通信;
- 高速数据传输速率;
- 简单的软件配置;
- 极其灵活的数据传输,不限于8位,可以是任意大小的字;
- 非常简单的硬件结构。从机不需要唯一地址(与I2C不同);从机使用主机时钟,不需要精密时钟振荡器/晶振(与UART不同);不需要收发器(与CAN不同)。
缺点:
- 没有硬件从机应答信号(主机可能在不知情的情况下无处发送);
- 通常仅支持一个主设备;
- 需要4根引脚(与I2C不同);
- 没有定义硬件级别的错误检查协议;
- 与RS-232和CAN总线相比,传输距离非常短;
IIC
SPI是一种串行、半双工、同步的通信总线,支持主从模式。
用于微控制器(MCU)和外围设备(从设备)进行通信的一种总线,属于(一主多从一个主设备(Master),多个从设备(Slave))的总线结构,总线上的每个设备都有一个特定的设备地址,以区分同一I2C总线上的其他设备。
通信逻辑线:
- 串行时钟线(SCL)
- 串行数据线(SDA)
通信过程:
1.数据有效位规定
SCL为低电平,SDA允许变化;SCL为高电平,SDA不允许变化,SDA高电平代表1,低电平代表0。
2.空闲状态
当IIC总线的数据线SDA和时钟线同时处于高电平时,规定为总线的空闲状态。
3.起始信号和终止信号
SCL为高电平期间:
- SDA:由低到高 – 起始信号
- SDA:由高到低 – 终止信号
4.应答信号
发送器每发送一个字节(8个bit),就在时钟脉冲9期间释放数据线,由接收器反馈一个应答信号。
- 应答信号为低电平时,规定为有效应答(ACK,简称应答位),表示接收器已经成功地接受了该字节
- 应答位为高电平时,规定为非应答信号(NACK),一般表示接收器接收该字节没有成功。
5.总线寻址
(1)IIC协议规定采用7bit的寻址字节(寻址字节是起始信号后的第一个字节)其位定义如下:
| 7 | 6 | 5 | 4 |3 |2|1| 0|
D7 ~ D1位组成从机地址。 D0位是数据传送的方向,0:表示主机向从机写数据,1:表示主机由从机读数据。
6.通信过程
以主设备往从设备中写寄存器为例
- 首先由由主机发送一个开始信号,
- 然后主机在数据线上广播从机地址
- 确定数据的传输方向(是读还是写)
- “A”代表应答,表示主机找到了从机。
- 主机发送一个字节数据,从机接收到后,会返回给主机一个应答信号,直到主机发送完数据,或者从机返回一个NACK信号,表示从机不再接收主机发送的数据。
- 主机发送一个stop信号。此次数据传输完成。
UART
SPI是一种串行、半双工、异步的通信总线。
通信逻辑线:
- TX:数据发送
- RX:数据接收
通信过程:
通信双方采用约定的波特率。