嵌入式开发SPI基本介绍与应用

目录

#SPI通信协议

#SPI基础概念

#SPI通信模式         

#SPI通信时序类型


                前言:本篇笔记参考嘉立创的开发文档,连接放在最后。

#SPI通信协议

#SPI基础概念

        Serial Peripheral Interface  缩写SPI  翻译:串行外设接口  同步串行通信协议(数据线上的数据帧是bit为单位传输,一条传输数据线),的一种 高速 全双工(A B 双方可以同时发送信息 像vx聊天软件) 同步的通信总线,支持一主多从 (一个主设备多个从设备但这种通信方式通常用在短距离通信 。

        在通信的过程中,主设备是通信的发起方控制方,从设备只能接受响应主设备的命令还有传输的数据,通过使用片选信号来选择与指定的的从设备进行通信。

        SPI通信方式,硬件连接通过四根线,SCLK   MOSI  MISO  CS  通过这四根线,连接主机跟从机,所以当我们看到用的模块上有  SCLK  MOSI  MISO  CS  这四根引脚,就能反过来确定模块使用的是SPI通信方式

        SPI这种通信方式通常应用在 存储芯片 EEPROM  SRAM  SD卡使用SPI通信,读写存储芯片里面的数据到主控制器,还有 OLED屏幕  LCD屏幕 也是用SPI通信,大部分LCD屏幕使用的是并口通信。

通信线

说明

SCLK

时钟线,也叫做SCK。由主机产生时钟信号,使用相同时钟,同步通信协议

MOSI

master output slave input    主设备输出从设备输入线,也叫做SDO。意为主机向从机发送数据。

MISO

master input slave output  主设备输入从设备输出线,也叫做SDI。意为主机接收从机的数据。

CS

片选线,也叫做NSS。从机使能信号,由主机控制。当我们的主机控制某个从机时,需要将从机对应的片选引脚电平拉低或者是拉高,就代表选择对应的从机。

       SPI这种通信方式跟IIC一样,是分软件SPI硬件SPI的,下面进行相关介绍,一般模块之间使用SPI通信也是通过,软件SPI进行通信,传输数据,硬件SPI对于初学者来说,了解即可

        软件SPI:通过软件程序,控制GPIO引脚去模拟,SPI通信 收发数据  起始  结束的通信时序,完成SPI通信,这种方式效率没有硬件SPI 高,但是大多数只要支持GPIO的开发板上就能使用SPI进行通信,局限性没有那么大,相对于硬件SPI来讲。

        硬件SPI:通过MCU芯片内部集成 电路  控制寄存器 来控制SPI通信时序单元,这种通信方式依靠芯片内部集成的电路,如果芯片内部没有集成,这种通信电路,就不能进行通信。初次之外硬件SPI通信支持 中断  DMA  硬件缓冲区  高速传输。

                   

#SPI通信模式         

        SPI 一对一通信:这里SS代表的就是CS片选信号一样的,连接方式如下图所示,这种通信方式主机能控制的CS片选信号只有一个。

        SPI 一对多通信:这个时候主设备通过片选信号(CS),选择需要通信的从机时钟线的连接保证这主设备和从设备之间,能够同步传输数据,通过选择不同的片选信号(CS),能够与不同的从机进行通信

           

#SPI通信时序类型

           SPI协议传输规则,通过时钟极性(CKPL)相位(CKPH),分别控制,时钟极性(CKPL)和相位(CKPH)控制了时钟电平还有数据采样方式。

时钟极性(CKPL)特性:

        CKPL = 0:时钟信号在空闲状态(没有传输数据)下是低电平。

        CKPL = 0:时钟在空闲状态(没有传输数据)下是高电平。   

        总结:CKPL(时钟极性)这个表示位,用来控制时钟信号在空闲状态下的电平。    

时钟相位(CKPH)特性:

         CKPH = 0:数据采样发生在时钟变化的第一个边沿,数据更新发生在第二个边沿

         CKPH = 0:数据更新发生在第一个时钟变化边沿,采样发生在第二个时钟边沿。

        总结:CKPH(相位)这个标志位,用来定义数据采样更新发生在时钟信号的那一个边沿上。

        上面的 采样 更新 可以近似成从机接受数据 主机或从机发送下一个 位(bit)数据帧,通过选择这两个标志位,可以组合成四种SPI通信的模式,去进行通信下面分别介绍。

SPI通信方式0:

        时钟极性 (CKPL = 0):空闲状态下时钟电平默认为为第电平。

        相位(CKPH = 0):数据采样发生在时钟变化的第一个边沿,更新发生在第二个边沿。

SPI通信方式1:

        时钟极性 (CKPL = 0):空闲状态下默认为低电平。

        相位(CKPH = 1):数据更新发生在时钟变化第一个边沿,数据采样发生在第二个边沿。

SPI通信方式2:

        时钟极性(CKPL= 1):时钟总线空闲状态下默认为高电平。

       相位(CKPH = 0):数据采样发生在时钟变化第一个边沿,数据更新发生在第二个边沿。

SPI通信方式3:

        时钟极性(CKPL = 1):时钟总线默认状态下为高电平。

        相位(CKPH = 1):数据更新发生在第一个时钟边沿,数据采样发生在随后的边沿。

        这张图里面的CPOL是时钟极性  SPHA是相位,顺着虚线可以看到下面的MOSI  和MISO  这个图是不同SPI模式的不同时序图片。

‌⁠​​⁠​​‍​​​​‬​​​​⁠⁠‍​‬‍​​‍​​​​​​‌‬⁠‬​​‌​​【立创·天空星STM32F407VET6】入门手册 - 飞书云文档 (feishu.cn)

                 欢迎指正,希望对你,有所帮助!!!

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

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

相关文章

FMEA在大型光伏电站安全生产管理中的应用

一、FMEA概述 FMEA(Failure Modes and Effects Analysis)即失效模式和影响分析,是一种用于识别和分析产品或过程中潜在故障模式及其影响的方法。它通过对产品或过程中可能出现的故障模式进行系统性地梳理和分析,评估其可能的影响…

Miniconda的常见用法——以Isaacgym为例

1. ubuntu24.04安装minicondda mkdir -p ~/miniconda3 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh解释下这段代码 bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3~/miniconda3/miniconda.sh: 指向Mi…

【笔记】记一次redis将从节点变成主节点 主节点变成从节点

1.连上虚拟机centos7 2.打开finalshell连接虚拟机 将从节点变为主节点 输出redis-cli -p 要变成主节点的从节点 -a此从节点的密码 输入 replicaof no one 查看端口状态 info replication 总结: redis-cli -p 端口号 -a 密码 replicaof no one info replicati…

STM32第十七课:连接云平台进行数据传输

目录 需求一、云平台项目创建二、代码编写1.导入MQTT包2.连接阿里云3.发布数据 三、关键代码总结 需求 1.通过生活物联网平台设计一个空气质量检测仪app。 2.连接阿里云平台将硬件数据传输到云端,使手机端能够实时收到。 一、云平台项目创建 先进入阿里云生活服务…

cs231n 作业3

使用普通RNN进行图像标注 单个RNN神经元行为 前向传播: 反向传播: def rnn_step_backward(dnext_h, cache):dx, dprev_h, dWx, dWh, db None, None, None, None, Nonex, Wx, Wh, prev_h, next_h cachedtanh 1 - next_h**2dx (dnext_h*dtanh).dot(…

打造属于你的私人云盘:在 OrangePi AIpro 上搭建个人云盘

随着数字化时代的到来,数据的存储和管理变得愈发重要。相比于公共云存储服务,搭建一个属于自己的个人云盘不仅能够更好地保护隐私,还可以更灵活地管理数据。 近期刚好收到了一个 香橙派 AIpro 的开发板,借此机会用来搭建一个属于…

人工智能项目论文复现

文章目录 (一)技术学习任务Ⅰ、机器学习之聚类1、基本介绍概念2、聚类分析基本介绍3、K均值聚类4、K近邻分类模型(KNN)5、均值漂移聚类6、代码实现7、上述三种算法总结 Ⅱ、机器学习其他常用技术1、决策树基本知识2、异常检测概念3、主成分分析4、决策树…

落日余晖映晚霞

落日余晖映晚霞,立于海滨,望夕阳余晖洒于波光粼粼之上,金光跳跃,若繁星闪烁,耀人心目。 海风轻拂,心境宁静,凡尘俗务皆于此刹那消散,思绪万干,或忆往昔点滴,或…

SQL 对一个经常有数据更新和删除操作的表,怎样优化以减少磁盘空间的占用?

文章目录 一、定期清理不再需要的数据二、使用合适的数据类型三、压缩数据四、删除重复数据五、分区表六、索引优化七、碎片整理八、归档历史数据九、监控和评估 在数据库管理中,当面对一个经常进行数据更新和删除操作的表时,磁盘空间的有效利用是一个重…

PIP换源的全面指南

##概述 在Python的世界里,pip是不可或缺的包管理工具,它帮助开发者安装和管理Python软件包。然而,由于网络条件或服务器位置等因素,直接使用默认的pip源有时会遇到下载速度慢或者连接不稳定的问题。这时,更换pip源到一…

赋值运算符重载和const成员函数和 const函数

文章目录 1.运算符重载(1)(2)运算符重载的语法:(3)运算符重载的注意事项:(4)前置和后置重载区别 2.const成员函数3.取地址及const取地址操作符重载4.总结 1.运算符重载 (1) 我们知道内置类型(整形,字符型,浮点型…)可以进行一系…

利用docker搭建漏洞环境,使用SSRF+Redis写入centos以及ubuntu的公钥,实现免密登录

一、实验环境 kali:在kali中搭建docker容器环境,这里我主要是使用第一个; redis作为一种数据库,它可以将数据写入内存中去,我们通过利用ssrf请求,实现服务器对自己的公钥写入,从而实验免密登录;…

异步调用 - 初识

目录 1、引入 2、同步调用 2.1、例子:支付功能 2.2、同步调用的好处 2.3、同步调用的缺点 3、异步调用 3.1、异步调用的方式 3.2、异步调用的优势 3.3、异步调用的缺点 3.4、什么场景下使用异步调用 3.5、MQ技术选型 1、引入 为什么想要异步通信呢&…

LeetCode 算法:二叉树中的最大路径和 c++

原题链接🔗:二叉树中的最大路径和 难度:困难⭐️⭐️⭐️ 题目 二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,…

Spring cloud 中使用 OpenFeign:让 http 调用更优雅

注意:本文演示所使用的 Spring Cloud、Spring Cloud Alibaba 的版本分为为 2023.0.0 和 2023.0.1.0。不兼容的版本可能会导致配置不生效等问题。 1、什么是 OpenFeign Feign 是一个声明式的 Web service 客户端。 它使编写 Web service 客户端更加容易。只需使用 F…

[数据结构] --- 线性数据结构(数组/链表/栈/队列)

1 线性结构和非线性结构的理解 1.1 线性结构 线性结构是什么? 数据结构中线性结构指的是数据元素之间存在着“一对一”的线性关系的数据结构。线性结构是一个有序数据元素的集合。 线性结构特点: 线性结构有唯一的首元素(第一个元素&#…

13.SQL注入-宽字节

SQL注入-宽字节 含义: MySQL是用的PHP语言,然后PHP有addslashes()等函数,这类函数会自动过滤 ’ ‘’ null 等这些敏感字符,将它们转义成’ ‘’ \null;然后宽字节字符集比如GBK它会自动把两个字节的字符识别为一个汉…

Jmeter实现接口自动化

自动化测试理论知识 什么是自动化测试? 让程序或工具代替人为执行测试用例什么样的项目适合做自动化? 1、项目周期长 --多长算长?(自己公司运营项目) 2、需求稳定(更多具体功能/模块) 3、需要…

[数据结构] 归并排序快速排序 及非递归实现

()标题:[数据结构] 归并排序&&快速排序 及非递归实现 水墨不写bug (图片来源于网络) 目录 (一)快速排序 类比递归谋划非递归 快速排序的非递归实现: (二)归并排序 归…

通过scp命令进行本地和远程服务器之间的文件传输

打开本地终端(Windonws系统按下WinR键,输入cmd回车,即可打开终端) 1、从本地向远程服务器传输文件 scp 本地文件路径文件名 用户名远程服务器IP地址:远程服务器存放文件的路径 例如: scp /Users/HP/Desktop/test/1.p…