SPI

AI-摘要
切换
Huggingface
AI初始化中...
介绍自己 🙈
生成本文简介 👋
推荐相关文章 📖
前往主页 🏠
前往爱发电购买
SPI
KayerSPI
1. SPI介绍
Serial Peripheral interface(串行外围设备接口),是Motorola首先在其MC68HCXX系列处理器上定义的,是一种高速的,全双工,同步的串行通信总线。
SPI接口主要应用于EEPROM,FLASH,各种传感器,AD转换器等。
1个SPI设备一般有4条线 (SCK,MOSI,MISO,SS)
SCK:时钟信号线,用于通讯数据同步。
- 它由通讯主机(MCU)产生,决定了通讯的速率。
- 不同的设备支持的最高时钟频率不一样,如 STM32 的 SPI 时钟频率最大为 fpclk/2。
- 两个设备之间通讯时,通讯速率受限于低速设备。
MOSI:主设备输出/从设备输入引脚。
- 主机的数据从这条信号线输出,从机由这条信号线读入主机发送的数据,
- 这条线上数据的方向为主机到从机。
MISO:主设备输入/从设备输出引脚。
- 主机从这条信号线读入数据,从机的数据由这条信号线输出到主机。
- 在这条线上数据的方向为从机到主机。
SS:片选线或者使能线。有时候也称NSS或CS。
- SPI通信时各个设备是没有地址的
- 主机和哪个从机通讯,就把谁的SS置为低电平。
- 如果要主机要连接多条从设备就需要多条片选线。
只能主从设备之间进行通信,从与从之间是无法进行通信的。
有几个从机就要有几个片选线
2. SPI工作原理
STM32 的 SPI 外设可用作通讯的主机及从机,支持最高的 SCK 时钟频率为 fpclk/2 (STM32F103 型号的芯片默认fpclk1为36MHz,fpclk2为72MHz。),完全支持 SPI 协议的 4 种模式,数据帧长度可设置为 8 位或 16 位,可设置数据 MSB 先行或 LSB 先行。它还支持双线全双工、单线双向以及单线模式。
STM32F103系列提供了3个SPI,SPI1挂在APB2总线,SPI2/3挂在APB1总线。
用的比较多还是双线全双工模式。
- 波特率发生器用于生成通信的同步时钟。
- NSS是片选信号
- 可以硬件自动控制
- 也可以使用软件控制。
- 移位寄存器临时存储要交换的数据(来自于发送缓冲区)
- 按位通过MOSI把数据发送出去。
- 按位把通过MISO接收的数据存入到移位寄存器。
- 接收数据完毕,数据被送入到接收缓冲区
- 来一个时钟上升沿信号,主机和从机分别把自己高位的值左移出来(一般高位先行)。
- 来一个时钟下降沿信号,主机和从机分别读入数据,存储到移位寄存器的低位。
- 经过8次同样的操作,就完成了一个字节的交换。
- 最后从接收缓冲区就可以读出数据。
3. 时钟的极性和相位
CPOL(Clock Polarity)通信的整个过程分为空闲时刻和通信时刻。
空闲状态 SCK 是低电平,CPOL=0。
空闲状态 SCK 是高电平,CPOL=1。
- CPHA(Clock Phase)直接决定SPI总线从哪个跳变沿开始采样数据。
- CPHA = 0:表示从第一个跳变沿开始采样。
- CPHA = 1:表示从第二个跳变沿开始采样。
时钟的2种极性和2种相位的不同组合,得到了SPI的4种工作模式
MODE | CPOL | CPHA |
---|---|---|
0 | 0 | 0 |
1 | 0 | 1 |
2 | 1 | 0 |
3 | 1 | 1 |
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果