1.spi概述
SPI是串行外设接口(Serial Peripheral Interface)的缩写。是 Motorola 公司推出的一种同步串行接口技术,是一种高速的,全双工,同步的通信总线。
2、SPI优点
支持全双工通信(SPI的数据输入和输出线独立,所以允许同时完成数据的输入和输出)
数据传输速率快(I2c一般只能到100-400Khz, SPI高达上百Mhz)
3、缺点
没有指定的流控制,没有应答机制确认是否接收到数据,所以跟IIC总线协议比较在数据可靠性上有一定的缺陷。
4、特点
1):高速、同步、全双工、非差分、总线式
2):主从机通信模式
2.硬体框架
SPI协议,硬件框架如下:
SCK:提供时钟
DO:作为数据输出
DI:作为数据输入
CS0/CS1:作为片选
同一时刻只能有一个SPI设备处于工作状态。因此cs选中谁,谁就和主控通信。
2.数据传输时序
这里是一款SPI flash在SCLK上升延采样数据(D7~D0)的示意图。设现在2440传输一个0x56数据给SPI Flash,时序如下:
CS0低选中SPI Flash,配置成模式0, 0x56的二进制就是0b0101 0110,因此在每个SCK时钟周期,DO输出对应的电平。会在每个时钟周期的上升沿采样DO上的电平。
SPI相关的缩写或说法
CKPOL (Clock Polarity)(时钟)极性
CKPHA (Clock Phase)(时钟)相位
SCK=SCLK=SPI的时钟
Leading edge=前一个边沿
Trailing edge=后一个边沿
3.时钟极性相位模式
CPOL:表示SPI CLK的初始电平(空闲状态时电平),0为低电平,1为高电平
CPHA:表示相位,即第一个还是第二个时钟沿采样数据,0为第一个时钟沿,1为第二个时钟沿
SPI模式 |
CPOL |
CPHA |
空闲状态时钟极性 |
采样/移位时钟相位 |
0 |
0 |
0 |
低电平 |
上升沿采样(锁存)下降沿移位 |
1 |
0 |
1 |
低电平 |
上升沿移位下降沿采样(锁存) |
2 |
1 |
0 |
高电平 |
上升沿移位下降沿采样(锁存) |
3 |
1 |
1 |
高电平 |
上升沿采样(锁存)下降沿移位 |
4个模式波形对比:
常用的是模式0和模式3,因为它们都是在上升沿采样数据.当配置成模式3时,对于主设备,数据采样在时钟上升沿,数据传送在时钟下降沿。
主设备SPI时钟和极性的配置应该由外设来决定;二者的配置应该保持一致,即主设备的SDO同从设备的SDO配置一致,主设备的SDI同从设备的SDI配置一致。即因为主从设备是在SCLK的控制下,同时发送和接收数据,并通过2个双向移位寄存器来交换数据 。
举个例子,以 CPOL=0,CPHA=0,模式0为例:空闲CLK为低电平,相位为0,也就是上升延采集数据。由于SPI的全双工可以同时读写,发送MOSI数据为0xD2,接收MISO数据为0x66。
4.SPI控制器工作原理
SSPSR
SSPSR:移位寄存器(Shift Register). 根据 SPI 时钟同步信号, 将SSPBUF中的数据一位一位移出去或者收进来。
SSPBUF
Master 与 Slave 之间交换的数据其实都是移位寄存器从 SSPBUF 里面拷贝的。通过往 SSPBUF 对应的寄存器 (Tx-Data / Rx-Data register) 里读写数据, 间接地操控 SPI 设备内部的 SSPBUF.
Controller
用来发送控制信号的,像CS,SCK等控制信号。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
2020-12-09 mipi-rx之软件篇
2019-12-09 s3c2440裸机-内存控制器(一、内存控制器的原理)