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 ERP系统 自动更新

      C/S架构的应用程序需要支持自动更新功能,当新版本程序发布后,正在运行的客户端能检测到新版本的程序,通知用户是否下载更新.工作以来参与过几个自动更新模块的设计与维护,撰文总结自动更新模块设计与实现. ...

    2. nginx+php 在windows下的简单配置安装

      开始前的准备 PHP安装包下载:http://windows.php.net/downloads/releases/php-5.5.14-Win32-VC11-x86.zip Nginx 下载地址:h ...

    3. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(16)-权限管理系统-漂亮的验证码

      系列目录 我们上一节建了数据库的表,但我发现很多东西还未完善起来,比如验证码,我们先做好验证码吧,验证码我们再熟悉不过了,为了防止恶意的登录,我们必须在登录页面加入验证码,下面我将分享一个验证码,这个 ...

    4. SQL Server-聚焦NOT EXISTS AND NOT IN性能分析(十五)

      前言 上一节我们分析了INNER JOIN和IN,对于不同场景其性能是不一样的,本节我们接着分析NOT EXISTS和NOT IN,简短的内容,深入的理解,Always to review the b ...

    5. Android开发之Activity的创建跳转及传值

      在Android系统的江湖中有四大组件:活动(Activity), 服务(Service), 广播接收器(Broadcast Reciver)和内容提供者(Content Provider).今天所介 ...

    6. nodejs中使用http请求返回值为html时乱码问题

      今天用nodejs进行http请求时返回的数据是一个html文件,然后我还是按照以前解析json数据的方法.果不其然报错了:SyntaxError: Unexpected token  in JSON ...

    7. SQL Server 执行计划利用统计信息对数据行的预估原理二(为什么复合索引列顺序会影响到执行计划对数据行的预估)

      本文出处:http://www.cnblogs.com/wy123/p/6008477.html 关于统计信息对数据行数做预估,之前写过对非相关列(单独或者单独的索引列)进行预估时候的算法,参考这里. ...

    8. BFC的形成条件和特性分析

      初学CSS时,我们学到很多有意思的CSS规则,比如外边距塌陷,还有浮动元素的一些特性等,其实这些规则背后都是BFC这个东西在控制,下面我们来看下BFC到底是什么. 什么是BFC BFC(Block f ...

    9. Linux资源管理-IO优先级

      前一篇博客介绍了利用 cgroup 来控制进程的 CPU和内存使用情况, 这次补上使用 cgroup 来控制进程的IO优先级的方法. 前提条件 如果想控制进程的IO优先级, 需要内核的支持, 内核编译 ...

    10. 深度|作为C端应用的代表,成功的陌生社交应用是什么样子的?

      作 为C端应用的代表,成功的陌生社交应用是什么样子的?活跃用户数?收益回报率?在实际社交产品设计中,我们一直为这些所谓的KPI左右,具体到设计行为 上:摆弄相应的界面元素,优化一下文案.页面流,但却很 ...