差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
spi [2019/05/05 14:55] gongyu |
spi [2019/08/05 22:13] (当前版本) gongyu |
||
---|---|---|---|
行 1: | 行 1: | ||
- | |||
- | {{ :eetreewechat.png?600 |}} <WRAP centeralign>**扫描二维码,关注微信公众号“电子森林”,可以在手机上查看本网站的所有文章** </WRAP> | ||
- | |||
- | \\ | ||
- | |||
#### SPI - 同步、全双工的串行外设接口 | #### SPI - 同步、全双工的串行外设接口 | ||
行 22: | 行 17: | ||
{{ :spi_640.gif |}}<WRAP centeralign> 动画1显示数据从器件A移出到器件B,从器件B移出到器件A. </WRAP> | {{ :spi_640.gif |}}<WRAP centeralign> 动画1显示数据从器件A移出到器件B,从器件B移出到器件A. </WRAP> | ||
- | ### SPI的技术实现 | + | #### SPI的技术实现 |
- | #### 接口信号 | + | ##### 接口信号 |
SPI总线定义了4个逻辑信号: | SPI总线定义了4个逻辑信号: | ||
行 40: | 行 35: | ||
{{ :spi_6402.gif |}} <WRAP centeralign> 动画2显示了通过一个虚拟的4通道示波器捕捉的两个器件之间SPI的转换 </WRAP> | {{ :spi_6402.gif |}} <WRAP centeralign> 动画2显示了通过一个虚拟的4通道示波器捕捉的两个器件之间SPI的转换 </WRAP> | ||
- | #### 工作模式 | + | ##### 工作模式 |
SPI总线可以工作在一个主设备/一个或多个从设备的模式。 | SPI总线可以工作在一个主设备/一个或多个从设备的模式。 | ||
如果只有一个从设备,SS管脚可以直接接地(从设备允许的话),有些从设备需要片选信号的下降沿来启动传输,一个例子就是[[http://www.maximintegrated.com|美信]]公司的串行ADC [[https://www.maximintegrated.com/en/products/analog/data-converters/analog-to-digital-converters/MAX1242.html|MAX1242]],通过一个高电平到低电平的转换标记传输的起始。如果有多个从设备,每个从设备需要一个独立的SS信号连接到主设备。 | 如果只有一个从设备,SS管脚可以直接接地(从设备允许的话),有些从设备需要片选信号的下降沿来启动传输,一个例子就是[[http://www.maximintegrated.com|美信]]公司的串行ADC [[https://www.maximintegrated.com/en/products/analog/data-converters/analog-to-digital-converters/MAX1242.html|MAX1242]],通过一个高电平到低电平的转换标记传输的起始。如果有多个从设备,每个从设备需要一个独立的SS信号连接到主设备。 | ||
行 48: | 行 43: | ||
{{ :spi_clocking.jpg |}} <WRAP centeralign> SPI的时钟采样 </WRAP> | {{ :spi_clocking.jpg |}} <WRAP centeralign> SPI的时钟采样 </WRAP> | ||
- | ##### 通过多个从片选信号(SSN)配置 | + | ###### 通过多个从片选信号(SSN)配置 |
在标准的SPI配置中,主设备可以通过使能相应的从设备,即通过将相应设备的从选择线(SSN或SS)设置为逻辑低电平,通过共享的公共数据线将数据写入各个从设备或由各个从设备中读取数据。 应注意不要同时使能多个从设备,因为返回到主设备的数据将在MISO线路之间的驱动器上产生竞争导致无法进行数据的判读。在某些应用中不需要将数据返回给主设备,在这种情况下,如果主设备想要将相同的数据发送到多个从设备,则可以同时寻址多个从设备。 | 在标准的SPI配置中,主设备可以通过使能相应的从设备,即通过将相应设备的从选择线(SSN或SS)设置为逻辑低电平,通过共享的公共数据线将数据写入各个从设备或由各个从设备中读取数据。 应注意不要同时使能多个从设备,因为返回到主设备的数据将在MISO线路之间的驱动器上产生竞争导致无法进行数据的判读。在某些应用中不需要将数据返回给主设备,在这种情况下,如果主设备想要将相同的数据发送到多个从设备,则可以同时寻址多个从设备。 | ||
行 55: | 行 50: | ||
在多从设备选择配置中,每个从设备都需要来自主设备的唯一从设备选择线(SS、SSN或CSn)。如果主设备没有足够的I/O引脚用于所需数量的从设备,则使用解码/解复用器(例如74HC(T)238(3到8线)来实现I/O扩展)。 | 在多从设备选择配置中,每个从设备都需要来自主设备的唯一从设备选择线(SS、SSN或CSn)。如果主设备没有足够的I/O引脚用于所需数量的从设备,则使用解码/解复用器(例如74HC(T)238(3到8线)来实现I/O扩展)。 | ||
- | ##### 菊花链配置 | + | ###### 菊花链配置 |
在这种配置中,数据从一个设备移动到下一个设备, 最终的从设备可以将数据返回给主设备(给FPGA编程的JTAG在给多个器件编程的时候也常用这种方式)。 | 在这种配置中,数据从一个设备移动到下一个设备, 最终的从设备可以将数据返回给主设备(给FPGA编程的JTAG在给多个器件编程的时候也常用这种方式)。 | ||
行 64: | 行 59: | ||
这种配置非常适合于主设备的信号引脚有限的场景。 | 这种配置非常适合于主设备的信号引脚有限的场景。 | ||
- | #### 4种传输模式 | + | ##### 4种传输模式 |
每次数据传输都是先将SSN(有的器件命名为SS,从选择线)被驱动为逻辑低电平时开始。由时钟的极性(CPOL)和相位(CPHA)构成了4种不同的数据传输模式(0,1,2,3),分别对应四种可能的时钟配置。 | 每次数据传输都是先将SSN(有的器件命名为SS,从选择线)被驱动为逻辑低电平时开始。由时钟的极性(CPOL)和相位(CPHA)构成了4种不同的数据传输模式(0,1,2,3),分别对应四种可能的时钟配置。 | ||
* CPOL: 时钟的极性,它控制着时钟信号的初始逻辑状态。 | * CPOL: 时钟的极性,它控制着时钟信号的初始逻辑状态。 | ||
行 82: | 行 77: | ||
- | #### SPI数据传输的主设备端代码示例 | + | ##### SPI数据传输的主设备端代码示例 |
以下是一段主设备工作于CPOL=0、CPHA=0模式时的数据传输的代码,每次传输为8位,此示例采用C语言。由于工作于CPOL=0, 在片选被选中之前要把时钟拉低,片选信号必须使能,也就是说在数据传输之前要将外设的片选信号电平变低,并在传输结束以后不再“使能”。 多数的外设允许或需要在片选信号选中以后进行多次传输,次子程序也许需要被多次调用。 | 以下是一段主设备工作于CPOL=0、CPHA=0模式时的数据传输的代码,每次传输为8位,此示例采用C语言。由于工作于CPOL=0, 在片选被选中之前要把时钟拉低,片选信号必须使能,也就是说在数据传输之前要将外设的片选信号电平变低,并在传输结束以后不再“使能”。 多数的外设允许或需要在片选信号选中以后进行多次传输,次子程序也许需要被多次调用。 | ||
行 125: | 行 120: | ||
</code> | </code> | ||
- | ### SPI的优点和缺点 | + | #### SPI的优点和缺点 |
- | #### 优点 | + | ##### 优点 |
* 支持全双工通信 | * 支持全双工通信 | ||
* 推挽驱动(跟漏极开路正相反)提供了比较好的信号完整性和较高的速度 | * 推挽驱动(跟漏极开路正相反)提供了比较好的信号完整性和较高的速度 | ||
行 144: | 行 139: | ||
* 对于时钟的速度没有上限,有进一步提高速度的潜力 | * 对于时钟的速度没有上限,有进一步提高速度的潜力 | ||
- | #### 缺点 | + | ##### 缺点 |
* 相比于I²C总线需要更多的管脚, 即便是只用到3根线的情况下 | * 相比于I²C总线需要更多的管脚, 即便是只用到3根线的情况下 | ||
* 没有寻址机制,在共享的总线连接时需要通过片选信号支持多个设备的访问 | * 没有寻址机制,在共享的总线连接时需要通过片选信号支持多个设备的访问 | ||
行 158: | 行 153: | ||
* 有一些变种比如多路I/O SPI和下面定义的三线串行总线都是半双工的 | * 有一些变种比如多路I/O SPI和下面定义的三线串行总线都是半双工的 | ||
- | ### 应用 | + | #### SPI的主要应用 |
- | The board real estate savings compared to a parallel I/O bus are significant, and have earned SPI a solid role in embedded systems. That is true for most system-on-a-chip processors, both with higher end 32-bit processors such as those using ARM, MIPS, or PowerPC and with other microcontrollers such as the AVR, PIC, and MSP430. These chips usually include SPI controllers capable of running in either master or slave mode. In-system programmable AVR controllers (including blank ones) can be programmed using an SPI interface. | + | |
- | Chip or FPGA based designs sometimes use SPI to communicate between internal components; on-chip real estate can be as costly as its on-board cousin. | + | 与并行I/O总线相比,SPI能够大大节省电路板的空间,因此在嵌入式系统中发挥了重要作用,对于大多数片上系统处理器而言都是如此,这些处理器都具有较高端的32位处理器,例如使用ARM、MIPS或PowerPC的处理器以及其它微控制器,如AVR、PIC和MSP430等。 这些芯片通常包括能够以主模式或从模式运行的SPI控制器,也可以使用SPI接口对系统内可编程AVR控制器(包括空白控制器)进行编程。 |
- | The full-duplex capability makes SPI very simple and efficient for single master/single slave applications. Some devices use the full-duplex mode to implement an efficient, swift data stream for applications such as digital audio, digital signal processing, or telecommunications channels, but most off-the-shelf chips stick to half-duplex request/response protocols. | + | 基于芯片或FPGA的设计有时使用SPI在内部的组件之间进行通信,即便是片内,其面积的节省也像电路板上一样非常重要。 |
- | SPI is used to talk to a variety of peripherals, such as | + | 全双工功能使SPI非常简单、高效、适用于单主/单从机应用。 一些设备使用全双工模式为数字音频、数字信号处理或电信信道等应用实现高效、快速的数据流,但大多数现成的芯片都采用半双工请求/响应协议。 |
- | * Sensors: temperature, pressure, ADC, touchscreens, video game controllers | + | SPI被用来同各种外设通信,例如: |
- | * Control devices: audio codecs, digital potentiometers, DAC | + | * 传感器:温度、压力、ADC、触摸屏、视频游戏控制器 |
- | * Camera lenses: Canon EF lens mount | + | * 控制设备:音频编解码器、数字电位器、DAC |
- | * Communications: Ethernet, USB, USART, CAN, IEEE 802.15.4, IEEE 802.11, handheld video games | + | * 相机镜头:佳能EF镜头卡口 |
- | * Memory: flash and EEPROM | + | * 通信:以太网、USB、USART、CAN、IEEE802.15.4、IEEE 802.11、手持视频游戏 |
- | * Real-time clocks | + | * 内存:闪存和EEPROM |
- | * LCD, sometimes even for managing image data | + | * 实时时钟 |
- | * Any MMC or SD card (including SDIO variant[5]) | + | * LCD,有时甚至用于管理图像数据 |
+ | * 任何MMC或SD卡(包括SDIO变种) | ||
- | For high performance systems, FPGAs sometimes use SPI to interface as a slave to a host, as a master to sensors, or for flash memory used to bootstrap if they are SRAM-based. | + | 对于高性能系统,FPGA有时使用SPI作为主机的从机接口、作为传感器的主机、或者如果它们是基于SRAM的,则用于引导的闪存。 |
- | Although there are some similarities between the SPI bus and the JTAG (IEEE 1149.1-2013) protocol, They are not interchangeable. The SPI bus is intended for high speed, on board initialization of device peripherals, while the JTAG protocol is intended to provide reliable test access to the I/O pins from an off board controller with less precise signal delay and skew parameters. While not strictly a level sensitive interface, the JTAG protocol supports the recovery of both setup and hold violations between JTAG devices by reducing the clock rate or changing the clock's duty cycles. Consequently, the JTAG interface is not intended to support extremely high data rates. | + | 虽然SPI总线和JTAG(IEEE 1149.1-2013)协议之间存在一些相似之处,但它们不可互换。 SPI总线用于器件外设的高速、板载初始化,而JTAG协议旨在通过板外控制器(有着比较低精度的信号延迟和偏斜参数)提供对I/O引脚的可靠测试访问。 JTAG协议不是严格意义上的电平敏感接口,它通过降低时钟速率或改变时钟的占空比来支持JTAG器件在建立和保持违规的情况下能够恢复。 因此,JTAG接口不是用来支持极高的数据速率的。 |
- | SGPIO is essentially another (incompatible) application stack for SPI designed for particular backplane management activities.[citation needed] SGPIO uses 3-bit messages. | + | #### 协议分析及调试设备 |
- | + | ##### 主适配卡 | |
- | ### 协议分析及调试设备 | + | |
- | + | ||
- | #### 主适配卡 | + | |
有许多使用USB的硬件解决方案可以利用运行Linux、Mac或Windows的计算机支持SPI主控和/或从属功能。其中许多还提供脚本和/或编程功能(Visual Basic,C / C ++,VHDL等)。 | 有许多使用USB的硬件解决方案可以利用运行Linux、Mac或Windows的计算机支持SPI主控和/或从属功能。其中许多还提供脚本和/或编程功能(Visual Basic,C / C ++,VHDL等)。 | ||
行 206: | 行 198: | ||
^Dangerous Prototypes |Bus Pirate |USB |1-Wire, I2C, SPI, JTAG*, Asynchronous serial, Scriptable binary bitbang, UART |varies | | ^Dangerous Prototypes |Bus Pirate |USB |1-Wire, I2C, SPI, JTAG*, Asynchronous serial, Scriptable binary bitbang, UART |varies | | ||
- | #### 协议分析仪 | + | ##### 协议分析仪 |
SPI协议分析仪可以对SPI总线进行采样并对电信号进行解码分析,以提供在特定总线上传输的数据的更高级别视图。SPI协议分析仪示例(制造商按字母顺序排列): | SPI协议分析仪可以对SPI总线进行采样并对电信号进行解码分析,以提供在特定总线上传输的数据的更高级别视图。SPI协议分析仪示例(制造商按字母顺序排列): | ||
行 216: | 行 208: | ||
^Total Phase |Promira Serial Platform |USB, Ethernet |eSPI | | ^Total Phase |Promira Serial Platform |USB, Ethernet |eSPI | | ||
- | #### 示波器 | + | ##### 示波器 |
每个主要的示波器供应商都为SPI提供了基于示波器的触发和协议解码,大多数支持2线、3线和4线SPI。 触发和解码功能通常作为可选附件提供。SPI信号可通过模拟示波器通道或数字MSO通道进行访问。 | 每个主要的示波器供应商都为SPI提供了基于示波器的触发和协议解码,大多数支持2线、3线和4线SPI。 触发和解码功能通常作为可选附件提供。SPI信号可通过模拟示波器通道或数字MSO通道进行访问。 | ||
- | #### 逻辑分析仪 | + | ##### 逻辑分析仪 |
在开发和/或排除SPI总线故障时,检查硬件信号非常重要。 逻辑分析仪是收集、分析、解码和存储信号的工具,因此人们可以用它来查看高速波形。 逻辑分析仪显示每个信号电平变化的时间戳,这有助于发现协议问题。大多数逻辑分析仪都能够将总线信号解码为高级协议数据并显示ASCII数据。 | 在开发和/或排除SPI总线故障时,检查硬件信号非常重要。 逻辑分析仪是收集、分析、解码和存储信号的工具,因此人们可以用它来查看高速波形。 逻辑分析仪显示每个信号电平变化的时间戳,这有助于发现协议问题。大多数逻辑分析仪都能够将总线信号解码为高级协议数据并显示ASCII数据。 | ||
- | ### 相关设计资源参考 | + | #### 相关设计资源参考 |
- | + | * 苏老师公众号文章 - [几种最常用的串行数据传输总线(1)- SPI](https://mp.weixin.qq.com/s/jWbvn-DGR9xrrMHKBqXleQ) | |
- | #### 相关技术文章 | + | * FPGA4FUN上关于如何使用SPI的文章及相应的参考代码 - [[https://www.fpga4fun.com/SPI.html|SPI接口]] |
- | + | * [[简易电压表设计|使用SPI总线的简易电压表设计]] | |
- | #### 相关FPGA开源代码 | + | * Lattice Semi官网提供的[SPI控制器模块](http://www.latticesemi.com/en/Products/DesignSoftwareAndIP/IntellectualProperty/ReferenceDesigns/ReferenceDesign03/SPIMasterController)使用说明,及参考IP下载 |
+ | * Lattice Semi官网提供的[SPI从设备控制器]( http://www.latticesemi.com/en/Products/DesignSoftwareAndIP/IntellectualProperty/ReferenceDesigns/ReferenceDesign03/SPISlaveController)使用说明,及参考IP下载 | ||
+ | * Lattice Semi官网的[用于嵌入式功能块中的SPI从外设](http://www.latticesemi.com/en/Products/DesignSoftwareAndIP/IntellectualProperty/ReferenceDesigns/ReferenceDesign03/SPISlavePeripheralusingEmbeddedFunctionBlock)使用说明,及参考IP下载 | ||
+ | * Lattice Semi官网的[SPI从设备到PWM的发生器](http://www.latticesemi.com/en/Products/DesignSoftwareAndIP/IntellectualProperty/ReferenceDesigns/ReferenceDesign03/SPISlavetoPWMGeneration)使用说明,及参考IP下载 |