SPI(Serial Peripheral interface)是由摩托罗拉公司定义的一种串行外围设备接口,是一种高速、全双工、同步的通信总线,只需要四根信号线即可,节约引脚,同时有利于PCB的布局。正是出于这种简单易用的特性,现在越来越多的芯片集成了SPI通信协议,如FLASH、SD卡,AD转换器等。SPI的通信原理比较简单,它以主从方式工作,通常有一个主设备和一个或多个从设备。一般其有 4 根线,片选线(CS)、同步时钟线(SCLK)、输入数据线(MOSI)和输出数据线(MISO)。

一、通信模式
  一般而言,SPI通信有4种不同的模式,不同的从设备在出厂时被厂家配置为其中一种模式,模式是不允许用户修改的。主设备和从设备必须在同一模式下进行通信,否则数据会接收错误。SPI的通信模式是由CPOL(时钟极性)和CPHA(时钟相位)来决定的,四种通信模式如下:
模式0:CPOL = , CPHA = ;
模式1:CPOL = , CPHA = ;
模式2:CPOL = , CPHA = ;
模式3:CPOL = , CPHA = ;

1.CPOL时钟极性

  CPOL信号控制着SPI_CLK的时钟极性,时钟极性变化规律如下:

CPOL = :SPI_CLK空闲时为高,第1个时钟沿为下降沿
CPOL = :SPI_CLK空闲时为低,第1个时钟沿为上升沿

2.CPHA时钟相位

  CPHA信号控制数据与时钟的对齐模式,其不同模式下的时序图如下所示:

  由上图可知,当CPHA = 1时,时钟的第一个变化沿(上升沿或者下降沿)数据开始改变,那么也就意味着时钟的第2个变化沿(与第一个变化沿相反)锁存数据;当CPHA = 0时,数据在时钟的第一个变化沿之前就已经改变,并且保持稳定,也就意味着在时钟的第一个变化沿锁存数据。

二、总结

参考资料:

[1]亚德诺半导体.一文读懂4线SPI

[2]威三学院FPGA教程

[3]正点原子FPGA教程

协议——SPI的更多相关文章

  1. SPI协议及IO模拟

    SPI协议 SPI协议网上资料比较多,但是也比较乱,当初在网上搜集的错误资料导致现在比较混乱. SPI协议资料比较正规的是: 1.SPI的规约协议英文文档,例如<摩托罗拉spi协议规范> ...

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

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

  3. SPI、IIC、IIS、UART、CAN、SDIO、GPIO、USB总线协议

    SPI.IIC.IIS.UART.CAN.SDIO.GPIO总线协议 SPI(Serial Peripheral Interface:串行外设接口)SPI总线由三条信号线组成:串行时钟(SCLK).串 ...

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

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

  5. FPGA的SPI从机模块实现

    一. SPI总线协议         SPI(Serial Peripheral Interface)接口,中文为串行外设接口.它只需要3根线或4根线即可完成通信工作(这里讨论4根线的情况).     ...

  6. stm32串行设备接口SPI控制max31865

    本人是刚入行的嵌入式,之前也没有多少项目经验,故在公司的这几个月里,可谓是如履薄冰,对于公司不同项目使用的不同的设备之多,数据手册之繁杂,让我不禁望洋兴叹,故而不愿意放弃周末这大好的自我提升时间,努力 ...

  7. (stm32学习总结)—spi基本原理

    参考:spi详解   spi协议 SPI的基本介绍 SPI的简介 SPI,是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口,是Motorola首先在其M ...

  8. IPSEC实现

    IPSEC介绍与实现 一.介绍 IPSec 协议不是一个单独的协议,它给出了应用于IP层上网络数据安全的一整套体系结构,包括网络认证协议 Authentication Header(AH).封装安全载 ...

  9. SD卡

    一.SD卡接口 SD 卡的接口可以支持两种操作模式:主机系统可以选择以上其中任一模式, SD 卡模式允许 4 线的高速数据传输. SPI 模式允许简单通用的 SPI 通道接口, 这种模式相对于 SD ...

随机推荐

  1. apisix 基于openresty 的api 网关

    apisix 是由openresty 团队开发并开源的微服务api gateway,还不错,官方文档也比较全,同时这个也是一个不错的学习openresty 的项目 以下为来自官方的架构图 插件加载 插 ...

  2. globing通配符

    匹配标点符号 linux中只要不含有/的文件就可以生成,所以标点符号也是符合要求的 匹配空白 使用\对空白进行转义,这样就可以生成包含空格名称的文件 但是不推荐这样用,容易让别人在使用的时候造成误解 ...

  3. 在Windows环境下搭建Snort+BASE入侵检测系统

    操作系统: Windows 7 (service pack 1) 所需软件: 虚拟机:VirtualBox 网络数据包截取驱动程序:WinPcap 4.1.3 (WinPcap_4_1_3.exe) ...

  4. 微信小程序之确认框实现

    效果图如下: 核心代码如下: delType:function(e){ var typeId = e.currentTarget.dataset['id']; console.log("de ...

  5. 菜鸟教程C++(一)

    一.C++基本语法 C++程序可以定义为对象的集合,这些对象可以通过调用彼此的方法进行交互. 对象:对象具有状态和行为.例如:一只狗的状态:颜色.名称.品种等,行为:摇动.叫唤等.对象是类的实例. 类 ...

  6. 微信小程序全局设置分享内容

    微信小程序每个页面都可以在onShareAppMessage中设置分享内容,如果想要全局设置成一样的分享内容如何设置呢? 在app.js中新增以下方法: //重写分享方法 overShare: fun ...

  7. Research Guide for Video Frame Interpolation with Deep Learning

    Research Guide for Video Frame Interpolation with Deep Learning This blog is from: https://heartbeat ...

  8. join方法

    用join拼接两个字符串 a='hehe' b='wawa' print(''.join((a,b))) #'hehewawa' 用join拼接列表中的字符串 l=['a''b','c','d'] p ...

  9. 使用expect快速登录线上机器

    背景: 公司登陆线上服务器一般都要经过跳板机才能登陆,过程比较麻烦,如果要频繁登陆某个机器而且机器名不好记很费劲,使用expect自动登陆会方便很多 实现: 使用expect脚本自动登陆: #!/us ...

  10. 本地jar包上传docker容器

    先安装docker的注册服务器: [root@VM_0_7_centos ~]# docker run -d -p : --restart=always --name registry2 regist ...