SPI总线学习 1、SPI总线速度: 波特率可以高达5Mbps,具体速度大小取决于SPI硬件。 例如,Xicor公司的SPI串行器件传输速度能达到5MHz; ATMEL的AT45DB021B,20 MHz Max Clock Frequency; LPC2214的SPI,最大数据位速率为输入时钟速率的1/8。 2、SPI简介: 同步外设接口(SPI)是由摩托罗拉公司开发的全双工同步串行总线,该总线 量用在与EEPROM、ADC、FLASH和显示驱动器之类的慢速外设器件通信。 SPI(Serial 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-数据位的 时钟相位。CPOL和CPHA的设置决定了数据取样的时钟. 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将要发送的数据 ** 输 出: 返回接收的数据 ** 全局变量: 无 ** 调用模块: 无 ** 日 期: 2006年11月12日 ************************************/ 本文来源:https://www.wddqw.com/doc/b53fe695f221dd36a32d7375a417866fb84ac014.html