SPI总线

来源:互联网 发布:俄汉翻译软件 编辑:程序博客网 时间:2024/05/19 05:04
SPI总线简介
SPI的时钟只有在往DR寄存器里面写数据的时候才会产生,读是不会产生的(暂时没有从哪个资料中得到确认,不过我猜就是这样)。所以要读取slave发过来的数据,master必须先发一个“DUMMY”数据,这个数据内容不重要,目的只是为了产生一组clock给 slave,slave的数据就沿着这一组clock给发了出来。
master给slave读写数据的过程是这样的:写:master对DR写数据,产生clock,同时数据从MOSI管脚移位发送到slave的MOSI管脚; 读:master对DR写DUMMy,产生clock,同时DUMMy由MOSI发给slave(这个数据没有意义),同时读取的数据从slave的MISO管脚移位发送到master的MISO管脚


void SendSPIByte(unsigned char ch)
{
SPIF = 0;
SPI0DAT = ch;
while (SPIF == 0);// wait for data transfer to be completed        

unsigned char GetSPIByte(void)
{
        SPIF = 0;
SPI0DAT = 0;                 //dummy 哑字节
while (SPIF == 0);
return  SPI0DAT;                   // read data from SPI
}

示波器(带SPI)查看SPI波形,要把NSS片选信号接入,才能看到SPI数据显示


SPI 的时钟信号要配置成推挽方式而不是漏极开路方式,因为漏极开路会导致上升时间过长,当SPI速率较高时,会有问题

 

一般的SPI CS可以接地,但有些芯片要求CS,取决于芯片内部接口逻辑。例如芯片手册有如下描述:Before the controller starts the data transfer, the software has to generate a falling edge on the pin connected to CS,这样就不能直接CS接地

 

同步外设接口(SPI)是由摩托罗拉公司开发的全双工同步串行总线,该总线大量用在与EEPROM、ADC、FRAM和显示驱动器之类的慢速外设器件通信。

SPI(Serial Peripheral Interface)是一种串行同步通讯协议,由一个主设备和一个或多个从设备组成,主设备启动一个与从设备的同步通讯,从而完成数据的交换。SPI 接口由SDI(串行数据输入),SDO(串行数据输出),SCK(串行移位时钟),CS(从使能信号)四种信号构成,CS 决定了唯一的与主设备通信的从设备,如没有CS 信号,则只能存在一个从设备,主设备通过产生移位时钟来发起通讯。通讯时,数据由SDO 输出,SDI 输入,数据在时钟的上升或下降沿由SDO 输出,在紧接着的下降或上升沿由SDI 读入,这样经过8/16 次时钟的改变,完成8/16 位数据的传输。

SPI通信

该总线通信基于主-从配置。它有以下4个信号:

MOSI:主出/从入

MISO:主入/从出

SCK:串行时钟

SS:从属选择

芯片上“从属选择”(slave-select)的引脚数决定了可连到总线上的器件数量。

        在SPI传输中,数据是同步进行发送和接收的。数据传输的时钟基于来自主处理器的时钟脉冲,摩托罗拉没有定义任何通用SPI的时钟规范。然而,最常用的时钟设置基于时钟极性(CPOL)和时钟相位(CPHA)两个参数,CPOL定义SPI串行时钟的活动状态,而CPHA定义相对于SO-数据位的时钟相位。CPOL和CPHA的设置决定了数据取样的时钟沿。

Clock Polar   时钟极性  ---CPOLClock Phase   时钟相位 ---CPHA
数据方向和通信速度        SPI传输串行数据时首先传输最高位。波特率可以高达5Mbps,具体速度大小取决于SPI硬件。例如,Xicor公司的SPI串行器件传输速度能达到5MHz。

SPI总线接口及时序

SPI总线包括1根串行同步时钟信号线以及2根数据线。

SPI模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置,时钟极性(CPOL)对传输协议没有重大的影响。如果CPOL=0,串行同步时钟的空闲状态为低电平;如果CPOL=1,串行同步时钟的空闲状态为高电平。时钟相位(CPHA)能够配置用于选择两种不同的传输协议之一进行数据传输。如果CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。SPI主模块和与之通信的外设备时钟相位和极性应该一致。SPI主模块和与之通信的外设备时钟相位和极性应该一致。个人理解这句话有2层意思:其一,主设备SPI时钟和极性的配置应该由外设来决定;其二,二者的配置应该保持一致,即主设备的SDO同从设备的SDO配置一致,主设备的SDI同从设备的SDI配置一致。因为主从设备是在SCLK的控制下,同时发送和接收数据,并通过2个双向移位寄存器来交换数据。SPI接口时序如图3、图4所示。