一、SPI总线概述
1、SPI总线介绍
SPI是一种通信协议,它是摩托罗拉公司研发出来的一种通信协议,就有自己的特点(串行,并行,单工,半双工,全双工,同步异步)。它主要应用于音视频的开发. SPI是串行外设接口(Serial Peripheral Interface)的缩写,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,越来越多的芯片集成了这种通信协议.
一般的通信速度可以达到几十Mhz
SPI(Serial Peripheral Interface)是一种串行外设接口标准,用于在微控制器或其他数字设备之间进行通信。它被广泛应用于各种应用领域,如通信、嵌入式系统和传感器网络等。
2、SPI总线接口与物理拓扑结构
SPI按照接线的不同分为3线SPI与4线SPI。
同步串行全双工
同步串行半双工
物理上的连接是怎么样的?
使用SPI协议重点是知道里面的一个时序的情况,如果知道了这种情况,完全可以实现这种协议。
SPI协议是一种一主多从的形式:
可以通过片选线来选中不同的从机
时钟线(信号)只能由主机控制,从机受到主机发出的时钟信号来做出相应的处理
针对主机而言:
当时钟线产生上升沿时接收数据,当时钟线产生下降沿时发送数据
当时钟线产生下降沿时接收数据,当时钟线产生上升沿时发送数据
3、SPI总线通信原理
SPI可以配置为4种模式(SPI控制器)
MODE0-MODE3
4、SPI总线数据格式
8位的数据,高位先发
SPI的通信过程其实就是数据交换的过程
首先需要拉低片选线
再根据当前的边沿决定是发送数据还是接收数据(上升沿发送,下降沿接收)
结束本次通信拉高片选线
用IO口来实现SPI协议?
写伪代码(不是真正可以实现的,不过可以实现相应的逻辑)
当前选择模式0:CPHA = 0, CPOL = 0,下降沿发送数据,上升沿接收数据
SCK, MOSI, MISO,CS
U8 Data = 0;//0000 0000
CS = 0;//选中这个芯片
SCK = 1;
for(i =0; i <8 ;i++)
{
SCK = 0;
MOSI = 0/1;
SCK = 1;
Data <<= 1;//空出低位的操作,data = 0000 0100
if(MISO)
{
Data |= 1;//0000 0001
}
}
二、SPI控制器
1、SPI的控制器特征
基于三条线的全双工同步传输(通过一个标志位的切换达到所谓的双工通信)
● 基于双线的单工同步传输,其中一条可作为双向数据线
● 8 位或 16 位传输帧格式选择
● 主模式或从模式操作
● 多主模式功能
● 8 个主模式波特率预分频器(最大值为 fPCLK/2)fpclk就是看当前用的SPI是在哪根总线上
● 从模式频率(最大值为 fPCLK/2)
● 对于主模式和从模式都可实现更快的通信
● 对于主模式和从模式都可通过硬件或软件进行 NSS(CS管脚) 管理:动态切换主 /从操作
● 可编程的时钟极性和相位
● 可编程的数据顺序,最先移位 MSB 或 LSB
● 可触发中断的专用发送和接收标志
● SPI 总线忙状态标志
● SPI TI