SPI详解

SPI

        串行外设接口(Serial Peripheral Interface),通常称作SPI。是 Motorola 公司推出的一种同步串行接口技术,是一种高速的,全双工,同步的通信总线。并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,越来越多的芯片集成了这种通信协议,比如AT91RM9200。是微控制器和外围IC(如传感器、ADC、DAC、移位寄存器、SRAM等)之间使用最广泛的接口之一。

硬件连接

        SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(单向传输时)。也是所有基于SPI的设备共有的,它们是MISO(主设备数据输入)、MOSI(主设备数据输出)、SCLK(时钟)、CS(片选)。

  • MISO – Master Input Slave Output,主设备数据输入,从设备数据输出。
  • MOSI – Master Output Slave Input,主设备数据输出,从设备数据输入。
  • SCLK – Serial Clock,时钟信号,由主设备产生。它决定了通讯的速率,不同的设备支持的最高时钟频率不一样,如 STM32 的 SPI 时钟频率最大为fpclk/2,两个设备之间通讯时,通讯速率受限于低速设备。
  • CS – Chip Select,片选,从设备使能信号,由主设备控制。当有多个 SPI从设备与 SPI主机相连时,设备的其它信号线 SCLK、MOSI及 MISO同时并联到相同的 SPI总线上,即无论有多少个从设备,都共同只使用这 3条总线;而每个从设备都有独立的这一条 CS 信号线,本信号线独占主机的一个引脚,即有多少个从设备,就有多少条片选信号线。I2C 协议中通过设备地址来寻址、选中总线上的某个设备并与其进行通讯,而 SPI 协议中没有设备地址,它使用 CS 信号线来寻址,当主机要选择从设备时,把该从设备的 CS信号线设置为低电平,该从设备即被选中,即片选有效,接着主机开始与被选中的从设备进行SPI通讯。所以SPI通讯以 CS线置低电平为开始信号,以 CS线被拉高作为结束信号
  • SDO – Slave Data Output,主设备数据输出,从设备数据输入,对应MOSI。
  • SDI – Slave Data Input,主设备数据输入,从设备数据输出,对应MISO。
    在这里插入图片描述
    在这里插入图片描述
            主从设备之间通过SPI进行通讯,首先要保证两者之间时钟SCLK要一致,互相要商量好了,要匹配,否则就没法正常通讯了,即保证时序上的一致才可正常讯。
            而这里的SPI中的时钟和相位,指的就是SCLk时钟的特性,即保证主从设备两者的时钟的特性一致了,以保证两者可以正常实现SPI通讯。
            SPI的极性Polarity和相位Phase,最常见的写法是CPOL和CPHA,不过也有一些其他写法,简单总结如下:
  • CKPOL(Clock Polarity)= CPOL = POL = Polarity = (时钟)极性。
  • CKPHA(Clock Phase)= CPHA = PHA = Phase =(时钟)相位。
  • SCK = SCLK = SPI的时钟。
  • 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极性

        先说什么是SCLK时钟的空闲时刻,其就是当SCLK在发送8个bit比特数据之前和之后的状态,于此对应的,SCLK在发送数据的时候,就是正常的工作的时候,有效active的时刻了。其英文精简解释为:Clock Polarity = IDLE state of SCLK。
        SPI的CPOL,表示当SCLK空闲idle的时候,其电平的值是低电平0还是高电平1:

  • CPOL=0,时钟空闲idle时候的电平是低电平,所以当SCLK有效的时候,就是高电平,就是所谓的active-high。
  • CPOL=1,时钟空闲idle时候的电平是高电平,所以当SCLK有效的时候,就是低电平,就是所谓的active-low。
    在这里插入图片描述
            从上图中可以看出,(CPOL=0)的SCK 波形,它有(传输)8 个脉冲,而在脉冲传输前和完成后都保持在【低电平状态】。此时的状态就是时钟的空闲状态或无效状态,因为此时没有脉冲,也就不会有数据传输。同理得出(CPOL=1)的图,时钟的空闲状态或无效状态时SCK 是保持【高电平的】。

CPHA相位

        首先说明一点,capture strobe = latch = read = sample,都是表示数据采样,数据有效的时刻。相位,对应着数据采样是在第几个边沿(edge),是第一个边沿还是第二个边沿,0对应着第一个边沿,1对应着第二个边沿。对于:
        CPHA=0,表示第一个边沿:

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

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

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

如何判断CPOL和CPHA

        如果起始的SCLK的电平是0,那么CPOL=0,如果是1,那么CPOL=1,然后看数据采样时刻,即时序图数据线上的数据那个矩形区域的中间所对应的位置,对应到上面SCLK时钟的位置,对应着是第一个边沿或是第二个边沿,即CPHA是0或1。(对应的是上升沿还是还是下降沿,要根据对应的CPOL的值,才能确定)。

  • 如何判断CPOL:SCLK的空闲时候的电压,是0还是1,决定了CPOL是0还是1。
  • 如何判断CPHA:而数据采样时刻对应着的SCLK的电平,是第一个边沿还是第二个边沿,对应着CPHA为0还是1。
    在这里插入图片描述
            最后来看一下S3C2440的SPI的CPOL和CPHA,结合前面讲的理论知识,下面的图就很好理解啦!
    在这里插入图片描述
    在这里插入图片描述
  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32F407是一款基于ARM Cortex-M4内核的微控制器系列,它具备了丰富的外设功能,其中包括了SPI(串行外围设备接口)。SPI是一种串行通信协议,用于在微控制器和外部设备之间进行数据传输。 STM32F407的SPI模块具备以下特点和功能: 1. SPI接口数量:STM32F407微控制器通常配备了多个SPI接口,每个接口都有自己的引脚。 2. SPI模式:SPI接口支持多种工作模式,包括主模式和从模式。在主模式下,STM32F407充当主设备,负责控制数据传输;在从模式下,STM32F407作为从设备接收和发送数据。 3. 数据帧格式:SPI接口支持多种数据帧格式,包括8位、16位等。可以根据外部设备的要求选择合适的数据帧格式。 4. 时钟极性和相位:SPI接口的时钟极性和相位可配置,以适应不同的外部设备。时钟极性定义了时钟信号的空闲状态,相位定义了数据传输的起始边沿。 5. 传输速率:SPI接口支持灵活的传输速率配置,可以根据需要选择合适的时钟频率。 6. 中断和DMA支持:STM32F407的SPI模块支持中断和DMA传输,可以提高数据传输的效率和可靠性。 在使用STM32F407的SPI接口时,通常需要按照以下步骤进行配置: 1. GPIO配置:根据SPI接口的引脚定义,将相应的引脚配置为SPI功能。 2. SPI初始化:通过SPI寄存器配置,设置SPI接口的工作模式、数据帧格式、时钟极性和相位等参数。 3. 使能SPI:使能SPI接口,开始数据传输。 4. 数据传输:根据需要,使用SPI发送和接收数据。 除了以上基本操作,还可以根据具体需求进行其他配置,例如中断和DMA传输的配置、多主机模式的配置等。 总结起来,STM32F407的SPI接口是一种强大而灵活的外设,可以与各种外部设备进行高速串行通信。通过合适的配置和操作,可以实现与外设的可靠数据传输。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值