概念

SPI, Serial Perripheral Interface, 串行外围设备接口, 是 Motorola 公司推出的一种通信接口技术。

SPI,是一种高速的,全双工,同步串行通信总线,并且在芯片的管脚上只占用四根线(MISO,MOSI,NSS,SCK)。

主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。

引脚

SPI接口经常被称为4线串行总线,以主/从方式工作,数据传输过程由主机初始化。4条信号线分别为:

1) SCK:串行时钟,用来控制数据交换的时机和速率,由主机提供;
//serial clock output for masters and input for slaves
2) MOSI:主机输出从机输入数据线;
3) MISO:主机输入从机输出数据线;
4) NSS:从机选择线,低电平有效,由主机控制。

在SPI总线上,某一时刻可以出现多个从机,但只能存在一个主机,主机通过片选线来确定要通信的从机(也就是任何时刻只能有一对主从机在通信)。这就要求从机的MISO口具有三态特性,使得该口线在器件未被选通时表现为高阻抗。

引脚连接

从图中看到,主机的NSS信号为高电平,从机的NSS信号被主机片选。

原理


如图:
1.MISO引脚相连接,MOSI引脚相互连接。这样,主从设备之间串行地传输且通信总是由主设备发起
2.主设备通过MOSI脚把数据发给从设备的同时,从设备通过MISO脚传回数据给主设备。这个全双工的过程是由时钟信号SCK控制同步的。
3.时钟信号由主设备通过SCK脚提供。

框图


简析:
1. 从图中可以具体的看出SCK信号,由波特率发生器产生,传给从机和自己的通信控制寄存器中。
2. 波特率的大小由SPL_CR1寄存器的BR2,BR1,BR0三个位决定。
3. 通信控制由SPL_CR1寄存器的MSTR,SSM,SSI三个位和NSS控制,通信控制控制通信过程中的错误如CRC校验错误,模式错误,溢出。
4. 主控制电路控制,输入输出的逻辑门电路打开与关闭。

主从选择

NSS模式可以由硬件或软件设置。

软件设置(内部至高或低):
主机设置:

从机设置:

即SSM至为1时,外部NSS引脚置为它用,内部NSS引脚可以通过SSI位来驱动。

时钟信号的相位和极性

1.SPI接口可由CPOL和CPHA设置4种不同传输格式时序

2.SCK的空闲状态必须和SPI_CR1寄存器指定的极性一致(CPOL为’1’时,空闲时应上拉SCK为高电平;CPOL为’0’时,空闲时应下拉SCK为低电平)。

3.CPHA=0时,数据出现快于时钟的第一个边沿。CPHA=1时,数据出现与时钟的第一个边沿同步。

如果CPHA(时钟相位)位被置’1’,SCK时钟的第二个边沿(CPOL位为0时就是下降沿,CPOL位为’1’时就是上升沿)进行数据位的采样,数据在第二个时钟边沿被锁存。
如果CPHA位被清’0’,SCK时钟的第一边沿(CPOL位为’0’时就是下降沿,CPOL位为’1’时就是上升沿)进行数据位采样,数据在第一个时钟边沿被锁存。

这么多模式,主要是为了配合外部芯片。

数据帧格式

状态标志

SPI中断

配置过程

数据的传输过程

(学习笔记) SPI通信协议相关推荐

  1. STM32F103学习笔记——SPI读写Flash(二)

      此系列文章是小白学习STM32的一些学习笔记.小白第一次写笔记文章,有不足或是错误之处,请多体谅和交流! 目录 1.软件设计流程 2.SPI初始化 3.SPI发送接收一字节函数编写 4.FLASH ...

  2. 嵌入式学习笔记——SPI协议

    SPI 简介 SPI 是全双工通信,通过时钟信号进行同步通信 有四种时序对应的相应的四种功能 通常使用以主从方式进行工作,这种模式下通常有一个主设备和一个或多个从设备,需要至少4根线 实际上3根线也可 ...

  3. STM32Cube学习笔记-SPI通讯

    引言  使用STM32Cube开发东西最怕的就是写的代码太多,为什么呢?因为不会写,我深有体会.SPI通讯是一种常用的常用的通讯方式,同步.串行.同步代表着实时性好,串行代表着接线少,很多的设备愿意采 ...

  4. STM8学习笔记---Modbus通信协议简单移植

            Modbus是一种串行通信协议,在工业中应用是比较广泛的.关于Modbus的介绍网上资料很多,这里就不细说了.刚开始接触的时候看Modbus的介绍,光是协议的介绍有几百页,还有各种命令 ...

  5. stm32读操作失败_STM32学习笔记—通信容易出错的情况

    I²C:全称为Inter-Integrated Circuit(内部集成电路),是一种串行通讯总线,常用于嵌入式电子产品中. 这是第4篇分享,<STM32学习笔记>之I2C通信容易出错的情 ...

  6. 嵌入式学习笔记——STM32的USART通信概述

    文章目录 前言 常用通信协议分类及其特征介绍 通信协议 通信协议分类 1.同步异步通信 2.全双工/半双工/单工 3.现场总线/板级总线 4. 串行/并行通信 5. 有线通信.无线通信 STM32通信 ...

  7. dma接收双缓存 stm32_「STM32学习笔记」USART 新特性

    之前的学习笔记"SPI不够用?USART来帮忙"一文中介绍了用如何把USART当做SPI来用的方法.此外,ST的USART还有很多新特性,没准有你不知道的. 在此,我们整理出来以下 ...

  8. 嵌入式学习笔记——ADC模数转换器

    ADC模数转换器 前言 ADC介绍 ADC概述 ADC的数量 ADC的特性 ADC框图 芯片外部框图 芯片内部框图 转换部分框图 状态输出部分 条件触发框图 寄存器介绍 编程思路 模式选择 规则通道的 ...

  9. 嵌入式学习笔记——基于Cortex-M的单片机介绍

    基于Cortex-M的单片机介绍 前言 1生产厂商及其产品线 1.1ARM单片机的产品线 1.2命名规则 作业1 2习单片机的资料准备 2.1STM32开发所需手册 2.1.1芯片的数据手册 芯片基本 ...

  10. 嵌入式学习笔记——寄存器实现控制LED小灯

    文章目录 前言 GPIO通用输出模式 初始化LED小灯的GPIO 原理图 初始化代码 初始化的效果 功能函数封装 直接分开宏定义两个 使用条件运算符 封装函数实现简单的功能 KEIL MDK一些技巧 ...

最新文章

  1. 【Spring框架家族】SpringBoot基本介绍
  2. MySQL修改字段的排列位置
  3. Java技术分享:void的用法和意义
  4. 利用状态图实现词法分析
  5. 在 IntelliJ IDEA 中远程调试 Java 程序
  6. perl中q,qq,qw,qr的区别。
  7. Linux节点之间无密码问题,Linux下多节点SSH无密码互联实现
  8. 如何使用SAP CRM增强工具AET创建Table表格类型的增强
  9. Hive:使用Apache Hive查询客户最喜欢的搜索查询和产品视图计数
  10. 2019蓝桥杯Java决赛题答案_2019第十届蓝桥杯JavaB组省赛真题详解
  11. 关于PHP的错误机制总结
  12. 苹果将削减iPhone SE及AirPods产量 iPhone 13也要求减产
  13. 强悍的 Linux —— grep 与 egrep
  14. [转载] python判断字符串中包含某个字符串_干货分享| Python中最常用的字符串方法
  15. JSP的自定义标签(五)之Tag File
  16. HTML&CSS:制作简易电商网站
  17. 三国志战略版交易助手攻略
  18. 图片放大不清晰怎么办?
  19. Linux 学习包括但不限于linux使用问题笔记
  20. Win10 没有激活,如何改变任务栏位置

热门文章

  1. 健康指南:忙碌白领10种危险生活方式
  2. Seq2Seq 粗浅理解
  3. python的endswith()的用法及实例
  4. Stata:双重差分的固定效应模型-(DID)
  5. Measurement Studio函数ReadMultiSampleAsync
  6. 利用pandas对在链家网爬取的租房数据进行清洗
  7. html表格背景颜色
  8. 理解vue-admin-template模板,连接后端改造登陆功能
  9. 换了新的JDK后,Eclipse打不开
  10. C语言中int与char的类型转换