spi总线概述1(spi-summary)

 什么是SPI?

------------

“串行外设接口”(SPI)是一个同步的四线串行链接用于微控制器连接传感器,内存和外设的。这是一个简单的“时点”的标准,获取一个标准化结构也不复杂。 SPI使用主/从配置。

 

三个信号线外加一个时钟(SCK,往往在10 MHz),并行数据线“主机输出,从机输入”(MOSI)或“主机输入,从机输出”(MISO)。数据交换有四种时钟模式:模式0和模式3最常用的。每个时钟周期输入和输出数据的数据;有一个数据位转移时时钟不会循环。并非所有的数据位都是这样,不是每个协议使用的全双工功能。

 

SPI的主机使用四线“chipselect”线激活一个指定的SPI从机设备,因此这三个信号线,可并行连接到几个芯片。所有的SPI从机都支持“chip select”;他们通常低电平有效,标志nCSx为从机'x'(如nCS0)。有些设备有其他的信号,通常包括一个主机中断。

 

不同于USB或SMBus串行总线,即使是低级别的SPI从机协议功能通常不能在供应商之通用。(除SPI存储器芯片的外)。

 

   -SPI的可用于请求/响应式设备协议,例如触摸屏传感器和内存芯片。

 

   - 它也可以被用来在某个方向的数据流(半双工),也可在同一时间使用(全双工)。

 

   - 某些设备可能使用8位字。其他可能不同的字长,如12位或20位数字采样流。

 

   - 一个字通常是大端(MSB)发送,但有时也会用小端发送(LSB)。

 

   - 有时SPI是用于菊花链(daisy-chain)设备,如移位寄存器。

 

以同样的方式,SPI从机将很少的支持任何一种自动发现/枚举协议。一个给定的SPI主机的从设备访问树通常会使用配置表手动设置。

 

SPI是类似四线协议所使用的唯一名称,大多数控制器都可以处理“MicroWire”(认为它是处理半双工SPI,请求/响应协议),SSP(“同步串行协议“),PSP(”可编程串行协议“),及其他相关协议。

 

有些芯片把MOSI和MISO信号线组合起来,限制自己硬件在半双工水平工作。其实一些SPI芯片有信号模式用作捆绑的选项。这些可以为SPI使用相同的编程接口,当然,他们不会处理全双工传输。你可能会发现有些芯片描述使用“三线”信号:SCK,data,nCSx。(数据线有时被称作MOMI或SISO。)

 

微控制器通常支持SPI的主机和从机双方协议。本文档(和Linux)目前只支持主机方SPI的相互作用。

 

 

谁在使用它?什么样系统?

---------------------------------------

Linux开发人员使用SPI很可能为嵌入式系统板编写设备驱动。 SPI用来控制外部芯片,它也是一个支持MMC或SD记忆卡的协议。(旧的“DataFlash”卡,早期MMC,但使用相同的连接器和卡的形状,只支持SPI)。一些PC硬件的BIOS代码使用SPI闪存存储。

 

SPI从芯片用于传感器和编解码器的数字/模拟转换器芯片,内存,外围设备,如USB控制器或以太网适配器等等。

 

大多数系统采用SPI整合主板上的一些设备。

一些SPI链接作为扩展连接,在没有专用SPI控制器的情况下, GPIO管脚可以用来创建一个低速“bitbanging”适配器。很少有系统支持“hotplug”的SPI;主要的原因是使用SPI的目的是低成本和易操作,如果动态重新配置很重要重要,USB接口往往会是一个更适当的低引脚数的外设总线。

 

许多微控制器使用SPI模式可以运行Linux集成一个或多个I / O的接口。由于SPI支持,他们可以使用MMC或SD卡无需特殊用途的MMC / SD / SDIO控制器卡。

 

我很困惑。什么是这四个SPI时钟模式?

-----------------------------------------------------

它很容易被迷惑在这里,制造商的文档你会发现不一定是有用的。四种模式结合了两种模式位:

 

  -CPOL位表示初始时钟极性。 CPOL = 0表示时钟初始为低电平,所以开始的第一(leading)边缘是上升沿,第二边缘(trailing)是下降沿。 CPOL = 1时的时钟启动为高电平,所以第一(leading)的边缘是下降沿。

 

  -CPHA的指示用于采样数据的时钟相位; CPHA = 0时表示边沿超前,CPHA = 1表示边沿滞后。

 

   由于信号在采样前需要稳定下来,CPHA = 0时意味着其数据写入在第一个时钟边沿之前半个时钟。片选将使其可用。

 

芯片手册不会总是说:“使用SPI模式X”,但其时序图会指明CPOL和CPHA模式。

 

在SPI模式号,CPOL位是高位和CPHA低位。所以,当芯片的时序图显示的时钟

起始低(CPOL = 0时),在下降沿数据稳定采样(CPHA = 1),这是SPI模式1。

 

请注意,片选一但有效时钟模式就会相关。所以主机必须在选择一个从机前使时钟无效。当片选有效时,从机可以通过时钟电平告诉采样选择极性。这就是为什么许多设备例如支持模式0和3:他们不关心极性,和总是在输入/输出时钟数据在时钟上升沿。

 

 


这些驱动程序编程接口如何工作?

------------------------------------------------

<linux/spi/spi.h>头文件包括kerneldoc,你一定要读内核API文档的本章。这仅仅是一个概述,在了解这些细节之前使您得到大概的了解。

 

SPI的请求总是进入I / O队列。一个给定的SPI设备的请求总是在FIFO顺序执行,通过回调并异步完成。这些调用也有一些简单的同步封装,包括一些常见的传输类型,例如写一个命令然后,然后读取其响应。

 

有两种类型的SPI驱动程序,这里所涉及的:

 

  控制器的驱动程序...控制器可以内置在系统芯片,并经常支持Master和Slave的角色。

这些驱动触摸硬件寄存器,可以使用DMA。或者也可以的PIO bitbangers,只是需要的GPIO引脚。

 

  协议驱动程序...这些传递消息一个SPI连接的主机和从机通过控制驱动通讯传递消息。

 

因此,例如一个协议驱动程序,可能让MTD层导出数据到SPI flash上的文件系统进行存储;

其他也开一用来控制音频接口,目前触摸屏传感器作为输入接口,或监测的工业加工过程中的温度和电压水平。和那些可能都共享相同的控制器驱动程序。

 

“struct spi_device”封装是主机编程接口。在写这篇文章时,Linux有没有从机编程接口。

 

SPI编程接口有一个最低限度的核心,侧重于使用驱动模型连接控制器和协议驱动程序,使用设备表板特定的初始化代码。 SPI显示在sysfs中出现的地点:

 

   /sys/devices/.../CTLR ...对于一个给定的SPI控制器的物理节点

 

   /sys/devices/.../CTLR/spiB.C ... spi_device在总线“B”,片选C,通过CTLR访问。

 

   /sys/bus/spi/devices/spiB.C ...符号链接到该物理.../CTLR/spiB.C device设备

 

   /sys/devices/.../CTLR/spiB.C/modalias...设备所使用的确定驱动(forhotplug/coldplug)

 

   /sys/bus/spi/drivers/D ...一个或多个spi*.*设备的驱动程序

 

   /sys/class/spi_master/spiB ...符号链接(或实际设备节点)到一个逻辑节点,可容纳控制器管理总线“B”的类相关状态的。所有spiB.*设备使用SCLK,MOSI和MISO共用一个物理SPI总线段。

 

注意控制器的类状态的实际位置取决于您是否启用CONFIG_SYSFS_DEPRECATED。在这个时候,只有特定类状态是总线号("B"in "spiB"),所以那些/sys/class的条目只有快速识别总线时有用。


你可能感兴趣的:(编程,linux,工作,存储,文档,deprecated)