SPI介绍

时间:2023-01-10 06:00:17 阅读: 最新文章 文档下载
说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。
SPI总线学习

1SPI总线速度:

波特率可以高达5Mbps,具体速度大小取决于SPI硬件。 例如,Xicor公司的SPI串行器件传输速度能达到5MHz ATMELAT45DB021B20 MHz Max Clock Frequency

LPC2214SPI最大数据位速率为输入时钟速率的1/8

2SPI简介:

同步外设接口(SPI)是由摩托罗拉公司开发的全双工同步串行总线,该总线 量用在与EEPROMADCFLASH和显示驱动器之类的慢速外设器件通信。 SPISerial Peripheral Interface)是一种串行同步通讯协议,由一个主 设备和一个或多个从设备组成,主设备启动一个与从设备的同步通讯,从而 完成数据的交换。通讯时,数据由MOSI 输出,MISO 输入,数据在时钟的上 升或下降沿由MOSI 输出,在紧接着的下降或上升沿由MISO 读入,这样经过 8/16 次时钟的改变,完成8/16 位数据的传输。 在一次数据传输过程中,接口上只能有一个主机和一个从机能够通信。并且, 主机总是向从机发送一个字节数据,而从机也总是向主机发送一个字节数据。 该总线通信基于主-从配置。它4个信号:

MOSI:主出/从入 MISO:主入/从出 SCK:串行时钟

SS:从属选择 。即CS(从使能信号),CS 决定了唯一的与主设 备通信的从设备,如 没有CS 信号,则只能存在一个从设备,主设备 通过产生移位时钟来发起通讯。



SPI传输中,数据是同步进行发送和接收的。数据传输的

时钟基于来自主处理器的时钟脉冲,摩托罗拉没有定义任何通用SPI的时钟 规范。然而,最常用的时钟设置基于时钟极性(CPOL)和时钟相位(CPHA)两个 参数,CPOL定义SPI串行时钟的活动状态,而CPHA定义相对于SO-数据位的 时钟相位。CPOLCPHA的设置决定了数据取样的时钟. 3、例子:

LPC2214有两个SPI接口。

SPI 从机选择信号是一个低有效信号,用于指示被选择参与数据传输

的从机。每个从机都有各自特定的从机选择输入信号。在数据处理之前,SSEL 必须为低电平并在整个处理过程中保持低电平。如果在数据传输中SSEL 信号变 为高电平,传输将被中止。这种情况下,从机返回到空闲状态并将任何接收到 的数据丢弃。对于这样的异常没有其它的指示。该信号不直接由主机驱动。可 通过软件使用一个通用I/O 口来驱动。 注:配置为SPI 主机的LPC2114/2124/2212/2214 必须选择一个合适的管脚用作 SSEL 功能并使其保持高电平,只有这样,器件才能真正执行主机的功能。


例程:XFT-8001部分SPI软体;

/*----定义SPI相关控制器的控制位(SPCR)----*/

#define MSTR BIT5 /*-----主模式控制---- #define BIT5 0x00000020 */ #define CPOL BIT4 /*-----时钟极性控制---- #define BIT4 0x00000010 */ #define CPHA BIT3 /*-----时钟相位控制----*/ #define LSBF BIT6 /*-----移位方向控制----*/

#define SCK P0_4 /*------串行时钟-------*/ #define MISO P0_5 /*------主入从出-------*/ #define MOSI P0_6 /*------主出从入------*/ #define SSEL_AD P0_16 /*----从机选择SPI---*/ #define FLASH_CS P0_19



void SpiInit(uint8 x) { switch(x) {

case FLASHSPI: //按照flash的要求初始化SPI S0SPCCR = 0x00000036; //400KHz的时钟频率 S0SPCCR=Fpclk/SPI频率 S0SPCR = MSTR; //主控制器,模式选择0 break;

case SDSPI: //按照SD卡的要求初始化SPI

S0SPCCR = 0x0000000E; S0SPCR = MSTR; break;

case HC595SPI: //按照595的要求初始化SPI break; } }



/*****************************************************************

******

** 函数名称: SpiSendData()

** 功能描述: SPI总线发送数据,由于SPI的特点,SPI在发送数据

的时候,也在接收数据;如果仅仅要求接收数据,也要发送数据,不然没有SCK时钟

** : x:SPI将要发送的数据 ** : 返回接收的数据 ** 全局变量: ** 调用模块:

** : 20061112 ************************************/


本文来源:https://www.wddqw.com/doc/b53fe695f221dd36a32d7375a417866fb84ac014.html