SPI协议

SPI协议网上资料比较多,但是也比较乱,当初在网上搜集的错误资料导致现在比较混乱。

SPI协议资料比较正规的是:

1.SPI的规约协议英文文档,例如《摩托罗拉spi协议规范》

2.许多IC的datasheet中关于SPI协议的介绍

下图摘自《摩托罗拉spi协议规范》:

  1. CPOL和CPHA的描述和定义



    注意画线部分的描述:第一个边沿锁存(或者叫采样),第二个边沿发送,注意,发送的是之前锁存好的。
  2. 时序图

  3. 工作模式的定义



    上图《Application Note MLX90363 Getting Started Guide》中关于SPI协议的相关介绍,可以得出SPI 模式0-3的定义

总结

  • CPHA=0,第一个跳变沿采样,第二个跳变沿传送。CPHA=1,则反之。
  • CPOL=0,表示空闲为低电平,CPOL=1,则反之
  • 模式 CPOL CPHA
    0 0 0
    1 0 1
    2 1 0
    3 1 1

    IO口模拟

    模拟的关键点主要是对采样和发送的理解,例如以模式1为例,根据前面介绍可以得知上升沿发送,下降沿采样。

    关键点:

    • 上升沿发送。需理解电平从低到高也是时间的。上升沿发送标准的是,在低电平上升至1/2高电平时进行发送,所以如果是软件模拟,必须是SCL=1后,不要有任何时延,立即拉低或拉高Data口。例图:1/2处发送
    • 下降沿采样。同理也是高电平下降至1/2除,不要有任何时延,立即读取Data口
    • 开始和结束时的设置,以Mode1为例,应该在CS有效之前拉低SCLK半个时钟,结束之后在CS无效之前拉低SCLK半个时钟。CS有效之后应延时半个时钟,CS无效之后也应延时半个时钟

    代码如下

    //-最小为10-
    #define N_Delay 20
    unsigned char SPI_Send(unsigned char Data)
    {
    int i = 0;
    unsigned char RecvByte = 0; COMM_CLK_L();
    SPI_Delay(N_Delay);
    COMM_CS_L();
    SPI_Delay(N_Delay); for (i = 0; i < 8; i++)
    {
    //-发送-
    COMM_CLK_H();
    if ((Data & 0x80) != 0)
    {
    COMM_MOSI_H();
    }
    else
    {
    COMM_MOSI_L();
    }
    Data <<= 1;
    SPI_Delay(N_Delay); //-接收-
    COMM_CLK_L();
    if (COMM_MISO_Get() != 0)
    {
    RecvByte |= 0x01 << (7 - i);
    }
    SPI_Delay(N_Delay); }
    COMM_CLK_L();
    SPI_Delay(N_Delay);
    COMM_CS_H();
    SPI_Delay(N_Delay);
    return RecvByte;
    }

    产生的波形如图:

    SPI协议及IO模拟的更多相关文章

    1. 模拟SPI协议时序

      SPI是串行外设接口总线,摩托罗拉公司开发的一种全双工,同步通信总线,有四线制和三线制. 在单片机系统应用中,单片机常常是被用来当做主机(MASTER),外围器件被当做从机(SLAVE). 所以,在以 ...

    2. 关于IO模拟时序(SPI)的注意事项

      原则:有硬件I2C.SPI时尽量用硬件操作,省去IO模拟繁琐的时序调试.但在内部资源不够时就要用IO模拟总线了. 关于短延时:模拟时序时是否需要延时要看MCU与device的相对速度.比如I2C如果4 ...

    3. FPGA作为从机与STM32进行SPI协议通信---Verilog实现 [转]

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

    4. [SPI]SPI协议详解

      转自:https://my.oschina.net/freeblues/blog/67400 1.SPI协议简介 1.1.SPI协议概括 SPI,是英语Serial Peripheral interf ...

    5. [SPI&I2C]I2C和SPI协议介绍

      IIC vs SPI 现今,在低端数字通信应用领域,我们随处可见IIC (Inter-Integrated Circuit) 和 SPI (Serial Peripheral Interface)的身 ...

    6. SPI协议及工作原理分析

      说明.文章摘自:SPI协议及其工作原理分析 http://blog.csdn.net/skyflying2012/article/details/11710801 一.概述. SPI, Serial ...

    7. SPI协议及其工作原理详解

      一.概述. SPI, Serial Perripheral Interface, 串行外围设备接口, 是 Motorola 公司推出的一种同步串行接口技术. SPI 总线在物理上是通过接在外围设备微控 ...

    8. SPI协议及其工作原理浅析

      转载自:http://bbs.chinaunix.net/thread-1916003-1-1.html一.概述. SPI, Serial Perripheral Interface, 串行外围设备接 ...

    9. I2C总线协议的软件模拟实现方法

      I2C总线协议的软件模拟实现方法 在上一篇博客中已经讲过I2C总线通信协议,本文讲述I2C总线协议的软件模拟实现方法. 1. 简述 所谓的I2C总线协议的软件模拟实现方法,就是用软件控制GPIO的输入 ...

    随机推荐

    1. 我为NET狂官方群福利贴:一些常用的工具:2016-08-01更新

      本次更新下载:http://pan.baidu.com/s/1skXzG4H 源码文档见官方群(以下为8.1更新内容) 逆天工具 CDN 资源库 国内 http://www.bootcdn.cn/ h ...

    2. Android 开发环境搭建以及工具(不断更新)

      学习android需要学习的编程知识 https://wiki.cyanogenmod.org/w/Doc:_Development_Resources 从http://source.android. ...

    3. Event Sourcing Pattern 事件源模式

      Use an append-only store to record the full series of events that describe actions taken on data in ...

    4. Java进击C#——语法之IO操作

      本章简言 上一章我们对线程同步进行讲解.了解如何去处理可能发生的脏数据.而本章就要讲有关于C#在读取IO文件的时候,常常用到的操作类.这一章的内容会比较少.但是笔者还是总结出来让读者们有一个学习的方向 ...

    5. GO语言之channel

      前言: 初识go语言不到半年,我是一次偶然的机会认识了golang这门语言,看到他简洁的语法风格和强大的语言特性,瞬间有了学习他的兴趣.我是很看好go这样的语言的,一方面因为他有谷歌主推,另一方面他确 ...

    6. scikit-learn一般实例之四:管道的使用:链接一个主成分分析和Logistic回归

      主成分分析(PCA)进行无监督的降维,而逻辑回归进行预测. 我们使用GridSearchCV来设置PCA的维度 # coding:utf-8 from pylab import * import nu ...

    7. webapi的学习资料

      猿教程_-webapi教程-WebAPI教程 猿教程_-webapi教程-Web API概述 猿教程_-webapi教程-新建Web Api项目 猿教程_-webapi教程-测试Web API 猿教程 ...

    8. R语言:常用统计检验

      统计检验是将抽样结果和抽样分布相对照而作出判断的工作.主要分5个步骤: 建立假设 求抽样分布 选择显著性水平和否定域 计算检验统计量 判定 -- 百度百科 假设检验(hypothesis test)亦 ...

    9. Maven自定义绑定插件目标:创建项目的源码jar

      <build> <plugins> <!-- 自定义绑定,创建项目的源码jar --> <plugin> <groupId>org.apac ...

    10. Eclipse安装Spring-tool-suite

      目录结构: // contents structure [-] 在Eclipse上安装Spring-tool-suite的方法有那些 如何查看自己的Eclipse版本 如何知道自己的Eclipse对应 ...