嵌入式开发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)

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

保研复习 | 数据结构

目录 CH1 绪论☆ 数据项、数据元素、数据结构☆ 逻辑结构和存储结构的区别☆ 顺序存储结构和链式存储结构的比较☆ 算法的重要特性☆ 算法的复杂度 CH2 线性表☆ 单链表 CH3 栈、队列和数组☆ 栈和堆是什么?☆ 栈在括号匹配中的应用☆ 栈在表达式求值中的应用☆ …

【因果推断】优惠券政策对不同店铺的影响

这次依然是用之前rossmann店铺竞赛的数据集。 之前的数据集探索处理在这里已经做过了,此处就不再赘述了CSDN链接 数据集地址:竞赛链接 这里探讨数据集中Promo2对于每家店铺销售额的影响。其中,Promo2是一个基于优惠券的邮寄活动,发…

基于Python API的机械臂UDP上报设置及读取

睿尔曼机械臂提供了1个可持续读取机械臂状态的接口,UDP通信状态反馈接口。 该接口提供了json协议、API的读取,设置通信开启之后无需再进行设置即可以固定频率读取。 Python程序源码可从以下网盘地址获取(地址永久有效)&#xff1…

基础权限存储

一丶要求 建立用户组shengcan,其id为 2000建立用户组 caiwu,其id 为2001建立用户组 jishu,其id 为 2002建立目录/sc,此目录是 shengchan 部门的存储目录,只能被 shengchan 组的成员操作4.其他用户没有任何权限建立目录/cw,此目录…

51单片机-第一节-LED和独立按键

一、点亮LED&#xff1a; 首先包含头文件 <REGX52.H> 随后令P2为0xFE。(此时二进制对应1111 1110&#xff0c;为0 的LED亮&#xff0c;故八个灯中的最后一个亮起)。 注&#xff1a;P2为控制LED的8位寄存器。 void main() {P2 0xFE;//1111 1110while(1){} } 二、L…

微信小程序简历Demo

微信小程序简历Demo 使用介绍最后获取源码 bilibili视频介绍 使用介绍 使用微信小程序实现的一个简历实现Demo 拖动马里奥&#xff0c;到指定Name下方 向上顶就可以显示对应的简历样式 点击头像可拨打电话 点击信息处可显示当前位置 最后 这是一个简单并且有趣的微信小程…

acwing 291.蒙德里安的梦想

解法&#xff1a; 核心&#xff1a;先放横着的&#xff0c;再放竖着的。 总方案数&#xff0c;等于只放横着的小方块的合法方案数。 如何判断当前方案是否合法&#xff1f;所有剩余位置&#xff0c;能否填充满竖着的小方块。 即按列来看&#xff0c;每一列内部所有连续的空着的…

Cyber Weekly #14:WAIC 2024

赛博新闻 1、WAIC2024开幕&#xff1a;一半机器人&#xff0c;一半大模型 7月4日&#xff0c;AI界春晚——2024世界人工智能大会&#xff08;WAIC 2024&#xff09;在上海开幕&#xff0c;大会展示了500家企业的1500项展品&#xff0c;突出了机器人和大模型技术。国产机器人和…

使用Keil将STM32部分程序放在RAM中运行

手动分配RAM区域,新建.sct文件,定义RAM_CODE区域,并指定其正确的起始地址和大小。 ; ************************************************************* ; *** Scatter-Loading Description File generated by uVision *** ; ************************************************…

硬件开发笔记(二十四):贴片电容的类别、封装介绍,AD21导入贴片电容、原理图和封装库3D模型

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/140241817 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…

【在Linux世界中追寻伟大的One Piece】HTTPS协议原理

目录 1 -> HTTPS是什么&#xff1f; 2 -> 相关概念 2.1 -> 什么是"加密" 2.2 -> 为什么要加密 2.3 -> 常见的加密方式 2.4 -> 数据摘要 && 数据指纹 2.5 -> 数字签名 3 -> HTTPS的工作过程 3.1 -> 只使用对称加密 3.2 …

13.BeanFactory后处理器

作用&#xff1a;为bean工厂补充一些bean的定义。 ConfigurationClassPostPorcessor Bean工厂后置处理器(ConfigurationClassPostProcessor)可以去解析&#xff1a; ComponentScan Bean Import ImportResource package com.xkj.org.a05;import com.alibaba.druid.pool.D…

【C语言】刷题笔记 Day1

多刷题 多思考 【题目1】 实现字母的大小写转换&#xff0c;实现多组输入输出 1. getchar 为输入函数&#xff0c;EOF&#xff08;end of file&#xff09;为文件结束标志&#xff0c;通常为文件结束的末尾。 2. 题目中要求实现多组输入输出&#xff0c;那我们用 while 循…

C# 编程中互斥锁的使用

C# 中的互斥锁 互斥锁是 C# 中使用的同步原语&#xff0c;用于控制多个线程或进程对共享资源的访问。其目的是确保在任何给定时间只有一个线程或进程可以获取互斥锁&#xff0c;从而提供互斥。 C# 中互斥锁的优点 可以使用互斥锁 (Mutex) 并享受其带来的好处。 1. 共享资源…

求职成功率的算法,与葫芦娃救爷爷的算法,有哪些相同与不同

1 本节概述 通过在B站百刷葫芦娃这部儿时剧&#xff0c;我觉得可以从中梳理出一些算法&#xff0c;甚至可以用于求职这个场景。所以&#xff0c;大家可以随便问我葫芦娃的一些剧情和感悟&#xff0c;我都可以做一些回答。 2 葫芦娃救爷爷有哪些算法可言&#xff1f; 我们知道…

【Linux】信号的处理

你很自由 充满了无限可能 这是很棒的事 我衷心祈祷你可以相信自己 无悔地燃烧自己的人生 -- 东野圭吾 《解忧杂货店》 信号的处理 1 信号的处理2 内核态 VS 用户态3 键盘输入数据的过程4 如何理解OS如何正常的运行5 如何进行信号捕捉信号处理的总结6 可重入函数volatile关…

1958.力扣每日一题7/7 Java(100%解)

博客主页&#xff1a;音符犹如代码系列专栏&#xff1a;算法练习关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 目录 思路 解题方法 时间复杂度 空间复杂度 Code 思路 首先将指定位…

用vue2+elementUI封装手机端选择器picker组件,支持单选、多选、远程搜索多选

单选注意点&#xff1a; touchmove.prevent: 在 touchmove 事件上添加 .prevent 修饰符&#xff0c;以阻止默认的滚动行为。 handleTouchStart: 记录触摸开始的 Y 坐标和当前的 translateY 值。 handleTouchMove: 计算触摸移动的距离&#xff0c;并更新 translateY 值。 han…

Android 开发中 C++ 和Java 日志调试

在 C 中添加堆栈日志 先在 Android.bp 中 添加 ‘libutilscallstack’ shared_libs:["liblog"," libutilscallstack"]在想要打印堆栈的代码中添加 #include <utils/CallStack.h> using android::CallStack;// 在函数中添加 int VisualizerLib_Crea…

基于支持向量机、孤立森林和LSTM自编码器的机械状态异常检测(MATLAB R2021B)

异常检测通常是根据已有的观测数据建立正常行为模型&#xff0c;从而将不同机制下产生的远离正常行为的数据划分为异常类&#xff0c;进而实现对异常状态的检测。常用的异常检测方法主要有&#xff1a;统计方法、信息度量方法、谱映射方法、聚类方法、近邻方法和分类方法等。 …