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

news/2024/7/17 5:22:00 标签: 网络

目录

#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.niftyadmin.cn/n/5543440.html

相关文章

医院挂号系统小程序的设计

管理员账户功能包括:系统首页,个人中心,患者管理,医生管理,专家信息管理,科室管理,预约信息管理,系统管理 微信端账号功能包括:系统首页,专家信息&#xff0…

C++模板元编程(三)——类型萃取

类型萃取(type_traits)是一种编译时技术&#xff0c;用于在编译期间获取和操作类型的信息&#xff0c;主要用于泛型编程以及在编译时做出决策。 文章目录 常见的类型萃取内部实现std::is_integral\<T\>std::enable_if_t<_Test, T> 应用 常见的类型萃取 在C11的<…

Zabbix 的部署和自定义监控内容

前言 一个完整的项目的业务架构包括 客户端 -> 防火墙 -> 负载均衡层&#xff08;四层、七层 LVS/HAProxy/nginx&#xff09; -> Web缓存/应用层&#xff08;nginx、tomcat&#xff09; -> 业务逻辑层(php/java动态应用服务) -> 数据缓存/持久层&#xff08;r…

BDD 100K dataset 的标签数据结构(json文件)

最近在筛选自己需要的labels&#xff0c;所以要弄清楚这个数据集的数据结构才行&#xff1a; 1.整个json文件以列表形式储存 2.每张图片以一个字典形式储存 3.存储图片的字典内的以‘name’为key的键值对对应的‘value’是我需要的图片名称信息 4.存储图片的字典内的以‘label…

PyTorch学习之torch.transpose函数

PyTorch学习之torch.transpose函数 一、简介 torch.transpose 函数我们用于交换张量的维度。 二、语法 torch.transpose 函数用于交换给定张量的两个维度&#xff0c;其语法如下&#xff1a; torch.transpose(input, dim0, dim1)三、参数 input&#xff1a;待交换维度的张…

网络安全测评技术与标准

网络安全测评是评估信息系统、网络和应用程序的安全性&#xff0c;以发现潜在的漏洞和威胁&#xff0c;并确保系统符合安全标准和政策的过程。以下是常见的网络安全测评类型&#xff1a; 1. 渗透测试&#xff08;Penetration Testing&#xff09; 描述&#xff1a;通过模拟真…

1958.检查操作是否合法

解题思路 思路是对的&#xff0c;是否存在好线段&#xff0c;则需要从给定节点的8个方向出发&#xff0c;然后寻找是否存在。 方向的问题&#xff0c;则构建行列下标变化量&#xff0c; C 注意在某个方向上的检查函数&#xff0c;可用step进行判断是否是当前节点的下一个节点…

如何获取歌曲id---cloudmusic

X-Requested-With:“XMLHttpRequest”: https://blog.csdn.net/muzico425/article/details/102735413 https://www.runoob.com/xml/xml-http.html https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequest 通过该案例主要还是学习一下X-Requested-With:"XMLHtt…