SPI是“Serial Peripheral Interface”的缩写,即“串行外设接口”,是摩托罗拉公司推出的一种串行接口通信协议。

接线的示意图:

SPI总线的原理可以借鉴I2C,两者不同之处有以下几点:

(1)I2C只有两根信号线,一条数据线SDA,一条时钟线SCL;SPI有四根信号线:MISO、MOSI、SCK和NSS。

  • MOSI:Master Output Slave Input,主设备输出/从设备输入。数据从主机输出到从机,主机发送数据。
  • MISO:Master Iutput Slave Output,主设备输入/从设备输出。数据由从机输出到主机,主机接收数据。
  • SCK:时钟信号线,用于通讯同步。
  • NSS:片选信号线,用于选择通讯的从设备,也可用CS(低电平有效)表示。每个从设备都有一条独立的NSS信号线,主机通过将某个设备的NSS线置低电平来选择与之通讯的从设备。所以SPI通讯以NSS线电平置低为起始信号,以NSS线电平被拉高为停止信号。

(2)I2C通信是半双工的,SPI通信是全双工的。即I2C不能收发数据同时进行,而SPI可以。

(3)I2C依靠地址来选取从设备,且每次收发都有应答信号;SPI依靠片选信号来选取从设备,没有应答信号,随便收发。

工作过程:

以从机的片选线NSS被拉低开始,每个时钟周期进行一次数据触发和采样,最后当NSS被拉高后,通信结束。

上图展示的工作模式是SCK上升沿触发,下降沿采样。SPI实际有四种工作方式,取决于“时钟极性CPOL”和“时钟相位CPHA”的状态,如下。

SPI四种工作模式的主要区别是总线空闲时SCK的状态数据采样时刻

如果CPOL被清0,则SCK在空闲状态保持低电平,反之被置1则保持高电平;如果CPHA位被清0,则在SCK每个时钟周期的第1个边沿(奇数边沿)进行数据位采样,反之被置1则在SCK每个时钟周期的第2个边沿(偶数边沿)采样。

下表展示了SPI四种工作模式的状态:

数据传输时从最高位开始,一位一位传输。


参考文章:

https://zhuanlan.zhihu.com/p/27376153

https://zhuanlan.zhihu.com/p/27462822

https://zhuanlan.zhihu.com/p/33356830

SPI通信基础学习的更多相关文章

  1. IP通信基础学习第一周

    在IP方向上,IP通信基础是学习其他诸如:数字程教控交换技术与应用.IPV6技术与应用.SDH传输技术与应用等课程的基础. 学习IP通信基础,对学生而言至少可以拿学分,不仅有利于以后的学习,还有机会从 ...

  2. USART波特率 vs SPI速率--学习笔记

    本篇文章将与大家探讨USART波特率 vs SPI速率.这里提出一个问题,为什么USART的波特率是内核时钟的1/8或者1/16,而SPI最快的频率可以是内核时钟的1/2. 请大家带着这个问题来阅读本 ...

  3. 基于TQ2440的SPI驱动学习(OLED)

    平台简介 开发板:TQ2440 (NandFlash:256M  内存:64M) u-boot版本:u-boot-2015.04 内核版本:Linux-3.14 作者:彭东林 邮箱:pengdongl ...

  4. 第一周 IP通信基础学习回顾

    这周的课程首先让我们学习了计算机网络概述,了解计算机网络的定义和功能分别是:资源共享,信息传输与集中处理,负载均衡与分布处理,综合信息服务.同时也对计算机网络的演进,计算机网络的分类,计算机网络的性能 ...

  5. IP通信基础学习第二周

    此周的课程学习应该算是我对此科目真正学校生涯的开始吧,尽管我对该科目仍感到很陌生. 课程一开头,老师就给我们简单的介绍了网络的定义.发展及其分类,重点讲了网络拓扑结构及其在局域网上具体的分层情况.该部 ...

  6. Java SPI机制学习笔记

    最近在阅读框架源代码时,常常看到 SPI 的子包, 忍不住查了下: Service Provider Interface : 服务提供接口. JavaSPI 实际上是“基于接口的编程+策略模式+配置文 ...

  7. SPI的学习和ESP8266的SPI通讯测试

    SPI简介: SPI是串行外设接口(Serial Peripheral Interface)的缩写.SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时 ...

  8. IP通信基础学习第九周

    H3C单臂路由: 交换机的所有接口是在同一个广播域 用vlan进行隔离广播域 创建vlan,display可查看是否创建成功 进入接口是Interface,配置接口Port 先测试相同的vlan ,可 ...

  9. IP通信基础学习第八周

    安装完华三模拟器,拖多台设备到工作区,全部启动及配置,建立好拓扑图,之后启动命令行终端. 配置登录用户,口令的指令有: <H3C>                       //用户直行 ...

随机推荐

  1. Sql 注入----学习笔记2

    转载自:http://blog.51cto.com/quiterr/1699964 sql注入 sql注入98年第一次出现在<phrack>54期上. 注入攻击有两个关键条件,第一是用户能 ...

  2. Oracle数据库的文件以及Oracle体系架构

    第一部分.Oracle数据库的文件 1.参数文件:控制实例的行为的参数的集合 参数文件的作用 设定数据库的限制 设置用户或者进程的限制 设定数据库资源的限制 调整系统的性能 主要的参数文件 SGA_T ...

  3. android MVVM(1)用LiveData关联VM 与 V

    1.官方文档 MVVM 官方文档: https://developer.android.com/jetpack/docs/guide ViewModel 文档: https://developer.a ...

  4. Cython编译独立的可执行文件

    cython --embed -o hello.c hello.pygcc hello.c -o hello -I /Library/Frameworks/Python.framework/Versi ...

  5. 填坑 | .NET core项目远程部署后连接数据库 mysql表大小写敏感问题

    欣喜成功部署了项目之后又遭遇重创hhh,swagger调试数据库,报错 MySql.Data.MySqlClient.MySqlException(0x80004005) 我猜是大小写的问题,一查果然 ...

  6. 深入了解Redis【二】对象及数据结构综述

    引言 Redis中每个键值对都是由对象组成: 键总是一个字符串对象(string) 值可以是字符串对象(string).列表对象(list).哈希对象(hash).集合对象(set).有序集合对象(z ...

  7. 部署一套完整的Kubernetes高可用集群(二进制,最新版v1.18)下

    七.高可用架构(扩容多Master架构) Kubernetes作为容器集群系统,通过健康检查+重启策略实现了Pod故障自我修复能力,通过调度算法实现将Pod分布式部署,并保持预期副本数,根据Node失 ...

  8. .NET Core原理(不知道怎么命名合适)

    作者:cmliu:.NET Core启动都做了什么 .NET Core默认启动时的流程,您可以将图片另存为,在本地放大查看 .NET Core默认模板都做了些什么,首先贴出模板里面的Program.c ...

  9. shell字体颜色应用

    输出特效格式控制: \033[0m  关闭所有属性   \033[1m   设置高亮度   \03[4m   下划线   \033[5m   闪烁   \033[7m   反显   \033[8m   ...

  10. unittest上下关联关系的接口——继承测试用例类

    如果有上下关联,可以用到一个类继承测试用例类(里面的测试用例函数名不要带test)的方法去调用用例, 注意:如果放到同一个类会出现用例重复执行的情况 ,如果测试用例的函数带了test,一旦被调用,会被 ...