目录

概述

电气连接

接口定义

连接方式

通信协议

片选信号

时钟

时钟极性(Clock Polanrity)

时钟相位(Clock Phase)

综述

时序

注意


概述

SPI是一个同步全双工串行通信协议

主从机双方共用一个时钟(由主机产生)

在同一时刻硬件可以允许双向传输(虽然在SPI协议中没有同一时刻双向传输)

SPI的速度快于常见的I2C与USART,一般能达到几MHz

比起CAN和USART来,其传播距离较短

电气连接

接口定义

名称

功能

GND

接地

MOSI

主机发送,从机接收

MISO

主机接收,从机发送

CLK

时钟线

CS1(NSS1)

片选线

……

多个设备时的片选线

不同厂商的接口名称可能有不同,详情看产品的技术手册

连接方式

一般情况使用多片选信号(多NSS)模式,连接如图

通信协议

片选信号

这个信号是由主机发送的一个用于选择不同设备的信号,一般情况为低电平有效(选中了该设备)

在一次通信过程中,一般只有一个设备被选中

只有被选中的设备才会接受主机发送出的数据信号,并且根据自己的功能进行回传信息

对于单片机来说,这个信号一般使用推挽(浮空)输出的模式

有些设备使用开漏上拉输出会出现问题,咱也不知道为啥

时钟

时钟极性(Clock Polanrity)

可以这样理解,默认状态是高电平还是低电平(低电平有效还是高电平有效)

默认状态是低电平

默认状态是高电平

时钟相位(Clock Phase)

可以这样理解,在第几个边沿进行采集(这里指的是一个时钟信号的边沿),一个时钟信号会出现两个边沿

第一个边沿(如图在橘线处采集信号)

第二个边沿(如图在橘线处采集信号)

综述

时序

在片选信号选中下,每一个时钟信号触发(详见上文),根据MISO和MOSI的电平高低来判断数据

先发送高位再发送低位(可以选择先低后高)

时钟信号的箭头表示一次采集

本图中以黄线为界出现两次信号传输

第一次:主机向从机发送的数据为(0xF0)(0b11110000),从机向主机发送的信号为(0x00)(0b00000000)

第二次:主机向从机发送的数据为(0x00)(0b00000000),从机向主机发送的信号为0x7C(0b0111 1100)

注意

SPI每一次信号传输(通信周期)中都需要主机接受和发送一次

(可以将从器件当做一个数据会自动修改的移位寄存器)

也就是说主机接受数据时也要发送数据(必须发送),发送数据时也会接受数据(可能接收的数据无意义)

往往与器件通信时是主机先发送命令(此时收到的信号是无意义的),从机再根据命令更改寄存器的值,在下一个通信周期时在发送给主机(主机也需要发送某些数据(可能无意义))

【基础知识】SPI通信协议相关推荐

  1. 通信协议原理及应用CAN基础知识

    通信协议原理及应用&CAN基础知识 通信协议原理及应用 通信分类 数据传输方式 串行通信 并行通信 接收端&发送端时钟频率的异同 同步通信 异步通信 通信双方的分工和信号传输方向 单工 ...

  2. 【STM32H7教程】第72章 STM32H7的SPI总线基础知识和HAL库API

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第72章       STM32H7的SPI总线基础知识和HA ...

  3. PX4模块设计之四十一:I2C/SPI Bus Instance基础知识

    PX4模块设计之四十一:I2C/SPI Bus Instance基础知识 1. 基础知识 2. 基础类和定义 2.1 ListNode类 2.2 List类 2.3 BusCLIArguments类 ...

  4. 嵌入式开发基础—SPI通信协议解析

    嵌入式开发基础-SPI通信协议解析 1 通信方式(主从通信) 1.1 什么是主从通信 1.2 主从通信如何实现 1.2.1 相关控制引脚介绍 1.2.2 如何通过控制引脚实现主从通信 2 通信数据交换 ...

  5. SPI接口的FPGA实现(一)——SPI接口的相关基础知识

    SPI系列文章主要介绍SPI接口的一些基础知识,并用DAC芯片81416的配置为例来具体说明SPI接口的具体FPGA实现. 一.SPI的基础 SPI的全称是Serial Peripheral Inte ...

  6. 嵌入式硬件基础知识汇总<附带与硬件密切相关的软件介绍>

    嵌入式硬件基础 1,存储器 1.1 概念 1.2,存储器结构模型 1.3,存储器性能指标 1.4,嵌入式存储器类型 1.4.1,只读存储器 1.4.2,随机存储器 1.4.3,双端口RAM 1.4.4 ...

  7. UART接口的FPGA实现(一)——UART接口的相关基础知识

    UART系列文章先介绍UART的基础知识,然后自己动手写Verilog代码实现这个接口并进行测试,最后介绍Xilinx的AXI-uartlite IP核.本系列文章编写时参考了乔庐峰老师编写的Veri ...

  8. 硬件基础:嵌入式物联网系统软硬件基础知识大全

    本文主要介绍嵌入式系统的基础知识,涉及嵌入式软件和硬件的方方面面,希望对各位有帮助. 嵌入式系统基础 1.嵌入式系统的定义 (1)定义:以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功 ...

  9. 嵌入式系统设计师考试笔记之嵌入式系统基础知识

    以下是转帖一位网友的嵌考笔记 嵌入式系统设计师考试笔记之嵌入式系统基础知识 欧浩源(ohy3686@qq.com) 20080818 一.引言 自<嵌入式系统设计师考试复习笔记之存储管理篇> ...

  10. 计算机语言之java基础知识一

    在家已经待了一个多星期了,最近学到的东西一直没有梳理,这次变梳理边分享出来,说是分享其实就是搬运一下. Java 基础知识 基本数据类型 问:7 种基本数据类型:整型.浮点型.布尔型.字符型? 答:四 ...

最新文章

  1. 「前端面试题系列7」Javascript 中的事件机制(从原生到框架)
  2. 关于VMware Linux 虚拟机忘记root 密码找回
  3. Python中关于XML-RPC原理
  4. Cocos 技术派:实时竞技小游戏技术实现分享
  5. ie6 select出现在浮动层上面的解决方法
  6. 程序随笔——C++实现的一个线程池
  7. Java API下载和查阅方法
  8. [开源]快速构建文件下载,支持文件加密,自定义限速
  9. HttpModuel
  10. Windows下Python的pd.read_excel()报错
  11. c语言burg算法,用Burg算法提升空间调制傅里叶光谱仪分辨率与定阶方法
  12. CF gym101933 K King's Colors——二项式反演
  13. the problem was occurred when start ADT
  14. 佳能g2810提示5b00_佳能G2810 3800系列出现5B00如何解决
  15. html css 美化模板,通用css样式,全局css样式,css样式模板,
  16. 图像去噪(阿尔法均值滤波器)
  17. 小飞升值记——(4)
  18. sklearn_scaler
  19. ctfhsow web入门 命令执行大全
  20. 输入一串字符,将其中的大写变成小写,若不为大写则原样输出

热门文章

  1. 2016猴年春联集锦
  2. ubuntu系统下破解Clion
  3. tomcat重启警告:Abandoned connection cleanup thread)
  4. 对盖得排行APP内容方面的一些看法
  5. 【blender建模功能】03 倒角工具
  6. 毕业论文word排版技巧
  7. 红外热释电处理芯片 BISS0001
  8. 《微信小程序》微信小程序用java后台连接数据库进行操作。
  9. 多线程、并发/并行、自定义线程类、线程安全、守护线程、定时器、线程状态、线程池
  10. Python面试——基础面试题