SPI通信
- SPI是由Motorola公司开发的一种通用数据总线
- 四根通信线:SCK、MOSI(主机输出从机输入)、MISO(主机输入从机输出)、SS
- 同步,全双工
- 支持总线挂载多设备(一主多从)
与IIC相比
优点:
- SPI传输速度更快,最大传输速度取决与芯片厂商的设计需求
- 设计简单,不复杂
缺点:
-
SPI的硬件开销大,通信线的个数比较多
-
通信过程中,经常会有资源浪费的现象
-
仅支持一主多从,不支持多主机
硬件电路
-
所有的SPI设备的SCK、MOSI、MISO分别连在一起
-
主机另外引出多条SS控制线,分别连接各从机的SS引脚
-
输出的引脚配置为推挽输出,输入引脚配置为浮空或上拉输入
-
一次只能选择一个SS引脚
-
从机未被选中时,该从机的引脚必须切换为高阻态
数据移位示意图
上升沿:数据移位 下降沿:采样数据
SPI时序基本单元
- 起始条件:SS从高电平切换到低电平
- 终止条件:SS从低电平切换到高电平
SS在低电平期间,表示选用该从机
SPI时序图
CPHA:时钟相位
模式1
- 交换一个字节(模式1)
- CPOL=0:空闲状态,SCK为低电平
- CPHA=1:SCK第一个边沿~~(即上升沿)
移出数据,第二个边沿(即下降沿)~~移入数据
SPI没有硬性规定MOSI的默认电平,但是从机的MISO必须置回高阻态
模式0(用的最多)
- 交换一个字节(模式0)
- CPOL=0:空闲状态,SCK为低电平
- CPHA=1:SCK第一个边沿移~~(即上升沿)
移入数据,第二个边沿(即下降沿)~~移出数据
为什么模式0最为广泛使用,明明模式1更符合常理?经过网上查证,大概分为以下几点
- 模式0是最早定义的SPI时序模式,兼容性强
- 模式0采用下降沿移出数据,稳定性好
- 很多人刚开始学的就是模式0,于是就模式0就成了默认模式了
SPI1挂载在在APB2上 SPI2和SPI3挂载在APB1上 GPIO全部都挂载在APB2上
配置时钟时要相对应
编程技巧
|
|