赞
踩
目录
SPI(serial peripheral interface)是一种同步串行通信协议,由一个主设备和一个或多个从设备组成,主设备启动与从设备的同步通信,从而完成数据的交换。SPI是一种高速全双工同步通信总线,标准的SPI仅仅使用4个引脚,主要应用在 EEPROM, Flash, 实时时钟(RTC), 数模转换器(ADC), 数字信号处理器(DSP) 以及数字信号解码器之间。
SPI需要至少四根线,分别是MISO,MOSI,SCLK,CS
SDO/MOSI – 主设备数据输出,从设备数据输入
SDI/MISO – 主设备数据输入,从设备数据输出
SCLK – 时钟信号,由主设备产生
CS – 从设备使能信号,由主设备控制
CS: 其中CS是控制芯片是否被选中的,也就是说只有片选信号为预先规定的使能信号时(高电位或低电位),对此芯片的操作才有效,这就允许在同一总线上连接多个SPI设备成为可能;SDI/SDO/SCLK: 通讯是通过数据交换完成的,这里先要知道SPI是串行通讯协议,也就是说数据是一位一位的传输的。这就是SCK时钟线存在的原因,由SCK提供时钟脉冲,SDI,SDO则基于此脉冲完成数据传输。数据输出通过 SDO线,数据在时钟上升沿或下降沿时改变,在紧接着的下降沿或上升沿被读取。完成一位数据传输,输入也使用同样原理。这样,在至少8次时钟信号的改变(上沿和下沿为一次),就可以完成8位数据的传输;
要注意的是,SCK信号线只由主设备控制,从设备不能控制信号线。同样,在一个基于SPI的设备中,至少有一个主控设备。这样传输的特点:这样的传输方式有一个优点,与普通的串行通讯不同,普通的串行通讯一次连续传送至少8位数据,而SPI允许数据一位一位的传送,甚至允许暂停,因为SCK时钟线由主控设备控制,当没有时钟跳变时,从设备不采集或传送数据,也就是说,主设备通过对SCK时钟线的控制可以完成对通讯的控制。SPI还是一个数据交换协议:因为SPI的数据输入和输出线独立,所以允许同时完成数据的输入和输出。不同的SPI设备的实现方式不尽相同,主要是数据改变和采集的时间不同,在时钟信号上沿或下沿采集有不同定义,具体请参考相关器件的文档;
在点对点的通信中,SPI接口不需要进行寻址操作,且为全双工通信,显得简单高效。在多个从设备的系统中,每个从设备需要独立的使能信号,硬件上比I2C系统要稍微复杂一些。
最后,SPI接口的一个缺点:没有指定的流控制,没有应答机制确认是否接收到数据
当主设备要和某个从设备进行通信时,主设备需要先向对应从设备的片选线上能能发送使能信号(高电平或低电平,根据从机而定)表示选中该从设备。和I2C不同,I2C通过从设备的地址来进行寻址。
SPI 规定了两个 SPI 设备之间通信必须由主设备 (Master) 来控制次设备 (Slave). 一个 Master 设备可以通过提供 Clock 以及对 Slave 设备进行片选 (Slave Select) 来控制多个 Slave 设备, SPI 协议还规定 Slave 设备的 Clock 由 Master 设备通过 SCK 管脚提供给 Slave 设备, Slave 设备本身不能产生或控制 Clock, 没有 Clock 则 Slave 设备不能正常工作.
SPI的通信过程:(注意:I2C中必须是SCL低电平发送数据,接收数据SCL低电平但是SPI中是可以调节的。)
SPI总线在进行数据传送时,先传送高位,后传送低位;数据线为高电平表示逻辑1,低电平表示逻辑0;一个字节传送完成后无需应答即可开始下一个字节的传送;spi总线采用同步方式工作,时钟线在上升沿或下降沿时发送器向数据线上发送数据,在紧接着的下降沿或上升沿时接收器从数据线上读取数据,完成一位数据传送,八个时钟周期即可完成一个字节数据的传送。(串口uart是异步通信,通信之前要将波特率定下来,spi是同步通信,是通过
时钟线来,一个时钟周期发一位)
对于一个特定的从设备来说,一般在出厂时就会将其设计为某种特定的工作模式我们在使用该设备时就必须保证主设备的工作模式和从设备保持一致,否则无法进行通信,所以一般需要对主设备的CPOL和CPHL进行配置
CPOL:clock polarity 时钟的极性;表示 SPI 在空闲时, 时钟信号是高电平还是低电平.
CPHA:clock phase 时钟的相位;表示 SPI 设备是在 SCK 管脚上的时钟信号变为上升沿时触发数据采样, 还是在时钟信号变为下降沿时触发数据采样.
CPOL表示SCLK空闲的状态:0---SCLK低 1---SCLK高
CPHA表示采样时刻: 0---每个周期第一个时钟沿采样
1---每个周期的第二个时钟沿采样
SPI总线传输一共有4种模式,这4种模式分别由时钟极性(CPOL,Clock Polarity)和时钟相位(CPHA,Clock Phase)来定义,其中CPOL参数规定了SCK时钟信号空闲状态的电平,CPHA规定了数据是在SCK时钟的上升沿被采样还是下降沿被采样。这四种模式的时序图如下图所示:
模式0:CPOL= 0,CPHA=0。SCK串行时钟线空闲是为低电平,数据在SCK时钟的上升沿被采样,数据在SCK时钟的下降沿切换
模式1:CPOL= 0,CPHA=1。SCK串行时钟线空闲是为低电平,数据在SCK时钟的下降沿被采样,数据在SCK时钟的上升沿切换
模式2:CPOL= 1,CPHA=0。SCK串行时钟线空闲是为高电平,数据在SCK时钟的下降沿被采样,数据在SCK时钟的上升沿切换
模式3:CPOL= 1,CPHA=1。SCK串行时钟线空闲是为高电平,数据在SCK时钟的上升沿被采样,数据在SCK时钟的下降沿切换
SPI接口时钟配置心得:
在主设备这边配置SPI接口时钟的时候一定要弄清楚从设备的时钟要求,因为主设备这边的时钟极性和相位都是以从设备为基准的。因此在时钟极性的配置上一定要搞清楚从设备是在时钟的上升沿还是下降沿接收数据,是在时钟的下降沿还是上升沿输出数据。但要注意的是,由于主设备的MOSI连接从设备的MISO,从设备的MOSI连接主设备的MISO,从设备MISO接收的数据是主设备的MOSI发送过来的,主设备MISO接收的数据是从设备MOSI发送过来的,所以主设备这边SPI时钟极性的配置(即MOSI的配置)跟从设备的MOSI接收数据的极性是相反的,跟从设备MOSI发送数据的极性是相同的
意思是:主设备在时钟的下降沿发送数据,从设备在时钟的上升沿接收数据。因此主设备这边SPI时钟极性应该配置为下降沿有效。
I2C和SPI的异同
相同点:
1.均采用串行,同步的方式
2.均采用TTL电平,传输距离和应用场景类似
3.均采用主从方式工作不同点:
1.I2C为半双工,SPI为全双工
2.I2C有应答机制,SPI无应答机制
3.I2C通过向总线广播从机地址来寻址,SPI通过向对应从机发送使能信号
(优缺点:I2C布线简单占用资源少费时间,SPI占用资源多但是速度快)
4.I2C的时钟极性和时钟相位固定,SPI的时钟极性和时钟相位可调。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。