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. JavaScript的闭包

      1. 什么是闭包 通俗地讲,JavaScript 中每个的函数都是一个闭包,但通常意义上嵌套的函数更能够体现出闭包的特性,请看下面这个例子: var generateClosure = functio ...

    2. SQL Server-聚焦聚集索引对非聚集索引的影响(四)

      前言 在学习SQL 2012基础教程过程中会时不时穿插其他内容来进行讲解,相信看过SQL Server 2012 T-SQL基础教程的童鞋知道前面写的所有内容并非都是摘抄书上内容,如若是这样那将没有任 ...

    3. Event事件

      妙味课堂-Event事件 1.焦点:当一个元素有焦点的时候,那么他就可以接受用户的输入(不是所有元素都能接受焦点) 给元素设置焦点的方式: 1.点击 2.tab 3.js 2.(例子:输入框提示文字) ...

    4. CSS3与页面布局学习总结(五)——Web Font与Sprite

      一.web font web font是应用在web中的一种字体技术,在CSS中使用font-face定义新的字体.先了解操作系统中的字体: a).安装好操作系统后,会默认安装一些字体,这些字体文件描 ...

    5. Oracle 11g DG配置简明版

      环境: 主库A机:在线生产环境,RHEL 6.4 + Oracle 11.2.0.3 备库B机:新增备机,RHEL 6.4 需求: 对生产环境最小影响前提下配置DG备库. 目录: 一.B机安装相同版本 ...

    6. Javascript图片预加载详解

      预加载图片是提高用户体验的一个很好方法.图片预先加载到浏览器中,访问者便可顺利地在你的网站上冲浪,并享受到极快的加载速度.这对图片画廊及图片占据很大比例的网站来说十分有利,它保证了图片快速.无缝地发布 ...

    7. Quartz.net 开源job调度框架(二)----定点执行

      在上一篇  Quartz.net 开源job调度框架(一) 中讲到了基本的使用以及配置job轮训数据执行 这种做法适用于对数据操作实时性要求不高的场景,在实际场景中还有一种比较常用的场景就是我们需要在 ...

    8. 『.NET Core CLI工具文档』(十一)dotnet-test

      说明:本文是个人翻译文章,由于个人水平有限,有不对的地方请大家帮忙更正. 原文:dotnet-test 翻译:dotnet-test 名称 dotnet-test - 使用配置的测试运行器运行单元测试 ...

    9. 控制反转、依赖注入、Unity容器

      控制反转原则 依赖注入 Install-Package Unity:https://www.nuget.org/packages/Unity/ Github:https://github.com/un ...

    10. Xcode7.1环境下上架iOS App到AppStore 流程② (Part 二)

      前言部分 part二部分主要讲解 iOS App IDs 的创建.概要文件的配置.以及概要文件安装的过程. 一.iOS App IDs 的创建 1)进入如图1所示界面点击右上角箭头所指的加号 进入iO ...