38_SPI通信原理

news2024/9/24 3:27:08

SPI接口简介

SPI是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。

SPI,是一种高递的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,主要应用在EEPROM, FLASH,实时时钟, AD转换器,还有数字信号处理器和数字信号解码器之间。

SPI内部结构简明图

MISO主设备输入/从设备输出引脚

MOSI主设备输出/从设备输入引脚

SCLK时钟信号

CS 从设备片选引脚

位移寄存器相当于主机的位移寄存器里面是1000000一个时钟来了后会把最高位位发出去到从机的最低位,然后从机把最高位发到主机的最低位,主机左移一位,最低位接收来自从机寄存器的最高位,每个时钟主机都会发送自己的最高位发出去,从机当第二个时钟周期来之前会左移一位,等待新的一位数据,然后再发给主机的最高位,这样8个时钟周期过去后,2个位移寄存器的值是就互相交换了。

SPI接口框图

SPI工作原理总结

1.硬件上为4根线。

2.主机和从机都有一个串行移位寄存器,主机通过向它的SPI串行寄存器写入一个字节来发起一次传输。

3.串行移位寄存器通过MOSI信号线将字节传送给从机,从机也将自己的串行移位寄存器中的内容通过MISO信号线返回给主机。这样,两个移位寄存器中的内容就被交换。

4.外设的写操作和读操作是同步完成的。如果只进行写操作,主机只需忽略接收到的字节;反之,若主机要读取从机的个字节,就必须发送一个空字节来引发从机的传输。

SPI特征

1..3线全双工同步传输

2.8或16位传输顿格式选择

3.主或从操作支持多主模式

4.8个主模式波特率预分频系数(最大为fpcLk/2)

5.从模式频率(最大为fecLk/2)主模式和从模式的快速通

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

7.可编程的时钟极性和相位可编程的数据顺序, MSB在前或LSB在前

8.可触发中断的专用发送和接收标志

9.SPI总线忙状态标志

10.支持可靠通信的硬件CRC

在发送模式下, CRC值可以被作为最后一个字节发送

在全双工模式中对接收到的最后一个字节自动进行CRC校验

11.可触发中断的主模式故障、过载以及CRC错误标志

12.支持DMA功能的1字节发送和接收缓冲器:产生发送和接受请求

从选择(NSS)脚管理

有2种NSS模式:

软件NSS模式:可以通过设置SPI_CR1寄存器NSSM位来使能这种模式。在这种模式下NSS引脚可以用作它用,而内部NSS信号电平可以通过写SPI_CR1的SSI位来驱动

硬件NSS模式,分两种情况:

1.NSS输出被使能:当STM32 工作为主SPI,并且NSS输出已经通过SPI_CR2寄存器的SSOE位使能,这时NSS引脚被拉低,所有NSS引脚与这个主SPI的NSS引脚相连并配置为硬件NSS的SPI设备,将自动变成从SPI设备。当一个SPI设备需要发送广播数据,它必须拉低NSS信号,以通知所有其它的设备它是主设备;如果它不能拉低NSS,这意味着总线上有另外一个主设备在通信,这时将产生一个硬件失败错误(Hard Fault)。

2.NSS输出被关闭:允许操作于多主环环境

时钟信号的CPHA相位和CPOL极性

SPI_CR寄存器的CPOL和CPHA位,能够组合成四种可能的时序关系。CPOL(时钟极性)位控制在没有数据传输时时钟的空闲状态电平,此位对主模式和从模式下的设备都有效。如果CPOL被清'0', SCK引脚在空闲状态保持低电平;如果CPOL被置'1', SCK引脚在空闲状态保持高电平。如果CPHA(时钟相位)位被置'1', SCK时钟的第二个边沿(CPOL位为0时就是下降沿, CPOL位为'1'时就是上升沿)进行数据位的采样,数据在第二个时钟边沿被锁存。如果CPHA位被清'O',SCK时钟的第一边沿(CPOL位为'O'时就是下降沿,CPOL位为'1'时就是上升沿)进行数据位采样,数据在第一个时钟边沿被锁存。CPOL时钟极性和CPHA时钟相位的组合选择数据捕捉的时钟边沿。

CPOL是设置没有数据时时钟空闲状态电平,CPHA是设置第几个边沿被采集。

CPOL = 1 时钟空闲状态是低电平CPHA =1 时是第二个边沿被采集,所以就是上升沿采集

CPOL = 0 时钟空闲状态是高电平CPHA =1 时是第二个边沿被采集,所以就是下升沿采集

CPOL = 1 时钟空闲状态是低电平CPHA =0 时是第一个边沿被采集,所以就是下升沿采集

CPOL = 0 时钟空闲状态是高电平CPHA =0 时是第一个边沿被采集,所以就是上升沿采集

数据帧格式

根据SPI_CR1寄存器中的LSBFIRST位,输出数据位时可以MSB在先也可以LSB在先。根据SPI_CR1寄存器的DFF位,每个数据顿可以是8位或是16位。所选择的数据顿格式对发送和/或接收都有效。

状态标志

应用程序通过3个状态标志可以完全监控SPI总线的状态。

发送缓冲器空闲标志(TXE)

此标志为'1'时表明发送缓冲器为空,可以写下一个待发送的数据进入缓冲器中。当写入SPI_DR时,TXE标志被清除。

接收缓冲器非空(RXNE)

此标志为'1'时表明在接收缓冲器中包含有效的接收数据。读SPI数据寄存器可以清除此标志。忙(Busy)标志

BSY标志由硬件设置与清除(写入此位无效果),此标志表明SPI通信层的状态。

SPI中断

SPI引脚配置

程序配置过程

1.配置相关引脚的复用功能,使能SPlx时钟

void GPIO Init(GPIO_TypeDef* GPIOx, GPIO InitTypeDef* GPIO_InitStruct);

2.初始化SPIx,设置SPIx工作模式

void SPI_Init(SPL TypeDef* SPIx, SPI Init TypeDef* SPL InitStruct);

3.使能SPIx

void SPI Cmd(SPI TypeDef* SPIx, FunctionalState NewState);

4.SPI传输数据

void SPI_I2S_SendData(SPITypeDef* SPIx, uint16 Data);

uint16 SPI_I2S_ReceiveData(SPI TypeDef* SPlx);

5.查看SPI传输状态

SPI_I2S_GetFlagStatus(SPI2, SPI_2S FLAGRXNE);

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

蔚来智驾功能大更新:与其叫NOP+,不如叫NAD-

HiEV消息(文/张祥威)赶在2022年最后一个月,蔚来的自动驾驶大招露出了冰山一角。 2020年10月,蔚来国内首家推送高速场景下的领航辅助NOP(Navigate on Pilot),当时只有特斯拉实现了类似功能&#…

English Learning - L1 站在高处建立灵魂 2022.12.5 周一

English Learning - L1 站在高处建立灵魂 2022.12.5 周一1.1 到底什么是语法1.2 为什么要学习语法口语分广义和狭义讲母语的人为啥不学语法?作为一名二语习得者口语中可不可以没有有语法?1.3 英语(听说读写)的核心金字塔理论关于词…

[附源码]计算机毕业设计基于web的羽毛球管理系统Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

数据结构作业——第十四周——AOE网+查找

1. 单选题 简单 5分 若一个有向图中的顶点不能排成一个拓扑序列,则可断定该有向图______。 A.是个有根有向图 B.是个强连通图 C.含有多个入度为0的顶点 D.含有顶点数目大于1的强连通分量 回答正确 解析 2 . 单选题 简单 5分 以下关于图拓扑排序的叙述中正确的…

自动驾驶之去光晕调研

中文版综述github 一、光晕类型 常见去光晕算法的光晕 去光晕算法的光晕之二(汇总) 样式包括有: halos(色圈), streaks(条纹), bright lines(亮线), saturated blobs(深污点), color bleeding(色渗), haze(烟雾), and many others。 二、光晕成因 一个理想的相机&#x…

JSP SSH校园兼职信息发布平台myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 JSP SSH校园兼职信息发布平台是一套完善的web设计系统(系统采用ssh框架进行设计开发),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采 用B/S模式开发。开发环境为TOMCA…

Docker Images Explore

Docker Images Explore scratch an explicitly empty image, especially for building images “FROM scratch” You can use Docker’s reserved, minimal image, scratch, as a starting point for building containers. Using the scratch “image” signals to the build …

自定义键盘快捷键调节电脑音量

外接的键盘没有Fn。。。也没有调音量的键😅于是想自己弄一个 方法一:修改注册表键盘映射 新建记事本文件打开,粘贴如下内容: Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Key…

Idea 调试自定义 AbstractProcessor 程序

我们常使用的 Lombok 可以自动生成 gettr 和 setter 方法,使用起来非常方便;有时候我们也要去实现自己的注解处理器,实现一些在编译阶段需要执行的逻辑,例如我之前写的 spring cloud 自动生成 openfeign 的Fallback 降级方法;自动生成 openfeign 的Fallback 但是自定义注…

JavaEE进阶:SpringBoot概念、创建和运⾏

文章目录一、Spring Boot 优点二、Spring Boot 项⽬创建1、使用 Idea 创建① 准备工作② 创建项目③ 注意事项2、网页版创建(了解)三、项目目录介绍和运行1、运行项目2、输出 Hello world四、注意事项:包路径错误1、正确路径2、小结&#xff…

第十四届蓝桥杯集训——JavaC组第九篇——三元运算符

第十四届蓝桥杯集训——JavaC组第九篇——三元运算符 一元运算符(一元运算符有1个操作数) ,- -都是运算符,- -可分为前,后+和前-,后减如果在后面,如:num 10;先参与运算,然…

基于混合NSGA II-MOPSO算法的热电联合经济排放调度(Matlab代码实现)【混合多目标遗传算法-多目标粒子群算法】

💥💥💥💞💞💞欢迎来到本博客❤️❤️❤️💥💥💥 🚀支持:🎁🎁🎁如果觉得博主的文章还不错或者您用得到的话&…

游戏开发43课 移动游戏性能优化1

1. 前言 很多年前就想将这些年工作中积累的优化经验撰写成文章,但懒癌缠身,迟迟未动手,近期总算潜下心写成文章。 涉及到具体优化技巧时,博主会尽量阐述原理和依据,让读者知其然也知其所以然。要完全读懂这篇文章&am…

尚医通MyBatis-Plus入门、添加、主键策略(二)

目录: (1)MyBatis-Plus入门案例 (2)MyBatis-Plus-添加和主键生成策略 (1)MyBatis-Plus入门案例 简介: MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具&a…

c51单片机烧录程序 控制台显示正在检测目标单片机

问题 c51单片机烧录程序 控制台显示正在检测目标单片机 详细问题 笔者使用单片机型号STC89C52, 进行程序烧录。控制台显示正在检测目标单片机 解决方案 将单片机型号由STC89C52更改为STC89C52RC 即 原因 STC89C52与STC89C52RC属于不同型号,STC89C…

NoSQL数据库原理与应用综合项目——起始篇

NoSQL数据库原理与应用综合项目——起始篇 文章目录NoSQL数据库原理与应用综合项目——起始篇0、 写在前面1、项目说明1.1 项目背景1.2 项目功能2、数据集和数据预处理2.1 数据集2.2 数据预处理2.2.1 图书出版日期字段的处理2.2.2 添加id字段2.2.3 价格字段的处理2.2.4 打折字段…

chatgpt接入微信

背景 chatgpt是一个有趣的、聪明的AI机器人。很多人希望可以把这个机器人接入微信群聊里面。 介绍 本项目,使用python制作了一个微信群聊机器人。 微信群聊机器人群聊里面,被艾特后,会基于被艾特的内容,发送对应的文本。可以使…

CVE-2019-15107 webmin RCE漏洞复现

今天继续给大家介绍渗透测试相关知识,本文主要内容是CVE-2019-15107 webadmin RCE漏洞复现。 免责声明: 本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负! 再次强调&#xf…

【测绘程序设计】——椭球面弧长计算

椭球面弧长计算主要指——①根据纬度计算子午线弧长(B→X);②由子午线弧长求大地纬度(X→B)。它们主要用在高斯投影之中。本文分享了测绘程序设计——椭球面弧长计算(C#版与Python版),相关源代码(绝对完整,直接运行)及使用示例如下。 目录 Part.Ⅰ 使用示例Chap.Ⅰ …

redis基础

redis是一个基于内存的Key-Value数据库 1.基于内存存储,读写性能高 2.适合存储热点数据(热点商品、咨询、新闻) 3.NoSQL,不仅仅是SQL,泛指关系数据库 关系型数据库 Mysql Oracle DB2 SQLServer 非关系型数据…