嵌入式——串行外围设备接口(SPI)

目录

一、初识SPI

1. 介绍

2. 特性

补:

二、物理层

1. SS (Slave Select)

2. SCK (Serial Clock)

3. MOSI (Master Output, Slave Input)

4. MISO (Master Input, Slave Output)

三、协议层

1. 基本通讯过程

2. 通信的起始和停止信号

3. 数据有效性

4. CPOL/CPHA及通信模式

四、SPI架构

1. 通信引脚

2. 时钟控制逻辑

3. 数据控制

4. 整体控制逻辑

五、通信过程


一、初识SPI

1. 介绍

        SPI (Serial Peripheral Interface,串行外围设备接口) 协议是由摩托罗拉公司提出的通信协议。它被广泛地使用在ADC、LCD等设备与MCU间,适用于对通信速率要求较高的场合

2. 特性

补:

(1)主或从 操作。

(2)支持 多主模式。

(3)8 个 主模式 波特率 预分频 系数(最大为 fpclk / 2)。

(4)从 模式频率(最大为 fpclk / 2)。

(5)主模式 和 从模式的 快速通信。

(6)主模式 和 从模式 下均可以 由软件或硬件 进行 NSS管理主 / 从操作模式的 动态改变。

(7)可编程的 时钟极性 和 相位。

(8)可编程的 数据顺序,MSB 在前或 LSB 在前。

(9)可 触发中断 的专用发送 和 接收标志。

(10)SPI 总线 忙状态 标志。

(11)支持 DMA功能 的 1 字节 发送和接收 缓冲器:产生发送 和 接受请求。

二、物理层

        SPI通信使用 3 条总线及片选线,3条总线分别为SCK、MOSI、 MISO,片选线为SS

1. SS (Slave Select)

        从设备选择信号线,常称为片选信号线,也称为NSS、CS。

        当有多个SPI从设备与SPI主机相连时,设备的其他信号线SCK、MOSI及MISO同时并联到相同的SPI总线上,即无论有多少个从设备,都共同使用这 3条总线;而每个从设备都有独立的一条NSS信号线,本信号线独占主机的一个引脚,即有多少个 从设备,就有多少条片选信号线

        IIC协议中通过设备地址来寻址、选中总线上的某个设备并与其进行通信;而SPl协议中没有设备地址,它使用 NSS信号线来寻址,当主机要选择从设备时,把该从设备的NSS信号线设置为低电平,该从设备即被选中(片选有效),主机便可开始与被选中的从设备进行SPI通信。所以SPI通信以NSS线置低电平为开始信号,以 NSS线 被拉高作为结束信号。

2. SCK (Serial Clock)

        时钟信号线,用于通信数据同步由通信主机产生,决定了通信的速率不同的设备支持的最高时钟频率不一样两个设备之间通信时,通信速率受限于低速设备

3. MOSI (Master Output, Slave Input)

        主设备输出/从设备输入引脚。主机的数据从这条信号线输出,从机由这条信号线读入主机发送的数据,即该线上数据的方向为主机到从机

4. MISO (Master Input, Slave Output)

        主设备输入/从设备输出引脚。主机从这条信号线读入数据,从机的数据由这条信号线输出到主机,即该线上数据的方向为从机到主机

三、协议层

1. 基本通讯过程

        NSS、SCK、MOSI信号都由主机控制产生,而 MISO的信号由 从机产生,主机通过该 信号线读取 从机的数据。MOSI 与 MISO的信号 只在 NSS为低电平 的时候才有效,在 SCK的 每个时钟周期,MOSI 和 MISO 传输一位数据

2. 通信的起始和停止信号

        ① 处 NSS信号 由高变低,是SPI通信的 起始信号。NSS是 每个从机各自 独占的 信号线,当从机在自己的 NSS线检 测到起始信号后,就知道自己被 主机选中,开始准备与主机通信

        ⑥ 处 NSS信号 由低变高,是SPI通信的 停止信号,表示本次通信结束,从机的选中状态 被取消

3. 数据有效性

        SPI使用MOSI及MISO信号线来传输数据,使用SCK信号线进行数据同步。

        MOSI 及 MISO 数据线 在SCK 的每个时钟周期 传输 一位数据,且 数据输入输出是同时进行的。数据传输时,MSB先行或LSB先行并没有作硬性规定( 一般都会采用MSB先行模式

        MOSI 及 MISO 的数据在 SCK的 上升沿 期间 变化输出,在 SCK的 下降沿时被采样( MOSI 及MISO 的数据有效 )高电平时 表示数据 1,为低电平时 表示数据 0。其他时刻数据无效,MOSI 及 MISO 为下一次表示数据做准备。

    SPI 每次数据传输可以 8位 或 16位 为单位,每次传输的单位 数 不受限制

4. CPOL/CPHA及通信模式

        为方便说明 SPI 的 4种通信模式,引入了“ 时钟极性CPOL ” 和 “ 时钟相位CPHA ” 的概念,用于区别 总线空闲时SCK的时钟状态以及数据采样时刻

        时钟极性CPOL是指 SPI通信设备 处于空闲状态 时,SCK信号线 的电平信号(即 SPl 通信开始前、NSS线为 高电平时 SC K的状态)。CPOL= 0 时,SCK 在空闲状态时 为低电平,CPOL= 1时,则相反。

        时钟相位CPHA是指 数据的采样时刻。当 CPHA = 0时,MOSI 或 MISO 数据线 上的信号将会在 SCK时钟线 的 “ 奇数边沿 ” 被采样;当 CPHA = 1时,数据线在 SCK的 “ 偶数边沿 ” 被采样。

        无论 CPOL 是 0 还是 1 ,因为配置的 时钟相位 CPHA=0采样时刻 都是在 SCK 的奇数边沿注意当 CPOL=0 的时候,时钟的奇数边沿 是 上升沿,而 CPOL=1 的时候,时钟的 奇数边沿是下降沿 )。所以 SPI 的采样时刻 不是由 上升 / 下降沿 决定的

        MOSI 和 MISO 数据线 的有效信号 在 SCK的奇数边沿 保持不变数据信号 将在 SCK奇数边沿时被采样在非采样时刻,MOSI 和 MISO 的有效信号 才发生切换

        CPHA =1 时,不受CPOL的影响,数据信号在 SCK的 偶数边沿 被采样

        由 CPOL 及 CPHA 的 不同状态,SPl 分成了 4种模式主机与从机 需要工作 在相同的模式下才可以 正常通信( 实际中采用较多的是 “ 模式0 ” 与 “ 模式3 ”  )。

四、SPI架构

1. 通信引脚

        SPI的所有硬件架构 都是从左侧的 MOSI、 MISO、SCK及NSS线 展开的。

        SPI1 是APB2上的设备,最高通信速率达36Mbps,SPI2、SPI3 是APB1上的设备,最高通信速率为18Mbps。除了通信速率,在其他功能上没有差异。SPI3 用到了下载接口的引脚,这几个引脚 默认功能 是下载,第二功能 才是 lO口。如果 想使用SPI3接口,则在程序上必须 先禁用这几个 lO口 的下载功能。

2. 时钟控制逻辑

        SCK线的时钟信号 由波特率发生器 根据 控制寄存器CR1中的BR[0:2]位控制,该位是对 fpclk时钟的 分频因子对 fpclk 的分频结果就是 SCK引脚的 输出时钟频率

        fpclk频率 是指SPl所在的 APB总线频率,APB1为 fpclk1,APB2为 fpclk2。

        通过 配置 控制寄存器CR 的CPOL位 及 CPHA位,可以把 SPI设置成 前面分析的 4种SPI 模式。

3. 数据控制

        SPI 的 MOSI 及 MISO 都连接到 数据移位寄存器上,数据移位寄存器的数据来源于 目标接收、发送缓冲区以及MISO、MOSI线

        当向外发送数据的时候,数据移位寄存器以 “ 发送缓冲区 ” 为数据源,通过写 SPI的 数据寄存器 DR 把数据填充到 发送缓冲区 中,并把数据一位位地通过数据线 发送出去。当 从外部接收数据的时候,数据移位寄存器 把数据线采样到的数据一位位地存储到 “ 接收缓冲区 〞中,通过读 数据寄存器 DR,可以 获取接收缓冲区 中的内容。

        其中 数据帧长度 可以通过 控制寄存器 CR1 的 DFF位 配置成 8位 及16位 模式;配置LSBFIRST位 可选择 MSB先行 还是 LSB先行。

4. 整体控制逻辑

        负责 协调整个SPI外设,其工作模式根据 配置的控制寄存器 (CR1/CR2) 的参数而改变。

        在外设工作时,控制逻辑会根据外设的工作状态修改状态寄存器SR,只要读取状态寄存器相关的寄存器位,就可以了解 SPI的工作状态

        控制逻辑还根据要求,负责控制产生 SPI中断信号、DMA请求 及 控制 NSS信号线

        实际应用中,一般不使用 STM32 SPl 外设 的 标准 NSS信号线,而是更简单地 使用普通的 GPIO,软件控制 它的电平输出,从而 产生通信起始 和 停止信号

五、通信过程

1. 控制NSS信号线产生起始信号

2. 把 要发送的数据写入 数据寄存器DR中,该数据会被存储到 发送缓冲区

3. 通信开始,SCK时钟开始运行MOSI 把发送缓冲区 中的数据一位位 地传输出去;MISO 则把数据一位位地 存储进 接收缓冲区中。

4. 当发送完一帧数据 的时候,状态寄存器SR中的TXE标志位会被置1,表示传输完一帧,发送缓冲区已空;同样,当接收完一帧数据的时候,RXNE标志位会被置1,表示传 输完一帧,接收缓冲区非空。

5. 等到TXE标志位为1时,若还要继续发送数据,则再次往 数据寄存器DR写入数据即可;等到RXNE标志位为 1 时,通过读取数据寄存器DR可以 获取接收缓冲区中的内容

        假如 使能了 TXE 或 RXNE中断TXE 或 RXNE置1时会产生 SPI中断信号,进入同一个中断服务函数。到SPI中断服务程序后,可通过 检查寄存器位 来了解是 哪一个事件,再分别进行处理。也可以使用 DMA方式 来收发 数据寄存器 DR 中的数据。


                                                                                                                        后面再进行补充。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/368509.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

虚拟机Windows Server 2016 安装 MySQL8

目录 一、下载MySQL8 1.下载地址: 2.创建my.ini文件 二、安装步骤 第一步:命令窗口 第二步:切换目录 第三步:安装服务 第四步:生成临时密码 第五步:启动服务 第六步: 修改密码 三…

【Linux系统化学习】进程替换

目录 进程程序替换 替换原理 ​编辑替换函数 函数解释 命名理解 函数使用 execl execlp execv execvp 调用其它程序 进程程序替换 替换原理 用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数以执行另一个…

0203-2-输入输出系统

第六章:输入输出系统 I/O系统的功能,模型和接口 I/O系统管理的对象是I/O设备和相应的设备控制器。 I/O系统的基本功能 隐藏物理设备的细节与设备的无关性提高处理机和I/O设备的利用率对I/O设备进行控制确保对设备的正确共享错误处理 I/O软件的层次结…

重写Sylar基于协程的服务器(4、协程调度模块的设计)

重写Sylar基于协程的服务器(4、协程调度模块的设计) 重写Sylar基于协程的服务器系列: 重写Sylar基于协程的服务器(0、搭建开发环境以及项目框架 || 下载编译简化版Sylar) 重写Sylar基于协程的服务器(1、日…

2.03作业

1.请编程实现单向循环链表的头插,头删,尾插,尾删。 2.请编程实现单向循环链表约瑟夫环 约瑟夫环:用循环链表编程实现约瑟夫问题 n个人围成一圈,,从某人开始报数,1,2,......,m,数到…

牛客-NC249946-小d和孤独的区间

牛客-小d和孤独的区间 题目如上 1 s 1s 1s的时间限制,说明我们应该找到一种“巧法” 根据提示,我们只需要找到“中间全部都是 0 0 0,只有一个1的区间”即可 但是在找的途中,我们不仅要顾及当前 1 1 1之前的 0 0 0的个数&#xff…

JProfiler for Mac:提升性能和诊断问题的终极工具

在当今的高性能计算和多线程应用中,性能优化和问题诊断是至关重要的。JProfiler for Mac 是一个强大的性能分析工具,旨在帮助开发者更好地理解其应用程序的运行情况,提升性能并快速诊断问题。 JProfiler for Mac 的主要特点包括:…

常见API

文章目录 Math类1.1 概述1.2 常见方法 System类2.1 概述2.2 常见方法 Runtime3.1 概述3.2 常见方法 Object类4.1 概述4.2 常见方法 Objects类5.1 概述5.2 常见方法 BigInteger类6.1 引入6.2 概述6.3 常见方法6.4 底层存储方式: 7 BigDecimal类7.1 引入7.2 概述7.3 常…

PAT-Apat甲级题1005(python和c++实现)

PTA | 1005 Spell It Right 1005 Spell It Right 作者 CHEN, Yue 单位 浙江大学 Given a non-negative integer N, your task is to compute the sum of all the digits of N, and output every digit of the sum in English. Input Specification: Each input file cont…

kubernetes-深入理解Pod对象:调度

一、创建一个Pod的工作流程 Pod创建流程: 1、kubectl 向 APIServer 发起一个 Pod 创建请求。 2、APIServer 接受到 Pod 创建请求后,不是直接创建 Pod,而是将 Pod 的数据写入 etcd 中,待写入操作执行完成,APIServer 将…

vue3 之 组合式API - setup选项

首先我们先看下setup选项的写法和执行时机 setup选项中写代码的特点 语法糖 总结 setup选项的执行时机? beforeCreate钩子之前 自动执行 setup写代码的特点是什么? 定义数据 函数 然后以对象方式return 经过语法糖的封装更简单的使用组合式API set…

mybatis-plus 3.5.1 自动填充无效问题

使用了mybatis-plus的自动填充功能,但是我debug的时候进都进不去 这是为什么? 我在新增的时候连insertFill方法都进不去 原因是,我没有在我的新增实体类上加上 fill FieldFill.INSERT 还有些问题是配置类, 没有扫描到的问题,这个网上一搜一大把 注意,这个实体类是你新增的…

BUUCTF-Real-[struts2]s2-013

struts2的标签中 <s:a> 和 <s:url> 都有一个 includeParams 属性&#xff0c;可以设置成如下值none - URL中不包含任何参数&#xff08;默认&#xff09; get - 仅包含URL中的GET参数 all - 在URL中包含GET和POST参数 当includeParamsall的时候&#xff0c;会将本次…

ep-bg-purple-dark element-plus 不生效

element-plus 官网里面的 Layout 布局中的示例&#xff0c;官方文档中添加类名 class"grid-content ep-bg-purple-dark" 有相应的样式 import element-plus/theme-chalk/index.css //默认css样式 英文 import element-plus/dist/index.css 两…

ctfshow web-76

开启环境: c?><?php $anew DirectoryIterator("glob:///*"); foreach($a as $f) {echo($f->__toString(). );} exit(0); ?> cinclude("/flagc.txt");exit(); c?><?php $anew DirectoryIterator("glob:///*"); foreach($a…

图解Java多线程设计模式

第5章Producer-Consumer模式 Producer是生产者的意思&#xff0c;指的是生成数据的线程。Consumer则是"消费者"的意思&#xff0c;指的是使用数据的线程。生产者安全地将数据交给消费者。但当虽然仅是这样看似简单的操作&#xff0c; 但当生产者和消费者以不同的线…

XUbuntu22.04之跨平台远程控制工具(二百一十一)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

学术研究新突破:发现新型相变存储器

斯坦福大学的研究人员开发出了一种新型相变存储器&#xff0c;该存储器有望帮助计算机更快、更高效地处理大量数据。在最近发表于《自然通讯》的一篇论文中&#xff0c;研究人员详细介绍了这项技术&#xff0c;表明一种新材料可能会使基于电阻高低状态切换以创建计算机数据“0”…

算法设计与分析实验:回溯

目录 一、组合总和 1.1 具体思路 1.2 思路展示 1.3 代码实现 1.4 复杂度分析 1.5 运行结果 二、全排列 2.1 具体思路 2.2 思路展示 2.3 代码实现 2.4 复杂度分析 2.5 运行结果 三、N皇后问题 3.1 具体思路 3.2 思路展示 3.3 代码实现 3.4 复杂度分析 3.5 运行…

jsp自助点餐管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 自助点餐管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0…