`
love19820823
  • 浏览: 936772 次
文章分类
社区版块
存档分类
最新评论

SPI

 
阅读更多

SPI 串行外设接口总线,最早由Motorola提出,出现在其M68系列单片机中,由于其简单实用,又不牵涉到专利问题,因此许多厂家的设备都支持该接口,广泛应用于外设控制领域。

SPI接口是一种事实标准,并没有标准协议,大部分厂家都是参照MotorolaSPI接口定义来设计的。但正因为没有确切的版本协议,不同家产品的SPI接口在技术上存在一定的差别,容易引起歧义,有的甚至无法直接互连(需要软件进行必要的修改)。

虽然SPI接口的内容非常简单,但本文仍将就其中的一些容易忽视的问题进行讨论。

SPI ( Serial Peripheral Interface )

SPI接口是Motorola 首先提出的全双工三线同步串行外围接口,采用主从模式(Master Slave)架构;支持多slave模式应用,一般仅支持单Master

时钟由Master控制,在时钟移位脉冲下,数据按位传输,高位在前,低位在后(MSB first);SPI接口有2根单向数据线,为全双工通信,目前应用中的数据速率可达几Mbps的水平。

SPI接口信号线

SPI接口共有4根信号线,分别是:设备选择线、时钟线、串行输出数据线、串行输入数据线。

设备选择线SS-Slave select,或CS-

SS-线用于选择激活某Slave设备,低有效,由Master驱动输出。只有当SS-信号线为低电平时,对应Slave设备的SPI接口才处于工作状态。

SCLK:同步时钟信号线,

SCLK用来同步主从设备的数据传输,由Master驱动输出,Slave设备按SCK的步调接收或发送数据。

串行数据线:

SPI接口数据线是单向的,共有两根数据线,分别承担MasterSlaveSlaveMaster的数据传输;但是不同厂家的数据线命名有差别。

Motorola的经典命名是MOSIMISO,这是站在信号线的角度来命名的。

MOSIWhen master, out line; when slave, in line

MISOWhen master, in line; when slave, out line

比如MOSI,该线上数据一定是Master流向Slave的。因此在电路板上,MasterMOSI引脚应与SlaveMOSI引脚连接在一起。双方的MISO也应该连在一起,而不是一方的MOSI连接另一方的MISO

不过,也有一些产家(比如Microchip)是按照类似SDI,SDO的方式来命名,这是站在器件的角度根据数据流向来定义的。

SDI:串行数据输入

SDO:串行数据输出

这种情况下,当MasterSlave连接时,就应该用一方的SDO连接另一个方的SDI

由于SPI接口数据线是单向的,故电路设计时,数据线连接一定要正确,必然是一方的输出连接另一方的输入。

其实这个问题本来很简单的,但由于不同厂家产品的命名习惯可能不同,因此还需小心,以免低级出错。

数据传输的时序模式

为了适用不同产品接口应用需要,SPI接口定义了多种时序传输模式,并可通过设置接口单元寄存器中的相关控制位来选择。在Motorola的产品中,时序即是由两个控制位(极性控制、相位控制)来控制的。

时钟极性选择位CPOL

在设备被使能激活后,还未进行数据传输时或两个字节数据传输间歇期间(见图3中的○1与○2处),SCLK处于空闲(Idle)电平,通过"CPOL空闲状态极性控制位"可以选择此空闲电平电平是0还是1

时钟相位选择位CPHA

该控制位用来选择数据接收端设备的采样时刻。可能在Idle to Active的跳变沿(见图3中的红色圈处),也可能在Active to Idle的跳变沿(见图3中的蓝色圈处)。在该采样时刻,线上数据必须已经稳定可靠,因此数据发送端设备应提前将数据移出到数据线上。为了降低设计难度,大部分接口电路都是用同一时钟周期中前一个时钟沿(即相反时钟变化方向)将数据移出。

SPI线上的MasterSlave设备必须根据具体情况设置匹配的传输时序模式,时序只有匹配,数据传输才能正常进行。如果设置的不匹配,可能导致数据接收方和发送方在同一时钟沿作用,导致数据传输失败。

我们以手机设计中非常流行的触摸屏控制器TSC2046为例,介绍SPI接口的实际应用。

由于TSC2046采样触摸屏信息并量化出最高位需要一定时间,而SPI总线没有握手机制,为避免Master过早的启动传输,接收无效数据,TSC2046引入了BUSY信号作为TSC2046Master的指示。

TSC2046是在时钟的第一个Idle to Active沿采集数据(下图1处),而在第一个(下一字节)Active to Idle 沿开始移出数据(下图2处),这导致Master只能在第二个dle to Active沿采集到的数据才是有效的(下图3处),而在第一个Idle to Active沿(下图1处)采集的数据是无效的,因此在软件中需要将该Bit丢弃。

可见,必须根据MasterSlave的实际时序进行匹配,软件也需要进行对应的调整,才能保证数据传输的正常进行。

Slave的应用

SPI也支持多Slave应用。多个Slave共享时钟线、数据线,可以直接并接在一起;而各Slave的片选线SS则单独与Master连接,受Master控制。在一段时间内,Master只能通过某根SS线激活一个Slave,进行数据传输,而此时其他Slave的时钟线和数据线端口则都应保持高阻状态,以免影响当前数据传输的进行。

SPI Vs I2C

SPI协议没有定义寻址机制,需通过外部SS信号线选择设备,当出现多slave应用时,需要多根SS信号线,实施起来较I2C要复杂。此外,SPI总线不支持总线控制权仲裁,故只能用在单Master的场合;而I2C可以支持多Master的应用。

SPI 协议相对I2C要简单,没有握手机制,数据传输效率高,速率也更快,通常应用中可达几Mbps;此外SPI是全双工通信,可同时发送和接收数据,因此,SPI比较适合用于数据传输的场合。比如需要较大批量数据传输的场合(比如MMC/SD卡的数据传输就支持SPI模式),或者无需寻址传输的场合。

I2C协议功能较丰富,但也相对复杂,多用在传输一些控制命令字等有意义数据的场合。

比如TSC2046只有一个控制寄存器(一个8bit的命令字),使用SPI接口即可控制,因为无需寻址。而OVCmos Sensor内有多个控制寄存器,此时就必须使用I2C接口才能实现寻址控制(哦,确切的是SCCB,一个很像I2C的东东)。

SPI接口属于一种非常基本的外设接口,但是应用却很广泛。SPI也有所发展,比兔NS推出的SPI的精简接口Microwire,满足通常外设的扩展需求。Motorola还推出了扩展功能的QSPIQueued SPI)接口,应用更为广泛。

分享到:
评论

相关推荐

    关于SPI通信协议的NSS

    SPI库函数配置中,结构体成员有SPI_NSS这个东西,这个东西是什么意思,当时看着是不知所云。 经过不断查找资料得出以下答案: 软件模式: SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; 硬件模式 SPI_InitStructure....

    SPI.C完整程序

    void SPI2_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure; RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE );//PORTB时钟使能 RCC_APB1...

    FPGA中增加SPI和BPI配置模式

    在Xilinx新一代的FPGA中增加了SPI和BPI配置模式,好处是成本低、设计者选择余地大及配置方便等优点。例如,Spartan-3E器件支持多种Vendor(生产商)提供的SPI和BPIFlash产品。对于SPI Flash器件可以通过Xilinx的Cable-...

    STM32F103C8T6 SPI2主从模式例程代码

    描述:将1号单片机下载SPI主模式程序,2号单片机下载SPI从模式程序,将两块单片机的串口1分别连接串口转USB连接电脑,用4根杜邦线将两块单片机的SPI2四根线连接。1号2号单片机通过SPI传输数据,再通过各自串口1将...

    基于verilog的SPI接口设计,modelsim仿真测试。verilog代码,word文章。

    基于verilog的SPI接口设计,modelsim仿真测试。SPI是Motorola公司提出的外围接口协议,它采用一个串行、同步、全双工的通信方式,解决了微处理器和外设之间的串行通信问题,并且可以和多个外设进行直接通信。用...

    SPI抛光规范(SPI A1-SPI D3)

    SPI抛光规范(SPI A1-SPI D3)

    FPGA 读写SPI FLASH的Verilog逻辑源码Quartus工程文件+文档说明.zip

    FPGA 读写SPI FLASH的Verilog逻辑源码Quartus工程文件+文档说明,由于 FPGA 是基于 SRAM 结构的,程序掉电后会丢失,所以需要一个外置 Flash 保存程序, FPGA 每次上电后去读取 Flash 中的配置程序,在 ALINX 开发板...

    GPIO模拟SPI通信从机代码

    GPIO模拟SPI通信从机代码 主函数为: #include "sys.h" #include "delay.h" #include "usart.h" #include "led.h" #include "key.h" #include "spi.h" #include "lcd.h" #include "sdram.h" unsigned char data[9]=...

    STM32单片机硬件SPI驱动TFTLCD(ST7735驱动)软件例程源码+Proteus仿真.zip

    STM32单片机硬件SPI驱动TFTLCD(ST7735驱动)软件例程源码+Proteus仿真 /**ST7735驱动**/ #include "ST7735.h" #include "usart.h" u16 BACK_COLOR, POINT_COLOR; //背景色,画笔色 void WriteCommand_7735...

    SPI总线协议及SPI时序图详解

    SPI(Serial Peripheral Interface--串行外设接口)总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式进行通信以交换信息。外围设置FLASHRAM、网络控制器、LCD显示驱动器、A/D转换器和MCU等。SPI...

    STM32硬件SPI驱动TFTLCD Proteus仿真实现

    这是我用仿真实现的一个smt32的硬件SPI1来驱动的ST7735R,难度挺小的,因为大部分的代码LCD的厂商已经给我们提供了,我们主要修改成硬件SPI来驱动就好了。 此次仿真上面有2个问题,不知道是代码的问题还是仿真图上...

    SPI自发自收实验.zip_pilotoy9_spi 自发自收_spi自发自收_stm32f407 spi 自发自收

    SPI 自收自发功能,SPI1 主模式 SPI2 从模式的,通信功能验证OK

    R语言代码_R语言计算spi_SPI计算R语言_SPI指数R语言_r语言代码_R语言spi

    利用R语言中“SCI”程序包计算SPI标准化干旱指数(包括SPI3,SPI12等),利用多年资料的月降水量分析旱涝水平

    driver.rar_底层驱动_瑞萨 SPI_瑞萨004芯片SPI驱动_瑞萨spi_通讯驱动 SPI

    适合于瑞萨RL芯片的SPI通信底层驱动,使用语言C。

    pg153-axi-quad-spi.pdf

    当我们在设计中使用Zynq SoC或Zynq UltraScale + MPSoC时,可以有两种方法来实现SPI接口: 使用PS端的SPI控制器(PS端有两个SPI控制器) 在PL端使用配置成标准SPI通信的AXI Quad SPI (QSPI) IP模块 我们可以根据...

    spi_verilog_master_slave_latest.tar.gz

    该项目在Verilog HDL中提供SPI Mode-3主从模块。数据宽度为8位。它是为Xilinx Spartan 6合成的,时钟频率最高可达225MHz。最大SPI时钟(sck)频率为112MHz,由主时钟得出。来自主时钟的SCK缩放比例可以是2、4、8和16...

    spi协议详细解释文档

    spi协议详解spi协议详解spi协spi协议详解spi协议详解spi协议详解spi协议详解spi协议详解spi协议详解spi协议详解spi协议详解spi协议详解spi协议详解spi协议详解spi协议详解spi协议详解spi协议详解spi协议详解spi协议...

    ESP32-S3驱动ILI9488 串口SPI显示屏完整例程

    ★ lv_port_esp32_master例程更改部分BUG,实现了用ESP32-S3 配ILI9488 SPI屏。 SPI2接口驱动,能正常显示lv_port_esp32_master例程。 SPI3接口驱动,能XPT2046触控交互。 ★ 编译环境 Visual Studio Code + IDF ...

    Micro SD 卡(TF卡) spi 模式实现方法

    1.SD卡的SPI总线,在读入数据时SD卡的SPI是CLK的上升沿输入锁存,输出数据也是在上升沿。 2.向SD卡写入一个CMD或者ACMD指令的过程是这样的: 首先使CS为低电平,SD卡使能;其次在SD卡的Din写入指令;写入指令后...

    SPI.rar_28335 spi编程_DSP28335 SPI_spi_tms320f28335 spi

    DSP TMS320F28335例程之SPI,编译环境code composer studio 3.3.

Global site tag (gtag.js) - Google Analytics