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,结合前面讲的理论知识,下面的图就很好理解啦!
    在这里插入图片描述
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值