摘抄至: http://blog.csdn.net/skyflying2012/article/details/11710801

  • 概述:

    SPI, Serial Perripheral Interface , 串行外部接口,是摩托罗拉公司提出的一种同步串行接口技术。
    SPI 在物理上连接了外围微控制器设备(PICmicro)上面的微控制单元(MCU)上面一个叫作同步串行端口的模块来实现的,他运行MCU以全双工的同步串行方式,与各种外围设备进行高速数据通信。

  • 特点

    • 通过主从模式控制。(master-slave)

      SPI 规定了两个SPI设备必须由主设备(master)来控制从设备(slave),一个主设备可以通过提供clock以及对slave进行片选(slave select)来控制多个SPI设备,SPI协议还规定,slave设备的时钟通过master SPICK引脚提供给 slave设备,slave自身不能产生时钟,没有clock salve不能正常工作。

    • 采用同步方式(synchronous)传输数据。

      master 设备会根据将要交换的数据产生对应的时钟脉冲(clock pulse),时钟脉冲组成时钟信号(clock signal)
      时钟信号通过时钟极性(CPOL)和时钟相应(CPHA)控制两个SPI 设备间何时数据交换及何时对接收到的数据进行采样,来保证数据在两个设备间是同步传输的。

    • 数据交换(data exchanges)

      SPI 设备间的数据传输之所以叫数据交换而不是数据传输,是因为 SPI 协议规定一个 SPI 设备不能再数据通信的时候仅仅充当一个 transmitter 或者是 receiver,在每个时钟周期内,SPI设备都会发送 1bit大小的数据,相当于该设备有1bit的数据被交换了。

    • 一个slave设备要想能够接收到 master 发送给来的控制信号,必须在此之前能够被 master 进行访问, 所以, master 设备必须先通过 CS Pin 对slave 设备进行片选,把要访问的 slave 都片选上。

    • 在数据的传输过程中,每次接收到的数据必须在下一次数据传输之前被采样,如果之前接收的数据没有被采样,那么这些 已经收到到的数据可能被丢弃,导致 SPI 模块最终失效,因此,在程序中,一般都会在 SPI 传输完数据之后,去读取 SPI 设备里面的数据,即使这些数据是在我们程序中是没有用的。

  • 工作机制

    • 概述:

    • 上图只是对 SPI 设备间通信的一个简单的描述,几个模块名称详解如下:
    • SSPBUF Synchronous Serial Port Buffer, 泛指 SPI 设备店里面的内部缓冲区,一般在物理上以 FIFO 的形式存在,保存传输过程中的临时数据。
    • SSPSR, Synchronous Serial Port Register, 指的是 SPI 设备里面的移位寄存器(shift register),j 他的作用是根据设置好的数据位宽(bit-width)把数据移入或者移出 SSPBUF.
    • Controller , 指的是 SPI 设备里面的控制寄存器,控制通过配置他们来配置SPI 总线的传输模式。
    • 通常情况,我们只需要对上面的四个引脚进行编程即可控制整个 SPI 设备间的数据通信。
    • SCK : Serial Clock , master 往 slave 传输时钟信号,控制交换的时机和速率。
    • SS/CS, slave select/ chip select 片选信号, 用于master 片选 slave设备,被片选的slave设备能与master进行通信。
    • SDI / SDO , master数据输入, master数据输出。

    • 时序分析


      上图通过 master 设备与 slave 设备之间交换 1 BYTE 数据来说明 SPI 协议的工作机制。

    • CPOL : 时钟极性,表示 SPI 空闲时,时钟信号是高电平还是低电平,如果是 CPOL 设为 1, 那么空闲时 SCK 的时间时钟信号为高, 当 CPOL 被设为 0 时正好相反。
    • CPHA : 时钟相应,若是 CPHA 被设置为1, 说明从空闲电平变化开始,从 0 开始计算,第 CPHA 个电平变化的时候开始采样,如果 CPHA = 0 , 说明空闲电平变为非空电平的那个沿就开始采样,如果为1 , 说明是非空闲电平变为空闲电平的那个沿开始采样。如下图所示


      参考: http://blog.chinaunix.net/uid-20620288-id-3164384.html
    • 上图的 Mode 1, 1, 说明 CPOL = 1, CPHA = 1, 说明空闲时 SCK 信号为高电平, 低电平非空闲 第 1 次电平发生变化时开始采样。
    • SSPSR

    • SSPSR 是 SPI 设备内的移位寄存器(shift register),他主要的作用是根据SPI 的时钟信号状态,往SSPBUF 里移入或者移出数据
    • 每次移动的数据由 BUS-width 以及 channel-width 所决定
    • BUS-width 的作用是指定地址总线到 master设备之间数据传输的单位。
    • channel-width 的作用是指定 master 与 slave 设备之间传输的单位。

    • SSPBUF

    • 我们知道,在每个时钟周期内,master 与slave 之间交换的数据其实都是 SPI 内部移位寄存器从SSPBUF 里面拷贝的,我们可以通过往 SSPBUF 对应的寄存器读写数据,间接地去控制SPI 设备内部的SSPBUF。

    • Controller

    • master 设备里面的controller 主要通过时钟信号(clock signal)以及片选信号来控制 slave 设备,salve 设备会一直等待,直到接收到 master 设备发过来的片选信号,然后根据时钟信号来工作。

spi 总线协议记录的更多相关文章

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

    SPI,是英语Serial Peripheral Interface的缩写,顾名思义就是串行外围设备接口.SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚 ...

  2. SPI总线协议及SPI时序图详解【转】

    转自:https://www.cnblogs.com/adylee/p/5399742.html SPI,是英语Serial Peripheral Interface的缩写,顾名思义就是串行外围设备接 ...

  3. 【转】SPI总线协议

    SPI总线协议 By Xiaomin | April 17, 2016| 技术 概述 SPI(Serial Peripheral Interface)总线是主要应用于嵌入式系统内部通信的串行同步传输总 ...

  4. 关于I2C和SPI总线协议【转】

    关于I2C和SPI总线协议 IICvs SPI 现今,在低端数字通信应用领域,我们随处可见IIC (Inter-Integrated Circuit) 和 SPI (Serial Peripheral ...

  5. SPI总线协议理解

    1.什么是SPI: 是摩托罗拉公司设计的一种全双工通信.高速的.同步的串行外部设备通信协议. 2.SPI作用: 用于设备之间的数据交互. 3.SPI由什么构成: 1)MOSI:主设备输出从设备输入线, ...

  6. SPI总线协议介绍

    http://blog.csdn.net/ce123_zhouwei/article/details/6897293 https://www.cnblogs.com/yangguang-it/p/71 ...

  7. SPI、I2C、UART三种串行总线协议的区别

    第一个区别当然是名字: SPI(Serial Peripheral Interface:串行外设接口); I2C(INTER IC BUS) UART(Universal Asynchronous R ...

  8. SPI、I2C、UART三种串行总线协议的区别和SPI接口介绍(转)

    SPI.I2C.UART三种串行总线协议的区别 第一个区别当然是名字: SPI(Serial Peripheral Interface:串行外设接口); I2C(INTER IC BUS) UART( ...

  9. MSP430单片机的两种SPI总线实现方式

    MSP430单片机上的SPI总线的实现方式分为两种:硬件实现和软件实现. 二者的抽象层次不同,硬件实现方式下程序员只需要完成总线协议的寄存器层,即一字节(char,8位二进制)数据,而软件实现方式下程 ...

随机推荐

  1. 【TP3.2】跨库操作和跨域操作

    一.跨库操作:(同一服务器,不同的数据库) 假设UserModel对应的数据表在数据库user下面,而InfoModel对应的数据表在数据库info下面,那么我们只需要进行下面的设置即可. class ...

  2. 面试题 Comparable、Comparator 比较

    Comparable 用作默认的比较方式 Comparator 用作自定义的比较方式,当默认的比较方式不适用时或者没有提供默认的比较方式,使用Comparator就非常有用. 像Arrays和Coll ...

  3. 戴尔大力宣传Ubuntu 对比与Windows的差异

    2010-06-18 10:58:36   11175 人阅读   作者:萧萧 编辑:萧萧[爆料]  评论(46)   戴尔近日上线了一个新的网页,对比Linux开源系统(主要是Ubuntu)与Win ...

  4. 2014年15款新评定的最佳PHP框架

    通常,框架都会被认为是帮助开发者快速设计和开发动态网站的软件应用.每个月都有极大数量的新发布的 PHP 框架,使网站开发更简单更高效. 如果你是位 PHP 开发者,正在寻找当前最好的一些 PHP 框架 ...

  5. 两个变量交换的四种方法(Java) 七种方法(JS)

    两个变量交换的四种方法(Java)   对于两种变量的交换,我发现四种方法,下面我用Java来演示一下. 1.利用第三个变量交换数值,简单的方法. (代码演示一下) 1 class TestEV 2 ...

  6. 转 web前端性能分析--原理篇

    转自http://blog.csdn.net/five3/article/details/7686715 web前端性能: 即是web用户在访问一个页面时所要花费的时间总和.即一个完全意义上的用户响应 ...

  7. Accounting_会计电算化工作指南

    会计电算化工作指南 会计电算化实施的内容目标及原则 企业会计电算化的实施,也就是企业建立会计电算化的整个过程,是一项复杂的系统工程.在整个系统的实施过程中,包括会计电算化工作的规划,会计信息的建立与管 ...

  8. Bitmap具体解释与Bitmap的内存优化

    感觉这里的排版看着更舒服些 Bitmap具体解释与Bitmap的内存优化 一.Bitmap: Bitmap是Android系统中的图像处理的最重要类之中的一个.用它能够获取图像文件信息,进行图像剪切. ...

  9. FreeSWITCH检测DTMF数据的方法

    一.RFC2833 1. 介绍: RFC2833为带内检测方式,通过RTP传输,由特殊的rtpPayloadType即TeleponeEvent来标示RFC2833数据包.同一个DTMF按键通常会对应 ...

  10. java web中jsp常用标签

    在jsp页面开发过程中,经常需要使用JSTL(Java Server Pages Standard Tag Library)标签开开发页面,是看起来更加的规整舒服. JSTL主要提供了5大类标签库: ...