当前位置: 首页 > news >正文

SPI通信

SPI通信

1、SPI通信概述

SPI(Serial peripheral interface)是一种同步、串行、全双工、总线制、主从工作方式
有四线控制:

  1. SDO——主设备数据输出,从设备数据输入,对于MOSI output slave input
  2. SDI——主设备数据输入,从事设备数据输出,对应MOSI input slave output
  3. SCLK——时钟信号,由主设备产生
  4. CS——从设备使能信号,由主设备控制

2、SPI总线通信模式

SPI有四种不同的同学模式:

CPOL:时钟极性选择
CPHA:时钟相位选择

控制我们主设备通信模式具体如下
Mode0:CPOL=0,CPHA=0
Mode1:CPOL=0,CPHA=1
Mode2:CPOL=1,CPHA=0
Mode3:CPOL=1,CPHA=1

是用来配置数据采样是在第几个边沿:
CPOL=0,表示当SCLK=0时处于空闲态,所以有效状态就是SCLK处于高电平时
CPOL=1,表示当SCLK=1时处于空闲态,所以有效状态就是SCLK处于低电平时
CPHA=0,表示数据采样是在第1个边沿,数据发送在第2个边沿
CPHA=1,表示数据采样是在第2个边沿,数据发送在第1个边沿

例如:
CPOL=0,CPHA=0:此时空闲态时,SCLK处于低电平,数据采样是在第1个边沿,也就是
SCLK由低电平到高电平的跳变,所以数据采样是在上升沿,数据发送是在下降沿。

CPOL=0,CPHA=1:此时空闲态时,SCLK处于低电平,数据发送是在第1个边沿,也就是
SCLK由低电平到高电平的跳变,所以数据采样是在下降沿,数据发送是在上升沿。

CPOL=1,CPHA=0:此时空闲态时,SCLK处于高电平,数据采集是在第1个边沿,也就是
SCLK由高电平到低电平的跳变,所以数据采集是在下降沿,数据发送是在上升沿。

CPOL=1,CPHA=1:此时空闲态时,SCLK处于高电平,数据发送是在第1个边沿,也就是
SCLK由高电平到低电平的跳变,所以数据采集是在上升沿,数据发送是在下降沿。
请添加图片描述
需要注意的是:我们的主设备能够控制时钟,因为我们的SPI通信并不像UART或者IIC通信
那样有专门的通信周期,有专门的通信起始信号,有专门的通信结束信号;所以我们的
SPI协议能够通过控制时钟信号线,当没有数据交流的时候我们的时钟线要么是
保持高电平要么是保持低电平。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【如何选择Mysql服务器的CPU核数及内存大小】
  • Linux学习第49天:Linux块设备驱动实验(一):Linux三大驱动之一
  • 硬件安全模块 (HSM)、硬件安全引擎 (HSE) 和安全硬件扩展 (SHE)的区别
  • 四十八----react实战
  • IO进程线程 day1 IO基础+标准IO
  • 爬虫工作量由小到大的思维转变---<第三十章 Scrapy Redis 第一步(配置同步redis)>
  • UntiyShader(六)Unity提供的Cg/HLSL语义
  • AI提示词入门教程
  • idea中终端Terminal页面输入命令git log后如何退出
  • 第一章 简单编程实现花生壳的ddns功能
  • Redis7.2.3(Windows版本)
  • English: go through customs
  • vue3为什么使用带有 .value 的 ref,而不是普通的变量
  • Pytorch的讲解及实战·MNIST数据集手写数字识别
  • Android 8.1 设置USB传输文件模式(MTP)
  • Google 是如何开发 Web 框架的
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • 【剑指offer】让抽象问题具体化
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • Docker 笔记(2):Dockerfile
  • Fundebug计费标准解释:事件数是如何定义的?
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • JS字符串转数字方法总结
  • Markdown 语法简单说明
  • nfs客户端进程变D,延伸linux的lock
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • Sass 快速入门教程
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 关于Flux,Vuex,Redux的思考
  • 软件开发学习的5大技巧,你知道吗?
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • ​Benvista PhotoZoom Pro 9.0.4新功能介绍
  • ‌分布式计算技术与复杂算法优化:‌现代数据处理的基石
  • # 职场生活之道:善于团结
  • ###C语言程序设计-----C语言学习(6)#
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第1节 (全局数据、栈和堆)
  • (el-Transfer)操作(不使用 ts):Element-plus 中 Select 组件动态设置 options 值需求的解决过程
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (Windows环境)FFMPEG编译,包含编译x264以及x265
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (三)Kafka离线安装 - ZooKeeper开机自启
  • (四)opengl函数加载和错误处理
  • (转)Oracle 9i 数据库设计指引全集(1)
  • (转)德国人的记事本
  • (转)负载均衡,回话保持,cookie
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】