文章出处http://hi.baidu.com/wooutstanding/item/d242d25a62b31918e7c4a568
【SPI总线的系统】
MOTOROLA公司的SPI总线的基本信号线为3根传输线
,即SI、SO、SCK
。传输的速率由时钟信号SCK决定,SI为数据输入、SO为数据输出。采用SPI总线的系统如上图所示,它包含了一个主片和多个从片,主片通过发出片选信号-CS
来控制对哪个从片进行通信,当某个从片的-CS信号有效时,能通过SI接收指令、数据,并通过SO发回数据。而未被选中的从片的SO端处于高阻状态。
主片在访问某一从片时,必须使该从片的片选信号有效;主片在SCK信号的同步下,通过SI线发出指令、地址信息;如需将数据输出,则接着写指令,由SCK同步在SI线上发出数据;如需读回数据,则接着读指令,由主片发出SCK,从片根据SCK的节拍通过SO发回数据。
因而对具有SPI接口的从片器件来讲,SCK、SI是输入信号,SO是输出信号。SCK用于主片和从片通信的同步。SI用于将信息传输到器件,输入的信息包括指令、地址和数据,指令、地址和数据的变化在SCK的低电平期间进行,并由SCK信号的上升沿锁存。SO
用于将信息从器件传出,传出的信息包括状态和数据,信息在SCK信号的下降沿移出。
【【度娘】】
SPI(Serial Peripheral
Interface--串行外设接口)总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式进行通信以交换信息。SPI有三个寄存器分别为:控制寄存器SPCR,状态寄存器SPSR,数据寄存器SPDR。外围设备FLASHRAM、网络控制器
、LCD显示驱动器、A/D转换器
和MCU等。SPI总线系统可直接与各个厂家生产的多种标准外围器件直接接口,该接口一般使用4条线
:串行时钟线(SCLK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOSI
和低电平有效的从机选择线SS
(有的SPI接口芯片带有中断信号线INT、有的SPI接口芯片没有主机输出/从机输入数据线MOSI)。SPI接口主要应用在EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器
和数字信号解码器之间。
SPI接口是在CPU和外围低速器件之间进行同步串行数据传输,在主器件的移位脉冲下,数据按位传输,高位在前,低位在后,为全双工通信,数据传输速度
总体来说比I2C总线
要快,速度可达到几Mbps。
SPI接口是以主从方式工作的,这种模式通常有一个主器件和一个或多个从器件,
SPI接口的一个缺点:没有指定的流控制,没有应答机制确认是否接收到数据。
SPI
接口信号线
SPI接口共有4根信号线,分别是:设备选择线、时钟线、串行输出数据线、串行输入数据线。
设备选择线SS-(Slave
select,或CS-)
SS-线用于选择激活某Slave设备,低有效,由Master驱动输出。只有当SS-信号线为低电平时,对应Slave设备的SPI接口才处于工作状态。
SCLK
:同步时钟信号线,
SCLK用来同步主从设备的数据传输,由Master驱动输出,Slave设备按SCK的步调接收或发送数据。
串行数据线:
SPI接口数据线是单向的,共有两根数据线,分别承担Master到Slave、Slave到Master的数据传输;但是不同厂家的数据线命名有差别。
Motorola的经典命名是MOSI和MISO,这是站在信号线的角度来命名的。
MOSI:When
master, out line; when slave, in line
MISO:When
master, in line; when slave, out line
比如MOSI,该线上数据一定是Master流向Slave的。因此在电路板上,Master的MOSI引脚应与Slave的MOSI引脚连接在一起。双方的MISO也应该连在一起,而不是一方的MOSI连接另一方的MISO。
不过,也有一些产家(比如Microchip)是按照类似SDI,SDO的方式来命名,这是站在器件的角度根据数据流向来定义的。
SDI:串行数据输入
SDO:串行数据输出
这种情况下,当Master与Slave连接时,就应该用一方的SDO连接另一个方的SDI。
由于SPI接口数据线是单向的,故电路设计时,数据线连接一定要正确,必然是一方的输出连接另一方的输入。
其实这个问题本来很简单的,但由于不同厂家产品的命名习惯可能不同,因此还需小心,以免低级出错。
数据传输的时序模式
为了适用不同产品接口应用需要,SPI接口定义了多种时序传输模式,并可通过设置接口单元寄存器中的相关控制位来选择。在Motorola的产品中,时序即是由两个控制位(极性控制、相位控制)来控制的。
时钟极性选择位
CPOL
:
在设备被使能激活后,还未进行数据传输时或两个字节数据传输间歇期间(见图3中的○1与○2处),SCLK处于空闲(Idle)电平,通过"CPOL空闲状态极性控制位"可以选择此空闲电平电平是0还是1。
时钟相位选择位
CPHA
:
该控制位用来选择数据接收端设备的采样时刻。可能在Idle
to Active的跳变沿(见图3中的红色圈处),也可能在Active to
Idle的跳变沿(见图3中的蓝色圈处)。在该采样时刻,线上数据必须已经稳定可靠,因此数据发送端设备应提前将数据移出到数据线上。为了降低设计难度,大部分接口电路都是用同一时钟周期中前一个时钟沿(即相反时钟变化方向)将数据移出。
SPI线上的Master,Slave设备必须根据具体情况设置匹配的传输时序模式,时序只有匹配,数据传输才能正常进行。如果设置的不匹配,可能导致数据接收方和发送方在同一时钟沿作用,导致数据传输失败。
我们以手机设计中非常流行的触摸屏控制器TSC2046为例,介绍SPI接口的实际应用。
由于TSC2046采样触摸屏信息并量化出最高位需要一定时间,而SPI总线没有握手机制,为避免Master过早的启动传输,接收无效数据,TSC2046引入了BUSY信号作为TSC2046向Master的指示。
TSC2046是在时钟的第一个Idle
to Active沿采集数据(下图1处),而在第一个(下一字节)Active to Idle 沿开始移出数据(下图2处),这导致Master只能在第二个dle
to Active沿采集到的数据才是有效的(下图3处),而在第一个Idle to
Active沿(下图1处)采集的数据是无效的,因此在软件中需要将该Bit丢弃。
可见,必须根据Master与Slave的实际时序进行匹配,软件也需要进行对应的调整,才能保证数据传输的正常进行。
多
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接口即可控制,因为无需寻址。而OV的Cmos
Sensor内有多个控制寄存器,此时就必须使用I2C接口才能实现寻址控制(哦,确切的是SCCB,一个很像I2C的东东)。
SPI接口属于一种非常基本的外设接口,但是应用却很广泛。SPI也有所发展,比兔NS推出的SPI的精简接口Microwire,满足通常外设的扩展需求。Motorola还推出了扩展功能的QSPI(Queued
SPI)接口,应用更为广泛。
分享到:
相关推荐
本压缩包“SPI.zip”包含了关于SPI接口在Vivado中使用的相关资料,特别是SPI接口的代码,这将帮助开发者理解如何在Vivado环境下实现SPI通信。描述中提到这些代码已经过实测,确保了其在Vivado中的可行性,这意味着...
标题"MCP23S17_spi扩展io_spi接口IO扩展_spi扩展io芯片_MCP23S17STM32_mcp23_"提到了几个关键概念,包括MCP23S17,SPI扩展IO,SPI接口,以及与STM32微控制器的关联。MCP23S17是一款由Microchip Technology制造的16位...
SPI接口是一种常见的串行通信接口,常用于微控制器如STM32与外部设备之间的通信,如在本例中,是042寸OLED显示屏模块。SPI接口的主要特点是高速、全双工,由主机(Master)控制数据传输,从机(Slave)响应。 在SPI...
**通信接口SFI SPI接口标准** SPI(Serial Packet Interface)是一种高速、同步串行接口,主要应用于通信设备之间,提供数据传输服务。SFI(Serial Front-Panel Interface)是SPI接口的一个具体实现,由 Optical ...
### ADI SPI接口简介 #### 一、SPI接口概述 串行外设接口(Serial Peripheral Interface, SPI)是微控制器与外围集成电路(如传感器、模数转换器(ADC)、数模转换器(DAC)、移位寄存器、静态随机存取存储器(SRAM)等)...
在FPGA设计中,SPI接口的实现与验证是常见任务之一。本压缩包提供了SPI接口的简单testbench和仿真脚本,用于辅助学习和理解SPI协议以及FPGA设计中的验证方法。 首先,`dac_tb.v` 文件是测试平台(testbench)的...
基于verilog的SPI接口设计,modelsim仿真测试。SPI是Motorola公司提出的外围接口协议,它采用一个串行、同步、全双工的通信方式,解决了微处理器和外设之间的串行通信问题,并且可以和多个外设进行直接通信。用...
### 基于ENC28J60以太网控制器的SPI接口设计 #### 一、引言 随着信息技术的迅速发展,网络通信已经成为现代工业自动化、智能家居等领域的核心技术之一。其中,以太网作为最广泛应用的局域网技术,其在数据传输方面...
SPI 接口技术说明 SPI(Serial Peripheral Interface,串行外设接口)是一种同步串行外设接口,允许 MCU 与各种外围设备以串行方式进行通信以交换信息。SPI 总线系统可直接与各个厂家生产的多种标准外围器件直接...
在本例程中,我们将探讨如何利用STM32F103的SPI接口与外部Flash进行通信,实现读写操作。 首先,理解SPI通信的基本原理至关重要。SPI通信由主设备(Master)发起,通过四根信号线:SCK(时钟)、MISO(主输入/从...
在集成电路设计中,VHDL(VHSIC Hardware Description Language)是一种强大的硬件描述语言,可以用来实现SPI接口协议在FPGA(Field-Programmable Gate Array)上的逻辑功能。 SPI协议的核心特性包括: 1. **主-从...
SPI接口音频Codec实验是嵌入式系统开发中的一个重要实践,主要涉及到数字信号处理与通信协议的应用。SPI(Serial Peripheral Interface)是一种同步串行接口,广泛用于微控制器与各种外围设备之间的通信,包括音频...
### 基于FPGA的SPI接口设计 #### 一、引言 串行外设接口(Serial Peripheral Interface,简称SPI)是由Motorola公司提出的一种同步串行接口标准,广泛应用于微控制器与各种外围设备之间的数据交换场景。由于其简单...
在本文中,我们将深入探讨如何利用Altera的开发工具Quartus II在Field Programmable Gate Array(FPGA)上实现SPI接口,并进行波形仿真验证。 首先,理解SPI接口的基本原理是至关重要的。SPI接口通常由四个信号线...
SPI接口结构图1知识点总结 SPI( Serial Peripheral Interface,串行外围设备接口)是一种同步串行通信接口,由Philips公司开发,广泛应用于嵌入式系统、微控制器和外围设备之间的通信。下面是根据提供的文件信息,...
在FPGA(Field-Programmable Gate Array)中实现SPI接口,可以利用其灵活性和可编程性,实现与各种外设如传感器、存储器等的数据交换。本文将详细介绍如何使用VHDL语言在FPGA上实现SPI接口。 首先,SPI接口的基本...
SPI接口,全称为Serial Peripheral Interface,是一种高效、全双工、同步的通信协议,广泛应用于电子设备中。它仅需四条信号线即可实现通信,包括SCK(Serial Clock)、MOSI(Master Output, Slave Input)、MISO...
### SPI接口学习笔记 #### 一、SPI接口基础概述 **SPI**,即**Serial Peripheral Interface**(串行外围接口),是由Motorola首先在其MC68HCXX系列处理器上定义的一种高速的、全双工、同步串行通信接口。SPI接口...
在这个项目中,我们将深入探讨如何在STM32上实现模拟SPI接口,并且探讨其支持多个SPI接口同时工作的能力。 首先,SPI接口有四种工作模式,分别是主模式(Master)和从模式(Slave),以及四种时钟极性(CPOL)和...