您现在的位置是:网站首页> 硬件

SPI通讯接口

  • 硬件
  • 2021-03-27
  • 862人已阅读
摘要

SPI模块是MOSI接MOSI MISO接MISO不是交叉连接不同于串口UART上的TXD和RXD交叉连接 ,SS片选, SS低电平选择上通讯芯片

先简单说一下,关于SPI中一些常见的说法:

SPI的极性Polarity和相位Phase,最常见的写法是CPOLCPHA,不过也有一些其他写法,简单总结如下:

(1) CKPOL (Clock Polarity) = CPOL = POL = Polarity = (时钟)极性

(2) CKPHA (Clock Phase)   = CPHA = PHA = Phase = (时钟)相位

(3) SCK=SCLK=SPI的时钟


(4) Edge=边沿,即时钟电平变化的时刻,即上升沿(rising edge)或者下降沿(falling edge)

对于一个时钟周期内,有两个edge,分别称为:

Leading edge=前一个边沿=第一个边沿,对于开始电压是1,那么就是1变成0的时候,对于开始电压是0,那么就是0变成1的时候;

Trailing edge=后一个边沿=第二个边沿,对于开始电压是1,那么就是0变成1的时候(即在第一次1变成0之后,才可能有后面的0变成1),对于开始电压是0,那么就是1变成0的时候;


本文采用如下用法:

极性=CPOL

相位=CPHA

SCLK=时钟

第一个边沿和第二个边沿


SPI的相位和极性】

CPOLCPHA,分别都可以是0或时1,对应的四种组合就是:


Mode 0CPOL=0, CPHA=0
Mode 1CPOL=0, CPHA=1
Mode 2CPOL=1, CPHA=0
Mode 3CPOL=1, CPHA=1


 CPOL极性】

先说什么是SCLK时钟的空闲时刻,其就是当SCLK在数发送8bit比特数据之前和之后的状态,于此对应的,SCLK在发送数据的时候,就是正常的工作的时候,有效active的时刻了。


先说英文,其精简解释为:Clock Polarity = IDLE state of SCK

再用中文详解:

SPICPOL,表示当SCLK空闲idle的时候,其电平的值是低电平0还是高电平1

CPOL=0,时钟空闲idle时候的电平是低电平,所以当SCLK有效的时候,就是高电平,就是所谓的active-high

CPOL=1,时钟空闲idle时候的电平是高电平,所以当SCLK有效的时候,就是低电平,就是所谓的active-low


 CPHA相位】

首先说明一点,capture strobe = latch = read = sample,都是表示数据采样,数据有效的时刻。

相位,对应着数据采样是在第几个边沿(edge),是第一个边沿还是第二个边沿,0对应着第一个边沿,1对应着第二个边沿。

对于:

CPHA=0,表示第一个边沿:

对于CPOL=0idle时候的是低电平,第一个边沿就是从低变到高,所以是上升沿;

对于CPOL=1idle时候的是高电平,第一个边沿就是从高变到低,所以是下降沿;

CPHA=1,表示第二个边沿:

对于CPOL=0idle时候的是低电平,第二个边沿就是从高变到低,所以是下降沿;

对于CPOL=1idle时候的是高电平,第一个边沿就是从低变到高,所以是上升沿;

1.png

取数据就是通讯

上升沿取数据 CPOL=0 CPHA=0 ,CPOL=1 CPHA=1

8位 16位的数据帧格式,可设置MBS/LBS先行

MSB LSB:起始地址为最高位, 最后地址为最低位。

LSB MSB:起始地址为最低位,最后地址为最高位。

发送数据接收数据实际就是操作相应寄存器
控制寄存器(SPCR) 

数据寄存器(SPDR)

状态寄存器(SPSR)

1.png

MOSI 实际Master out Slaver in

MISO 实际Master in Slaver  out


1.png


1.png

1.png

1.png


1.png


1.png

1.png

1.png





上一篇:Arduino 做产品可行

下一篇:光敏电阻

Top